Skip to main content
A test run is a dry run of the saved flow: every step is traced and shown with what it would have done, and nothing is sent, written, metered or recorded, unless you explicitly ask for one email.

Before you can test

The test runs the saved flow, so save first; testing is disabled while you have unsaved changes or an empty canvas. The same validation that gates activation gates testing, so you fix a broken flow before tracing it.

Choosing what to test against

Pick a store: search the stores that installed your app by name or myshopify domain. The picker shows each store’s status and plan, and warns when a store has no email on record, since send steps will trace as blocked. Or define a custom store: a synthetic store with the attributes you set: subscription status, plan name, monthly and total revenue, total charges, whether there’s an email on record, and the values of any custom fields your flow reads. No connected store needed, which makes it the way to probe one branch, or to test anything at all on a brand-new app. If the trigger carries variables, the test asks for them too: a plan name, a charge name, an event quantity. Leave one empty to trace an event that didn’t carry it, which is how you check an is empty branch.

Reading the trace

Each step gets a badge saying what happened: Conditions are traced with the same semantics the engine uses, so the branch you see is the branch production takes.

Sending one email for real

Optionally, pick an email step and give an address: while the test runs, that step really sends, to you. Leave the address empty and the whole run stays a trace. It’s the way to check the rendered email, merge variables and all, without sending anything to a merchant.

Replaying

Replay re-runs the trace against the same subject, so you can change a condition, save, and see the branch move.
Last modified on August 30, 2026