Which Order fields change in each webhook event? (orders/create vs orders/paid vs orders/fulfilled)

Hi everyone,

I’m building an integration that syncs Shopify orders to our database, and I need to understand exactly which fields can change for each order webhook event.

My situation:

  • I receive multiple webhooks for the same order: orders/create, orders/paid, orders/fulfilled, orders/updated, etc.
  • My database has 100+ columns mapped to the Order object
  • I want to update only the fields that actually changed to optimize database writes

My question:
Is there official documentation or a definitive list showing which Order fields are guaranteed to change (or might change) for each webhook event?

For example:

  • orders/create → ???
  • orders/paid → I assume financial_status, paid_at, transactions… but what else?
  • orders/fulfilled → I assume fulfillment_status, fulfillments… but what else?
  • orders/cancelled → I assume cancelled_at, cancel_reason… but what else?
  • orders/updated → Any field can change?

What I’ve tried:

Current approach:
Right now I’m doing a full upsert for every webhook, but this feels inefficient. Should I:

  1. Continue with full upsert for all webhooks? (safest but inefficient)
  2. Update only specific fields per webhook type? (efficient but risky if I miss fields)
  3. Use webhooks as triggers and fetch fresh data via API? (accurate but rate-limit concerns)

Has anyone solved this problem? Any advice would be appreciated!

Thanks!

Hi @user278

Currently all order webhooks (orders/create, orders/paid, orders/fulfilled, orders/cancelled, orders/updated, etc.) send the full Order object as the payload - not a delta or list of changed fields. This means any field change triggers the firing of this webhook. It also fires in addition to the more specific webhooks (e.g., when an order is paid, both orders/paid AND orders/updated fire).

Another important thing to note is that our docs state:

“Your app shouldn’t rely solely on receiving data from Shopify webhooks. Because webhook delivery isn’t always guaranteed, you should implement reconciliation jobs to periodically fetch data from Shopify.”

Considering your usecase, I think the best approach is what you’re currently doing with full upserts.

1 Like