Skip to content
SyncMyShop

Notes

Real time or batch: how fast should the store and ERP sync?

Each data stream gets its own speed. Stock a buyer sees, paid orders and cancellations move within seconds or minutes, because a buyer or a picker is waiting on them. Journal entries, payouts and price lists move in a scheduled run, because the person who uses them works with them the next morning.

Updated

The short answer

An integration does not have one speed. Each stream gets the speed that matches who is waiting for it. A buyer on a product page and a picker in the warehouse wait in seconds. An accountant who reconciles payouts waits until tomorrow morning.

There are four cadences, and most integrations use all four:

Cadence What starts it Delay Typical streams
Per event The source sends a webhook when a record changes Seconds Paid orders, cancellations, stock on fast movers
Short poll The integration asks every 1 to 15 minutes what changed Up to one interval, plus any lag Stock, order status, fulfillments
Batch A run per hour or per night moves everything at once Hours to a day Journal entries, payouts, price lists, catalog
On demand A person or a page asks for the current value One API call Account pricing, open invoices, a stock check at checkout

The choice per stream comes from two questions: how much harm a value an hour old does, and how many calls the source system allows.

What has to move within seconds

Stock on items that are nearly gone. Item 10482 shows 3 available in the store. At 10:02 a sales rep enters a phone order for 3 in the ERP. Stock syncs to the store every 30 minutes, at 10:00 and 10:30. The store sells 1 at 10:11 and 2 at 10:24, all against stock that no longer exists: 3 units oversold, 3 orders to cancel or backorder. An item that sells 4 an hour sells 2 on average in a 30-minute interval, so the interval has to be short wherever the units left are close to that number. Shopify sends inventory_levels/update when a level changes; in the other direction the ERP pushes the new figure or the integration polls it.

A payment that releases an order. The warehouse picks once the payment is captured. Say the carrier pickup needs orders released by 2:00 pm. An order paid at 1:40 pm under a 30-minute poll can reach the ERP at 2:10 pm and ship a day later. Shopify sends orders/paid for exactly this moment.

Cancellations and credit holds. A cancellation that takes 20 minutes arrives after the box is packed. A customer put on credit hold in the ERP should lose the option to order on terms in the store the minute the hold is set.

What waits for a scheduled run

Data that is used the next working day gains nothing from speed.

Stream Cadence Why
Journal entries to the general ledger Once a day The accountant checks one daily total, not 300 separate postings
Payout reconciliation Once a day, 24 hours behind A payout is only complete when every order, refund and adjustment in it has reached the ERP
Price lists Nightly, or when a list changes 15,000 prices in one run, outside business hours
Catalog content and images Hourly or nightly A new description is not urgent
Supplier stock files As often as the supplier exports Fetching faster than the source refreshes changes nothing

A scheduled run has three advantages. It can be checked: one run, one line count, one total, next to yesterday's. It loads the source system when nobody is working in it. And it leaves the daytime call budget to orders. One iPaaS implementation guide for a store and NetSuite recommends a 24-hour lag on its payout flow for the reason in the table.

What polling costs

Every poll costs calls, whether anything changed or not. Take a store with 72 orders a day and a poll that makes 5 calls per run: new orders, cancellations, refunds, stock and customers.

Method Runs a day API calls a day Calls per order
Poll every minute 1,440 7,200 100
Poll every 5 minutes 288 1,440 20
Poll every 15 minutes 96 480 6.7
Webhook plus a reconciliation run every 15 minutes 96 96 1.3

The sums: 1,440 runs times 5 calls is 7,200, divided by 72 orders is 100. In the last row the webhook carries the order itself, so the only API calls are the 96 single-call reconciliation runs.

Where those calls land decides whether they hurt. Business Central online allows 6,000 OData requests per 5-minute window per user, and 5 at the same time; every integration that signs in as that user shares the window. NetSuite counts concurrent requests per account: 5 on the Standard tier, 15 on Premium, 20 on Enterprise and Ultimate, plus 10 per SuiteCloud Plus license, shared by every integration on the account. A poll that runs every minute holds one of those slots 1,440 times a day, mostly to learn that nothing changed. The details are in NetSuite concurrency and governance limits and the arithmetic for full runs in integration throughput.

Event-driven is not instant, and lags add up

A webhook is fast but not immediate, and not complete. Business Central waits 30 seconds after the first change before it sends a notification, sends one collection notification when more than 1,000 records change in that window, and lets a subscription expire after 3 days unless it is renewed. salesShipments is not on its list of webhook-enabled APIs, so shipments from Business Central are polled. Shopify retries a failed webhook 8 times over 4 hours and then deletes the subscription. A webhook stream therefore always runs with a reconciliation poll next to it, as described in webhooks are not a guarantee.

