Schedule syncs, and what "Overdue" means
Scheduled syncs let a connection pull its supplier feed on a repeating clock, without you opening the app. You choose the cadence when you connect the supplier, and you can change it any time on the connection page. Recurring schedules are on the paid plans only, so on Free a connection runs only when you ask it to. Each paid plan also sets how often a schedule can run: at most every 6 hours on Starter, at most every 2 hours on Growth, and at most once an hour on Scale and Unlimited. Plans also differ in how many suppliers you can connect.
Where the setting lives
On the Connect a supplier page, the Schedule section has a Sync frequency menu. You save the page with Save in the Shopify admin save bar, not with a button on the page.
On an existing connection, the same menu is in the Schedule section of the connection page. It saves through the Shopify admin save bar, which appears at the top of the page once you change something. The menu is the only control: choose Manual to stop scheduled syncs, or any other frequency to start them.
The eight sync frequencies
Sync frequency has eight options: Manual, Hourly, Every 2 hours, Every 6 hours, Daily, Daily at a set time, Weekly on selected days, and Custom schedule (cron). The menu shows only the ones your plan allows, as explained under "Your plan sets how often a schedule can run" below.
Manual means no schedule at all. The connection runs only when you click Sync now or Preview changes.
Hourly, Every 2 hours, Every 6 hours and Daily run at fixed clock times: Hourly at the top of every hour, Every 2 hours at the top of every even hour (00:00, 02:00, 04:00 and so on up to 22:00), Every 6 hours at 00:00, 06:00, 12:00 and 18:00, and Daily once at 03:00. Those are clock times in UTC, on the server that runs the sync worker, not times in your store's own zone.
Daily at a set time and Weekly on selected days let you pick the time yourself, from a menu of 15 minute steps. Weekly also lets you pick which days it runs on. Both run in your store's time zone, not UTC, so "9:00 am" on this schedule means 9:00 am where your store is.
Custom schedule (cron) is for anything the two builders above can't express: type a 5 field cron expression (minute, hour, day of month, month, day of week), for example 0 9 * * 1-5 for weekdays at 9:00 am. It also runs in your store's time zone. A few limits keep custom schedules safe and readable:
- Exactly 5 fields. A 6 field expression with seconds is rejected.
- Up to 64 characters, using only digits, the characters
*,,,/and the range hyphen, and 3 letter month or weekday names (JAN,MON, and so on). Macros like@daily, and special characters like?,L,Wor#, are not accepted. - The expression has to actually run at least once within the next year, or it's rejected as a schedule that never fires.
- Custom schedules can run at most once an hour on any plan. An expression whose runs are spaced closer than 60 minutes apart is rejected, with a message telling you to space them out.
- Custom schedules also have to fit your plan: at most every 6 hours on Starter and every 2 hours on Growth. An expression whose runs are closer together than the plan allows is rejected when you save; see the next section. The hint under the field names your plan's limit.
If you type a cron expression that fails any of these checks, the field shows exactly what to fix. Once it's valid, the field shows the next few times it would run, so you can check it reads the way you meant before you save.
Presets stay in UTC; the three set-time kinds use your store's zone
Hourly, Every 2 hours, Every 6 hours and Daily run in UTC, as the presets always have, so a preset schedule never shifts with your store's time zone. If you want a preset-style cadence in your own local time, for example "every day at 9:00 am, my time", use Daily at a set time instead of Daily.
Daily at a set time, Weekly on selected days and Custom schedule all read your store's time zone from Shopify at the moment you save the connection, and that is the zone the schedule keeps running in until you save again. If your store's time zone changes later, for example because you move your business, the schedule keeps its old zone until the next time you open the connection and save it, at which point it picks up the new one. The connection page tells you when this is the case: it shows the zone a set-time schedule is currently running in, and if that differs from your store's time zone right now, it says so and explains that saving switches it over.
Your plan sets how often a schedule can run
Each paid plan has a fastest schedule, and the Sync frequency menu offers only the options that fit it:
- Starter syncs at most every 6 hours. The menu offers Manual, Every 6 hours, Daily, Daily at a set time, Weekly on selected days, and Custom schedule (cron).
- Growth syncs at most every 2 hours. The menu adds Every 2 hours.
- Scale and Unlimited sync at most once an hour. The menu adds Every 2 hours and Hourly.
Daily at a set time and Weekly on selected days are allowed on every paid plan. On Starter and Growth, a note beside the menu names your plan's limit, for example "Your Starter plan syncs at most every 6 hours. Upgrade to sync more often.", with an Upgrade plan link to the billing page.
A custom cron expression is checked against the same limit when you save. If its runs are closer together than your plan allows, the field shows an error such as "The Growth plan syncs at most every 2 hours. Choose a slower schedule, or upgrade your plan." and nothing is saved.
If you move to a smaller paid plan, for example from Scale to Starter, each connection scheduled faster than the new plan allows is switched to the fastest schedule that plan allows: Every 6 hours on Starter, Every 2 hours on Growth. A connection on Every 2 hours, for example, moves to Every 6 hours when you go from Growth to Starter. The connection page shows an info banner such as "Your plan changed, so this connection now syncs every 6 hours." Nothing else on the connection changes. Moving back up does not bring the faster schedule back, so set it again if you want it. See Plans, connection limits, and changing plan for the rest of what each plan allows.
Check your supplier's limits before choosing a fast cadence
Hourly, Every 2 hours, and any custom schedule close to them, is not automatically the best choice. Several supplier APIs cap how often you may call them, or refresh their own data more slowly than once an hour, so polling harder gains you nothing and can get calls rejected.
BigBuy publishes a limit of 10 requests per hour on its stock endpoint, so run that connection hourly at most. The Lipsey's feed refreshes at most once an hour, so hourly is its ceiling too. Turn 14 Distribution publishes no API usage policy, and the public integrator guidance treats its main inventory feed as a once a day pull, so start that connection on Daily and check with your Turn 14 rep before running it more often. Each preset repeats its own cadence note on the Connect a supplier page, in the banner that appears when you pick the preset. When in doubt, start slower and move up.
Free plans are manual only, and the server enforces it
On a plan without scheduled syncs, the only option in Sync frequency is "Manual only". On the Connect a supplier form a note beside the menu says "Scheduled syncs need a paid plan.", set the same way a paid plan's own schedule floor is; on a connection's own page the same fact is an info banner.
That gate is enforced on the server, not just in the menu, and it applies to every one of the eight options equally: a Hourly request is coerced to manual the same way a Custom cron request is. If any recurring frequency reaches the save anyway (for example from a direct form post), it is reverted to manual, its cron expression and time zone are cleared, and scheduled sync is switched off. The banner then opens with "Your last save kept this supplier on manual." so the reverted choice is not silent.
Manual syncing is untouched. Sync now and Preview changes work normally on Free. If a paid store later moves to Free, recurring jobs stop but your connections and history are kept, and the frequency, cron expression and time zone already stored on a connection are left alone so a re-upgrade can restore them. One caveat: while you are on Free the menu offers Manual and nothing else, so saving that connection's settings writes Manual over the stored value. Leave that connection's settings alone if you want your old schedule back on re-upgrade.
The catch-up sweep
A sweep runs every 15 minutes and queues a catch-up sync for any scheduled connection that is past due, for example because the worker or its queue was unavailable. It is deduplicated, so repeated sweeps do not pile up duplicate jobs. Saving a connection runs the same check for that shop, which is why a schedule you enable on a connection that has never synced starts without waiting for the next clock tick. A connection that synced recently is not yet past due, so that one does wait.
What "Overdue" means
The Overdue badge means more than "past due", for every kind of schedule.
For Manual, Hourly, Every 2 hours, Every 6 hours and Daily, the badge appears once a connection is past its interval multiplied by 1.5, so an hourly connection is badged once more than 90 minutes have passed since its last sync, not at 61 minutes. Every 2 hours is badged past 3 hours, Every 6 hours past 9 hours, and Daily past 36 hours.
For Daily at a set time, Weekly and Custom, the badge follows the same idea but measures the gap between actual scheduled run times instead of a fixed interval. A connection is overdue once it is more than halfway past the most recently missed run, counting from the run before it. For example, a weekly schedule that runs every Monday at 9:00 am has a 7 day gap between runs; if last Monday's run is missed, the connection is badged Overdue starting Thursday at 9:00 pm, halfway to the following Monday, not the moment Monday's run time passes.
A scheduled connection that has never synced counts as overdue right away, whatever its schedule. A connection set to Manual never shows the badge, because it has no schedule to miss.
The badge shows in three places: the Next sync tile in the Dashboard's Overview, the Next sync column on the Connections list, and Next scheduled sync in the Activity panel on the connection page.
What the next-sync value shows
The Connections list and the Dashboard call it Next sync; the connection page calls it Next scheduled sync. When a connection has no recurring schedule, it reads "Manual" or "Disabled" instead of a date.
For Manual, Hourly, Every 2 hours, Every 6 hours and Daily, the value is worked out from the connection's last run plus its interval, so an hourly connection last synced at 10:17 reads 11:17 even though the recurring job fires at 11:00. Read it as "roughly when this is due" rather than as a countdown to an exact tick.
For Daily at a set time, Weekly and Custom, the value is the actual next scheduled run time itself, since these schedules have real clock times to point at rather than a plain interval. Every date in the admin is printed with its time zone shown, so the value itself is never ambiguous.
Scheduled runs land in Sync history exactly like a manual one, and they count as the connection's "Last run".
Need help? Visit the support page or email hello@usenormalize.com.