You set up a daily Task: “every weekday at 9am, summarize my Gmail inbox and post to Slack.” Monday at 9:05 you check — nothing fired. The Task is still listed under Settings → Tasks, marked active, with a “next run: tomorrow” line that has clearly drifted. ChatGPT Tasks is a scheduling layer that runs a saved prompt on a cron-like schedule, then delivers the result via push notification, email, or in-thread message. When a Task does not fire, it is almost always one of four things: a timezone mismatch between your account and the scheduler, a silently paused Task, a plan tier change that disabled the feature, or a recent model switch that orphaned the Task’s bound model.
Common causes
In rough order of frequency.
1. Account timezone differs from device timezone
Tasks fire in the timezone tied to your ChatGPT account at the moment of creation. If you set up a Task while traveling, or your account was created in a different region, “9am” is 9am account-time — which can be 6 hours ahead of your local clock. The Task fires correctly; you just are not checking at the right moment.
How to spot it: Settings → Account → Timezone shows a different zone than your device clock. The Task’s “last ran” timestamp is shifted by exactly N hours.
2. Task was paused — manually or automatically
Each Task has an active / paused toggle. ChatGPT auto-pauses Tasks that error out N consecutive runs (commonly 3-5) to avoid spamming you with failures. A paused Task stays in the list and shows a “next run” estimate, but nothing fires.
How to spot it: The Task row shows a small pause icon or grey toggle. Recent run history has 3+ consecutive failures.
3. Plan downgraded — Tasks gated to Plus and above
Tasks are a paid-tier feature. If your Plus subscription lapsed (card declined, auto-renew failed), all your Tasks freeze the moment your plan flips to Free. They remain visible but never fire. See ChatGPT subscription not recognized for the renewal-failure pattern.
How to spot it: Settings → Subscription is on Free, or Plus shows a past renewal date. All Tasks show identical “last fired” timestamps right around the lapse moment.
4. Task bound to a model that was retired or renamed
Tasks save the model selection at creation time. When OpenAI retires or renames a model (e.g. an older gpt-4o variant becomes gpt-5.5), some Tasks lose their binding. The scheduler reports “model unavailable” internally and skips the run silently.
How to spot it: The Task was created more than 3 months ago. Recent runs in the history show “skipped” with no output, or the model field shows a deprecated name in the Task settings.
5. Push / email delivery channel broke
The Task may have run successfully but the delivery failed: notification permission revoked, email landed in spam, Slack webhook URL expired. You think it did not fire; actually it did, and the result is lost.
How to spot it: Settings → Tasks → click the Task → “Run history” shows successful runs. Your notification inbox / Slack channel shows nothing.
6. Daily / weekly Task quota hit
There is a per-account cap on active Tasks (typically 10 on Plus, more on Team / Pro / Enterprise). Creating an 11th Task does not fail loudly — it just stays inactive. New Tasks past the cap quietly never fire.
How to spot it: You recently created several Tasks in a row. Counting active Tasks shows you are at the cap; the most recent ones show “pending activation”.
7. Tool dependency unavailable when the Task fired
If the Task uses tools like web browsing, Code Interpreter, or a custom connector, and those tools are degraded or rate-limited at fire time, the Task may abort. The scheduler counts it as a failed run, contributing to the auto-pause threshold.
How to spot it: Run history shows “tool error: browsing unavailable” or similar in the per-run detail panel.
Before you start
- Confirm what day and time the Task last fired successfully, if ever.
- Note any plan, country, or timezone changes since the Task was created.
- Save the Task’s prompt text — if you need to recreate it, you do not want to retype the prompt from memory.
- Check whether other Tasks fired today; a single broken Task vs. a global failure are very different.
Information to collect
- Task’s run history (Settings → Tasks → tap Task → History tab).
- The schedule expression (e.g. “every weekday 09:00”) and the timezone shown next to it.
- Plan tier and renewal date.
- Bound model name on the Task.
- Delivery channel (push / email / in-thread) and last successful delivery on that channel.
- Total count of active Tasks vs. quota.
Step-by-step fix
Ordered to fix the cheapest gates first.
Step 1: Reconcile timezone
Settings → Account → Timezone. Set it to your physical location. Then edit each Task and re-confirm the schedule — some Tasks store an absolute UTC offset that does not auto-update when you change the account timezone. Re-saving “9:00” forces a re-bind to the new zone.
Step 2: Toggle the Task off and on
In the Task list, flip the active toggle off, wait 5 seconds, flip it on. This forces the scheduler to recompute the next-run timestamp. If the Task was auto-paused after repeated errors, this also clears the pause flag.
Step 3: Verify subscription and re-activate Tasks
If your plan lapsed, restore it. After payment succeeds, Tasks do not always auto-resume — open Settings → Tasks and toggle each one off/on. Confirm the “next run” line updates to a near-future timestamp.
Step 4: Re-bind the model
Open the Task, change the model to the current default (e.g. GPT-5.5), save. If the prior model is unavailable, the model picker may show a warning. Re-saving with a supported model removes the orphan state. See ChatGPT model auto-switched mid-conversation for the related model-routing problem.
Step 5: Verify delivery channel
Trigger a manual run: in the Task detail view, tap “Run now”. If the manual run completes but you got no notification:
- iOS / Android: Settings → ChatGPT → Notifications → ensure all categories are on.
- Email: search spam / promotions for an OpenAI sender. Allowlist
noreply@openai.com. - Slack / webhook: rotate the webhook URL and re-paste into the Task. Old webhooks expire silently.
Step 6: Check the Task quota
Count active Tasks (active toggle ON, not paused). If you are at the plan cap, decide what to retire. Free up slots before creating new Tasks. The “create” button does not warn you when you have hit the cap.
Step 7: Split the prompt if it depends on flaky tools
If run history shows tool errors, simplify the Task prompt. For example, split a single Task that does “browse → summarize → email” into:
- A primary Task that just generates a daily research prompt.
- Manual or separate automation for the browsing + email step.
This isolates failures and prevents the auto-pause cascade.
Step 8: Recreate the Task from scratch if all else fails
Sometimes a stuck Task has a corrupted internal state that no UI toggle fixes. Copy the prompt text out, delete the Task, recreate with identical schedule and prompt. Manual “Run now” should fire immediately and the next scheduled run should land at the right time.
Verify
- Manual “Run now” produces output within ~30 seconds, delivered through your chosen channel.
- The next scheduled run timestamp is in the future and matches your account timezone.
- A day later, the run history shows a fresh entry with status “success” and a non-empty output.
- The delivery channel (push / email / Slack) shows the new run’s content.
Long-term prevention
- Pin your account timezone to your primary residence; only change it for permanent moves.
- Audit Tasks once a month: prune ones you no longer use to stay under quota and keep the list scannable.
- For each Task, document in the prompt itself the expected delivery channel — makes it easy to test from the run history.
- When OpenAI announces a model deprecation, sweep your Tasks list and re-bind to the current default within the deprecation window.
- For Tasks that depend on tools (browsing, connectors), add a fallback line: “If the browsing tool errors, return a brief plain-text summary instead of failing.”
- Keep an external backup of important Task prompts in a notes app — Tasks are not exportable.
Common pitfalls
- Editing a Task and seeing “next run: in 2 minutes” but expecting it to fire at the original 9am — the next-run is recomputed from edit time on some changes.
- Assuming “Run now” success means the schedule works; it tests the prompt, not the scheduler.
- Leaving a Task at “every minute” while debugging — quickly trips the auto-pause threshold and looks like a bug.
- Disabling notifications globally on iOS to focus, then forgetting that Tasks delivered via push are now silent.
- Setting a Task to fire at midnight account-time and never seeing it because you are asleep when it runs.
- Putting credentials or webhook URLs directly in the prompt — they are stored with the Task and visible to anyone with access to your account.
FAQ
Q: I see the run history shows “success” but I never got a notification. Where is the output?
The run completed and the output is stored — open the Task detail, click the run row, and the full output appears in the panel. The notification delivery is separate from the run; if notifications are off the run still succeeds.
Q: Do Tasks count against my message cap?
Yes. Each Task run consumes from the same per-3-hour Plus message budget as a normal chat. Heavy Task users can hit the cap mid-day, which then silently fails subsequent Task runs. See ChatGPT message cap reached for the cap behavior.
Q: Can a Task fire while I am offline?
Yes — Tasks run server-side, independent of your device. The delivery channel (push / email) will queue and arrive when your device is back online. The run itself happens on schedule.
Q: My Task uses a custom GPT. Does that still work?
It used to be limited. Recent versions allow Tasks to invoke custom GPTs, but you must explicitly select the GPT in the Task model picker. If the custom GPT was deleted or its connector revoked, the Task will fail silently.
Q: What is the minimum interval between Task runs?
Daily is the typical minimum for production use; some plans allow hourly. Sub-hourly schedules are not supported and the UI will reject them. For higher-frequency automation, use the API directly with your own scheduler.
Tags: #ChatGPT #tasks #scheduling #automation #Troubleshooting