For the complete documentation index, see llms.txt. This page is also available as Markdown.

Reorder reminder schedule

The reminder cron sends up to 3 reminder emails after an order is fulfilled — once at the first delay, again at the second, again at the third. Each is opt-in per shop.

Where to configure

Apps → Orders → Reorder Settings → Schedule tab.

Fields

Field
What it does

Enable reorder reminder emails

Master toggle. When OFF, no reminder is sent regardless of other settings

First reminder (days)

Days after order fulfillment for the first reminder. Set to 0 to disable this step

Second reminder (days)

Same, for the second reminder. Leave empty to skip

Third reminder (days)

Same, for the third. Leave empty to skip

Only send to customers with marketing consent

When ON (recommended), the cron skips customers whose Shopify emailMarketingConsent.marketingState isn't SUBSCRIBED. CAN-SPAM / GDPR friendly

How the cron runs

Daily at 06:00 UTC, the job iterates all active merchants. For each shop:

  1. Loads the shop's reorder settings (skip if not enabled or no delays)

  2. For each configured delay (first/second/third), queries Shopify Orders matching:

    • Has orb2b-b2b order tag

    • Fulfilled within [delay-2, delay] days ago — a 3-day window so a single skipped cron tick (deploy, lock contention, MongoDB flap) doesn't drop the cohort

  3. For each candidate order:

    • Skip if customer has no email

    • Skip if respectMarketingConsent is ON and customer isn't subscribed

    • Skip if customer has unsubscribed from reorder reminders (HMAC-verified per shop)

    • Skip if a reminder was already sent for this (shop, orderId, step) — dedupe via unique index

  4. Load the reorder_reminder email template (subject + body + customer's locale)

  5. Substitute shortcodes ({{first_name}}, {{shop_name}}, {{days_ago}}, {{reorder_link}}, {{unsubscribe_link}})

  6. Send via the shop's SMTP config

  7. Record the send to ReorderReminder collection

What if the cron misses a day?

The 3-day query window absorbs occasional misses. If the cron literally doesn't run for 3+ days (operational issue), those cohorts won't receive that reminder step. The next steps for the same customers still trigger normally.

The ReorderReminder unique index on (shop, orderId, step) guarantees no duplicate send — even if the cron re-runs the same day or the window double-counts orders.

Pause sending temporarily

Set the Enable toggle to OFF and save. Sends stop immediately. Set it back ON whenever — the cron picks up from current state (no backfill of missed days).

Stopping reminders for one customer

Each email has an unsubscribe link. When the customer clicks:

  1. Backend verifies the HMAC token against REORDER_UNSUB_SECRET

  2. Records (shop, hashedEmail) to ReorderUnsubscribe collection

  3. Customer sees a "you have been unsubscribed" confirmation page

Future cron runs skip this customer for all 3 steps + all future orders. The unsubscribe is per-shop, so unsubscribing from one shop doesn't affect another shop they buy from.

There's no admin UI to re-subscribe a customer right now — they'd need to email support to be removed from the unsubscribe list.

For consumable products (cosmetics, food, supplies):

  • First: 21-30 days — the natural reorder window

  • Second: 45-60 days — late but still actionable

  • Third: leave empty or 90 days — last-chance churn signal

For non-consumable B2B inventory (equipment, parts):

  • First: 45-60 days

  • Second: 90-120 days

  • Third: leave empty

For high-frequency consumables (printer ink, cleaning supplies, etc.):

  • First: 14 days

  • Second: 30 days

  • Third: empty

Test with one cycle, watch open + click rates, then iterate.

Next

Last updated

Was this helpful?