Getting a Make.com scenario to run once is easy. The hard part is knowing, a month later, that it is still doing what you think. The dangerous failures are not the ones that stop a scenario with a red error. They are the ones that let it finish green while nothing reaches the destination.
What we got wrong, and what it taught us
This site’s own CAPI Shield blueprint is the clearest example we have. Its request to Meta was written against a specific Graph API version. Meta retires versions about two years after release, and once that version was retired every request returned an error. Nobody saw it for about four months, because three settings combined to hide it:
- The HTTP module was told not to treat error responses as errors, so a rejected request looked like a successful one.
- The step had an Ignore error handler, so even a real error would have been discarded.
- Storing incomplete executions was off, so there was no record of failed runs to retry or inspect.
Each of those settings is common advice for keeping a scenario “running smoothly”. Together they made a broken integration look healthy. The blueprint now uses a current version and visible failures, and the rest of this guide is built around not repeating that.
The four ways Shopify automations fail
A hidden failure. As above: the run is green, the destination received nothing. The only defence is checking outcomes, not statuses.
A blocked branch. In Make.com, if a module fails with no error handler, the run stops there. Later steps never execute, including unrelated ones such as logging the order to a spreadsheet.
A missed event. Shopify’s developer documentation says it waits five seconds for a webhook response and retries a failed delivery up to eight times over four hours. If failures continue, the subscription can be removed entirely (Shopify: troubleshooting webhooks). So if your scenario is switched off, out of credits or erroring for an afternoon, you can lose orders, and possibly the webhook itself.
A duplicate event. Shopify tells receivers to handle duplicate deliveries. One order arriving twice can write two rows or send two purchases to an ad platform.
Pattern 1: Choose error handlers by what a failure costs
Make.com offers several error handlers. They behave very differently:
| Handler | What it does | Use it for |
|---|---|---|
| Break | Stops this run and, if incomplete executions are stored, keeps it for automatic or manual retry | Calls to outside services that fail temporarily: Meta, TikTok, Google, Sheets |
| Resume | Carries on using a substitute output you define | Steps where a default value is genuinely acceptable |
| Ignore | Discards the error and carries on | Only steps whose failure you would never want to know about |
| Rollback / Commit | Stops the run, marking it failed or successful | Rarely needed for Shopify order flows |
To make Break useful, open the scenario’s Settings and turn on Allow storing of incomplete executions. Failed runs then appear under the scenario’s incomplete executions, where they can be retried once the outside service is back.
On HTTP modules, leave error responses treated as errors. If a 400 or 500 response is allowed through as a success, no error handler will ever see it.
Pattern 2: Keep branches independent
Put a Router straight after the webhook and give each destination its own branch, each with its own error handler:
Shopify webhook (orders/create)
↓
Router
├── Branch 1: Meta Conversions API → Break handler
├── Branch 2: TikTok Events API → Break handler
├── Branch 3: Google Sheets order log → Break handler
└── Branch 4: P&L sheet → Break handler
A failing Meta branch then cannot stop the order being logged. Put the cheapest, most important branch (usually the order log) first, because a Router runs its branches in order.
Pattern 3: Deduplicate on order ID
Before acting on an order, check whether you have already processed it:
Webhook receives order
↓
Google Sheets: Search rows where order_id = this order's ID
↓
Filter: continue only if no rows were found
↓
Process the order
This costs one extra credit per order. For ad platforms, also send a stable event ID (the Shopify order ID works) with every purchase. Meta and TikTok use it to merge a browser event and a server event for the same purchase, so even if a duplicate slips through, it is counted once.
If your scenario writes to shared sheets and several orders can arrive at once, consider turning on sequential processing in the scenario settings so runs happen one at a time.
Pattern 4: A daily count check
This is the one pattern that catches every failure, including the silent kind:
- Create a second scenario, scheduled once each morning.
- Ask Shopify for yesterday’s paid orders. Make.com’s Shopify app can search orders by date; if you call the Admin API directly, use a currently supported API version, because Shopify retires versions on a published schedule.
- Count the rows your order log recorded for yesterday.
- If the two numbers differ, email yourself both.
When the check finds a gap, look at the scenario’s history and incomplete executions for that day. For ad platforms, a missed purchase can often be sent late: Meta’s Conversions API accepts events up to seven days old, so a gap found the next morning can still be filled.
Pattern 5: Watch the things that switch automations off
- Credits. When a Make.com account runs out of credits, scenarios stop. Check usage weekly and before busy periods; the BFCM checklist covers budgeting for a peak.
- Webhook subscriptions. After any outage of more than a few hours, open Settings → Notifications → Webhooks in Shopify and confirm your webhooks still exist.
- Pinned API versions. If a scenario calls an API with a version in its URL (
/v21.0/,/2025-01/), write down the vendor’s retirement date for that version and set a reminder months ahead. This is exactly the failure described at the top. - Error emails. Make.com can email you when scenarios fail. Make sure those go to an address you actually read.
Before you call a scenario finished
- Each destination is on its own Router branch.
- Outside API calls use Break, and incomplete executions are stored.
- No HTTP module lets error responses through as successes.
- Order ID is checked before processing; ad platform events carry a stable event ID.
- A daily scenario compares Shopify’s paid order count with your log.
- Any pinned API version has its retirement date written down.
- You have tested with a real order and inspected each destination, not just the green tick.
The Make.com for Shopify guide covers first-time scenario setup, and the Google Apps Script quotas guide covers the limits that apply if any of your automation runs in Apps Script.