If you're building a recovery flow — or just wondering why a cart does or doesn't show up in your admin — the key question is what an abandoned checkout is in Shopify, and when one actually gets created.
What is an abandoned checkout in Shopify?
Shopify's Abandoned Checkouts API documentation defines it in one sentence: "A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase."
Two practical consequences follow directly from that definition:
- No contact information → no abandoned checkout. A shopper who fills a cart but never starts checkout (or never enters an email or phone number) doesn't produce an abandoned checkout record. No tool — Shopify's own automation included — can email a cart that has no address attached.
- Completion removes it from "abandoned". The record exists in the window between contact entry and purchase.
What we observed about timing
The documentation doesn't specify exact timing, so the following are observations from our own development-store testing (July 2026), offered as data points rather than guarantees:
- The
checkouts/createwebhook fired within seconds of the shopper entering an email address on the checkout page — well before any "abandonment" delay. - Several
checkouts/updateevents followed as the shopper moved through checkout, sometimes minutes or hours apart. - The REST
/admin/checkouts.jsonlisting lagged the webhooks: fresh checkouts took a while (in our tests, on the order of hours) to appear there, while the webhook payloads were immediate. If you're building on this API, the webhook stream is the timely signal.
For developers: the webhooks and the API
If you're building on this, these are the documented pieces (there's a fuller map in Shopify abandoned checkout API and webhooks):
- Webhooks. The webhook topic list includes
checkouts/create,checkouts/updateandcheckouts/delete. The payload carries the line items and, once entered, the contact details, plus anabandoned_checkout_urlthat returns the shopper to their checkout. There are alsocarts/createandcarts/updatetopics for the pre-checkout cart, which has no contact information attached. - GraphQL Admin API. The
abandonedCheckoutsquery lists them; the documentation states it requires theread_ordersaccess scope. - REST Admin API. The Abandoned checkouts resource (
GET /admin/api/{version}/checkouts.json) still exists, but Shopify marks the REST Admin API as legacy as of October 1, 2024, and requires new public apps to use GraphQL exclusively from April 1, 2025.
In practice (from our own testing, above), the webhook stream is the timely signal; the listing endpoints are for reconciliation.
What this means for merchants
Recovery timing is therefore a choice layered on top of Shopify's data: the checkout exists as soon as contact details are entered, and when to send the first reminder is up to your tooling. (We've written separately about choosing a send window and why many abandoned checkouts carry no marketing consent.)