Khichdi InfoTech
Skip to content

Shopify–Odoo Integration · intermediate · 10 min read

Shopify Webhooks vs Scheduled Sync

When to use Shopify webhooks, cron reconciliation, or both: latency, completeness, failure modes, and recovery patterns for Odoo integration.

Last reviewed 2026-07-30 · Estimated effort: 2–6 weeks typical implementation slice

Table of contents

Webhooks deliver low-latency events — orders, inventory changes, product updates — but they are not a guaranteed audit trail. Endpoints fail, subscriptions lapse after app changes, and duplicate delivery is normal.

Scheduled sync (cron or worker polling) recovers missed events, reconciles drift, and smooths bulk catalog work — at the cost of latency and API budget consumption.

Production-grade Shopify–Odoo integrations almost always use hybrid design: webhooks enqueue work immediately; scheduled jobs reconcile by time window and entity type with idempotent upserts.

Debates about webhooks versus cron often miss the point: they solve different reliability and latency problems. Choosing only one creates predictable gaps.

This article compares integration transport patterns — not Shopify webhook admin UI tutorials or theme event hooks.

Webhooks push orders and critical updates within seconds — essential when warehouse starts picking on import and customers expect fast confirmation in Odoo-backed support tools.

They reduce unnecessary polling and API cost for event-heavy entities like orders during peak season.

  • Verify HMAC signatures on every payload
  • Respond quickly with 200 after enqueue — not after Odoo commit
  • Subscribe deliberately to orders, products, inventory, and refunds needed for scope

Shopify retries failed deliveries, which can duplicate work if importers are not idempotent. Long Odoo transactions inside webhook handlers cause timeouts and retry storms.

App reinstalls, scope changes, and stale endpoints silently stop delivery until someone notices missing orders. Monitoring undelivered webhook age is mandatory.

Cron jobs query Shopify or Odoo by updated_at windows to catch anything webhooks missed. They suit inventory reconciliation, catalog diff sweeps, and nightly financial alignment.

Batch windows can respect rate limits with predictable throughput — useful for large SKU counts and media backfills.

Latency increases: hourly inventory reconciliation means up to 59 minutes of drift unless webhooks also run. Aggressive polling burns API budget and competes with customer-facing operations.

Blind full sync without cursors reprocesses unchanged records — expensive and noisy in logs.

Typical split: webhooks for orders/create and orders/updated; scheduled jobs every 15–60 minutes for inventory delta and order reconciliation; nightly catalog diff for products changed in Odoo.

Each scheduled job stores high-water marks per entity type so restarts resume safely. Reconciliation reports quantify webhook gap rate — a leading indicator of endpoint or queue health.

  • Never process heavy Odoo logic inline in webhook HTTP handlers — enqueue first.
  • Run at least one reconciliation job per critical entity: orders and inventory.
  • Monitor webhook delivery failures and subscription health in Shopify admin or API.
  • Use updated_at cursors for scheduled pulls instead of full catalog scans.
  • Design all importers idempotent so webhook retries and cron overlap safely.
  • Document which events are webhook-only versus cron-only versus both.

  • !Webhook-only design with no reconciliation backstop.
  • !Cron-only design with unacceptable order import delay at peak.
  • !Missing HMAC verification exposing fake order injection risk.
  • !Full product catalog pull every hour instead of delta queries.
  • !Assuming 200 OK from Shopify means Odoo successfully committed.
  • !Forgetting to re-register webhooks after connector redeploy or URL change.

Webhooks give speed; scheduled sync gives completeness. Mature integrations require both with idempotent workers between them.

Queue design and rate limits determine how well hybrid patterns survive peak season — not the choice of webhook alone.

Webhook vs cron: latency, completeness, cost, failure modes.
OptionBest whenTrade-off
ConfigureStandard Odoo covers the needLimited uniqueness
CustomizeDifferentiating workflowUpgrade cost
IntegrateExternal system of recordSync complexity
Webhook enqueue + scheduled reconciliation parallel paths.
  • External system

    Shopify / WMS / etc.

  • API / Webhooks

    Edge

  • Queue

    Reliability

  • Odoo

    ERP truth

  • extapi
  • apiq
  • qodoo
Fast ack → queue → worker → dead-letter on permanent error.
1

Trigger

Business event starts the flow.

2

Execute

Operate in the system of record.

3

Validate

Check outcomes and exceptions.

4

Close

Reconcile and hand off.

Frequently asked questions

How often should reconciliation run?

Match business tolerance: high-volume retail often reconciles orders every 15–30 minutes and inventory hourly. Low volume may use hourly for both. Measure drift before tightening schedules.

Can Odoo cron alone replace middleware workers?

Light volume sometimes yes. High volume and long ORM work usually need external workers so Odoo request threads and webhook timeouts stay healthy.

Should inventory use webhooks or scheduled sync?

Both. Webhooks or inventory_levels/update events for speed where supported; scheduled reconciliation for truth because inventory events can be missed during bulk Odoo adjustments.

Missing orders or stale stock?

We audit webhook subscriptions, reconciliation jobs, and queue health to close gaps between Shopify events and Odoo truth.

Business technology and software delivery