Automation
How to Schedule a ChatGPT Prompt to Run Every Morning Automatically
How to schedule a ChatGPT prompt to run every morning automatically: native Tasks, the API with cron, and n8n workflows, with the limits of each explained.

There are three ways to schedule a ChatGPT prompt to run every morning automatically: ChatGPT’s built-in Tasks feature (no code, but limited), the OpenAI API triggered by a cron job or scheduled cloud function (full control, requires setup), or a workflow tool like n8n with a Schedule Trigger node feeding a prompt into an OpenAI or ChatGPT node (visual, good for chaining actions afterward).
Which one you want depends on what happens after the prompt runs. If you just need a daily summary sent to your inbox, native Tasks inside ChatGPT does that with zero setup. If the output needs to land in Slack, a spreadsheet, or trigger something else downstream, you need the API or a workflow tool, because Tasks can’t hand its output to another system.
What ChatGPT’s native Tasks feature actually does
Tasks is a scheduling layer built into ChatGPT for Plus, Pro, and Team accounts. When you create a task, you’re not scripting anything — you type a request in plain language (“Every weekday at 7am, summarize the top AI news”) and ChatGPT parses that into a recurring job with a stored prompt and a cron-like schedule running on OpenAI’s servers, not on your device.
Mechanically, this means three things:
- The task runs even if your laptop is off or the ChatGPT app is closed, because execution happens server-side.
- Each run is a fresh, stateless conversation. The model doesn’t remember yesterday’s run unless you explicitly tell it to reference prior context, and even then it can only pull from what it can access (browsing, memory, or files you’ve attached), not from its own past outputs unless those were saved somewhere retrievable.
- Delivery is limited to a push notification and, depending on your notification settings, an email or a message inside the app. There’s no webhook, no API callback, no direct file drop.
As of this writing, accounts on paid tiers get a cap on how many active recurring tasks they can have running at once (it’s been in the low double digits and has changed as the feature rolled out), so check the current limit in your account’s Tasks settings rather than assuming a fixed number.
Setting up a task in the ChatGPT app
- Open a new or existing chat and describe what you want, including the schedule: “Every morning at 8am, check the latest headlines about [topic] and give me a 5-bullet summary.”
- ChatGPT will offer to turn this into a scheduled task, or you can open the Tasks section from the sidebar and create one manually.
- Confirm the time and frequency. You can set daily, weekdays only, or a custom recurrence, and the schedule respects the timezone set in your ChatGPT account settings — not your browser’s timezone, which is a common source of runs landing at the wrong hour after travel or a DST change.
- Choose how you want to be notified when the task completes.
That’s the entire setup. The tradeoff is that the prompt lives inside ChatGPT’s interface, so it can’t reach outside systems.
Where the API and cron give you more control
If the goal is to run the same prompt every morning and pipe the result somewhere specific — a database, a Slack channel, a static file that feeds a dashboard — you need something that can call the OpenAI API on a schedule and then do something with the response. Tasks can’t do that second part.
The mechanism here is simple: a scheduler triggers a script, the script calls the Chat Completions (or Responses) API with your prompt, and the script does whatever you tell it with the returned text. On Linux or macOS, that scheduler is usually cron. A crontab entry to run a script every morning at 7am looks like this:
0 7 * * * /usr/bin/python3 /home/you/scripts/morning_prompt.py
The script itself makes an authenticated request to the API with your prompt, then writes the response to a file, sends an email, or posts it wherever you need. If you don’t want to manage a machine that’s always on, a scheduled GitHub Actions workflow or a serverless cron trigger (offered by most cloud providers) does the same job without you keeping a server running.
The catch is that you’re now responsible for the pieces Tasks handled for you automatically: retry logic if the API call fails, secure storage of your API key, and formatting the output into something usable, since the raw model response is just text unless you constrain it. If the downstream system expects structured data, forcing the model into a strict JSON shape is worth setting up properly — How to Write a System Prompt That Forces JSON-Only Output (With Test Cases) covers exactly that, and it applies directly to a scheduled prompt whose output needs to be parsed by another script.
Doing it visually with n8n
n8n sits between the two options above: it gives you scheduling plus the ability to chain the prompt’s output into other actions, without writing a standalone script.
The setup is a Schedule Trigger node set to run daily at a fixed time (n8n lets you pick the timezone explicitly in the node, which avoids the mismatch issue mentioned above), connected to an OpenAI node (or an HTTP Request node if you’re calling a different model) that sends your prompt, connected to whatever you want to happen next — a Slack message node, a Gmail node, a Google Sheets append, or a webhook to your own app.
Because n8n runs as a persistent workflow engine (self-hosted or via n8n Cloud), the trigger fires on its own; you don’t need a separate cron daemon. If you’re already running other automations in n8n, this is usually the path of least friction, since you can reuse credentials and error-handling patterns you’ve already set up elsewhere. If you’re new to n8n and this is your first scheduled workflow, the failure modes worth knowing about are the same ones that trip people up in n8n generally — for instance, if a later step in the chain is a webhook rather than a schedule trigger, N8n Webhook Not Triggering in Production Mode: 7 Causes and Fixes covers why a workflow that fires fine in testing can go silent once it’s activated for real use.
Common failure points regardless of which method you pick
Timezone drift. Every scheduler above stores a timezone somewhere — your ChatGPT account, your server’s system clock, or the n8n node setting. If any of these is off, “every morning at 8am” quietly becomes 8am somewhere else. Check this after any daylight saving time change, not just at setup.
Silent failures. A scheduled task that fails doesn’t announce itself the way an interactive chat does. Native Tasks will usually notify you of a failure, but a cron job or n8n workflow needs explicit error handling (a try/catch that emails you, or n8n’s built-in error workflow trigger) or you’ll only notice the automation stopped working when you go looking for output that isn’t there.
Assuming the model remembers yesterday. Each scheduled run is a new context. If the prompt needs continuity — “compare this to yesterday’s numbers” — you have to feed it yesterday’s output explicitly, whether that’s a file, a database row, or a value passed into the n8n workflow, because the model itself retains nothing between runs unless you built that retention in.
Choosing between the three
Use native Tasks if the output is for you personally and a notification or email is enough. Use the API with cron if you’re comfortable writing a small script and need full control over what happens with the result. Use n8n if you want scheduling plus multi-step automation without maintaining a standalone script, especially if you’re already using it for other workflows.