Polled flows often add a deliberate lag: a run only reads records older than a set number of minutes. The same implementation guide recommends 10 to 15 minutes on the order flow, so an order reaches its final payment status first, and 5 minutes on fulfillments, so tracking numbers are on the record. Interval and lag add up:

One order, two cadences: a webhook on orders/paid against a 15-minute poll with a 15-minute lag Order 1047 is placed and paid at 10:02. A webhook on orders/paid puts it in the ERP at 10:02. A poll every 15 minutes with a 15-minute lag skips it at 10:15, because that run only reads up to 10:00, and picks it up at 10:30, 28 minutes later. Store order 1047 paid, 10:02 Webhook on orders/paid in the ERP at 10:02 Poll every 15 minutes, 15-minute lag reads up to 10:00 in the ERP at 10:30 Order 1047 under polling 28 minutes in the store only 10:00 10:15 10:30 10:45
The same order under two cadences. The poll adds its interval and its lag; the webhook adds neither.

A 15-minute interval with a 15-minute lag delivers an order 15 to 30 minutes after it was paid, 28 minutes for order 1047. A billing flow behind it with its own 60-minute lag puts the invoice over an hour after checkout. The lag solves a real problem, a payment or fraud check that changes the order right after it is created. Reacting to orders/paid instead of orders/create solves it without the wait.

Choosing an update schedule for each data flow

Real time is not a setting for the whole integration. It is decided per flow, by who is waiting for the answer.

Speed Flows How it runs
Within seconds stock after an order, order into the ERP, payment status webhook or event from the source, then a queue
Every few minutes stock and expected dates from the ERP or WMS scheduled read of what changed since the last run
Nightly price lists, journal entries, the full stock check batch with paging, in the quiet hours
On demand PunchOut session, a price calculated at checkout a call while the buyer waits

Events have their own limits. Shopify expects a webhook to be answered within five seconds and retries a failed delivery up to 8 times over 4 hours, after which the subscription is removed. BigCommerce retries over a longer schedule and deactivates a webhook 48 hours after the first failed attempt. A webhook can also arrive twice. So an event is a trigger, and a scheduled read behind it catches what an event missed. The detail is in webhooks are not a guarantee and real time versus batch.

What this means for your integration

The cadence is a design choice per stream, not a property of the integration. We set per stream what starts a run, how old the data may be and how many calls that costs against the limits of your systems, then build, host and run it. Orders and stock go per event or in short polls, with a queue and a reconciliation run so a missed webhook is picked up. In the dashboard you see each run and what it changed.

How this works for stock is on stock and availability, and the order flow with its fields on orders, customers and shipping. Tell us which store and ERP you run, and you hear which streams can run per event and what the rest costs in calls.

Frequently asked questions

Should the store and ERP sync in real time?

Some streams should and most should not. Stock on fast-moving items, paid orders, cancellations and credit holds move per event or every few minutes. Journal entries, payouts, price lists and catalog content move in a scheduled run, often once a day. One integration runs both side by side.

What does real time mean in an integration?

Strictly, that the source system sends a message when a record changes and the other system has it within seconds. Vendors also use the word for polling every 5 or 15 minutes. Ask for two things: what starts a run, and the interval in minutes, including any lag the run waits before it reads a record.

Is real time always better than batch?

No. A nightly run can be checked in one go against a line count and a total, it uses API calls when nobody is working in the ERP, and it leaves the daytime budget to orders. For journal entries and payout reconciliation a run that waits until every refund and adjustment has arrived is more accurate than a fast one.

How often should stock sync to the store?

It follows from how fast an item sells and how many units are left. An item that sells 4 an hour sells 2 on average during a 30-minute interval, which is too many when 3 are left. An item that sells twice a month can sync hourly. The integration can push stock per event for some items and poll the rest.

What is the difference between polling and a webhook?

With polling the integration asks the API at fixed times what changed. With a webhook the source system sends a request when something changes. Polling costs calls even when nothing changed; a webhook costs nothing until something happens, but can arrive twice, late or not at all. See webhooks are not a guarantee.

Tell us what you need

Tell us which systems you use and what needs to work better. We reply personally within one working day. We help you define the work, then agree the price and timing before you commit.

  • You know the price and the timeline before you commit to anything
  • We work out the connection that takes the work off your hands
  • We handle the build, hosting, monitoring and maintenance
  • Your team has less information to retype and fewer discrepancies to chase

Suppliers, products, orders per day, a rough estimate is fine.

Or email directly: carsten@syncmyshop.com