Run history and troubleshooting
Every run is recorded. Run history in the app menu lists the runs of all workflows; the Run history button in a workflow's editor lists only that workflow's runs.
The list
Each row shows the workflow, the status, the trigger and the time. Filter by workflow and by status. Test runs are marked as tests.
| Status | Meaning |
|---|---|
| Queued | Accepted, starts in a moment |
| Running | Steps are being executed |
| Waiting | At a Wait step, or started with a delay |
| Completed | Every step on the path finished |
| Failed | A step failed, or a Fail the run step ended the run |
| Not started | Loop protection or the plan limit stopped it before any step ran |
| Cancelled | A debug session you stopped, or a run cancelled over the API |
One run
A run's page shows:
- Workflow, Status, Trigger, Started, Finished and Duration.
- Steps - every step that ran, in order, with its status and duration. Open a step for what it returned and, when it failed, its error. A step that was retried shows each try, for example Succeeded on try 3 or Failed after 4 tries. Steps inside a Repeat for each are grouped by item. In a preview, a step that was not run is marked Preview - not run and shows what it would have run with.
- Trigger event - the event the run started with. It may contain personal data and is stored encrypted.
- Started by a chain of workflows - when other workflows led to this run.
- For a run that was not started: the reason.
Run again starts a new, real run with the same event. Open workflow takes you to the editor.
The filled-in fields of a step are not stored with a real run, because they can hold secrets. What a step returned is stored, with secret values masked. Code steps keep their own record, with input and logs, under Function runs.
How long runs are kept
| Plan | Run history |
|---|---|
| Free | 30 days |
| Starter | 60 days |
| Grow | 90 days |
| Unlimited | 180 days |
The workflow does not start
Work down this list:
- Is it on? The badge next to the name reads On. A banner This workflow was turned off automatically names the reason. See Loop protection.
- Is a permission missing? The editor shows This workflow needs permissions. A trigger only receives events for data you granted. See Permissions and store data access.
- Does the trigger filter reject the event? Rejected events leave no trace. Compare the rule with a real event's values; mind numbers sent as text and upper and lower case. See Trigger filters.
- Is it a change trigger and the first sighting? The first time the app sees a resource it only remembers it. See Change triggers with before and after values.
- Is it an order, customer, draft order or checkout trigger? Those need Shopify's approval for protected customer data. See Permissions and store data access.
- Is there a run with the status Not started? Open it and read the reason: loop protection, or the plan's run limit for the last 30 days is reached. See Plans, runs and extra runs.
- Is it a storefront trigger? Those only arrive with the visitor's consent and are best effort. See Storefront behaviour triggers.
- Is it a trigger that is checked every 5 minutes? Give it a few minutes.
A step fails
| Message or symptom | Usual cause | What to do |
|---|---|---|
| A Shopify step names a missing access or permission | The permission is not granted, or was revoked | Grant it on the Permissions page |
| Shopify says the app is not approved to access customer data | Protected customer data | See Permissions and store data access |
userErrors from Shopify |
Shopify refused the change: a wrong id, an invalid value | Read the message. Run a preview with the run's event to see the values the step would use |
| The variables or the body are not valid JSON | Text with quotes or line breaks inside JSON | Add the json filter. See Liquid in every field |
| An HTTP request answers 401 or 403 | Wrong or missing key | Check the secret's name and value, and the header |
| A value is empty | The variable does not exist for this event, or its step did not run on this path | Use the default filter or a Condition. A Log step before it shows what the value was |
| A list is too long for Repeat for each | More items than Maximum items | Raise it up to 500, or work in portions |
| Code timed out | More than 5 seconds | Do less per run; move waiting on other systems into HTTP request steps |
| The sending limit is reached | Too many recipients in an hour or a day | See Send email and email senders |
| The run was interrupted | The run lost its worker while running | It is not run again automatically, because steps may already have run. Check what was done, then use Run again if it is safe |
Find the cause faster
- Test with the real event. Copy the Trigger event of the failed run into Event (JSON) of the Test panel and run a preview. Previewed steps show what they would have run with. See Test, preview and debug.
- Step through it with the debugger and a breakpoint before the failing step.
- Add a Log step before the step that fails, with the values it reads.
Still stuck?
See Support. Tell us the workflow's name and the time of the run. Never send a secret's value.

