Shopify Events vs Webhooks: What Changes for Your Handlers
Shopify Events vs webhooks is now a real choice. Shopify’s Next Generation Events became generally available with API version 2026-10 on October 1, 2026. Events let a subscription fire only when specific fields change, return a payload you design with GraphQL, and skip deliveries that do not match a filter. Classic webhooks keep working. This guide compares the two, walks through a collection-membership subscription from Shopify’s announcement, lists the 18 topics, and ends with our view on when to move. Updated in October 2026 after general availability. We first wrote this when Events were still in developer preview.

The Problem With Classic Webhooks
A classic webhook tells your app that something changed, not what. Subscribe to products/update and you get a delivery for every product change, including title, tags, status and options. An app that only syncs prices still has to work out whether each delivery matters.
Two settings help, but only partly. include_fields shrinks the payload, yet Shopify still sends a delivery for every qualifying update. filter checks current values, so a title edit can still pass if the product already matches.
[[webhooks.subscriptions]]
topics = ['products/update']
uri = '/webhooks/products/update'
include_fields = ['id', 'status', 'variants.id', 'variants.price', 'updated_at']
filter = 'status:active AND variants.price:>=10.00'Shopify’s own example is a collection. Knowing that a collection changed is only part of the work. You still need to know which product joined or left, which can mean fetching the collection’s products, comparing them with your saved list and then updating your app, all to identify one change.
What Shopify Events Change vs Webhooks
You define the topic, action, triggers and query in shopify.app.toml. Topics map to GraphQL Admin API objects. An event has three parts.
- Triggers: which changes matter to your app, such as a product joining a collection or a variant’s price changing.
- Query: a GraphQL Admin API query whose result Shopify includes in the payload. It can include related data and metafields.
- Query filter: which query results your app should receive, such as only products with an
ACTIVEstatus.
The trigger and the query are independent. A change to one field can trigger a query that fetches other data, and the filter then checks that result. Here is the collection-membership subscription from Shopify’s general availability announcement.
[events]
api_version = '2026-10'
[[events.subscription]]
handle = 'collection-membership'
topic = 'Collection'
actions = ['update']
triggers = ['collection.products']
uri = '/api/events/collections'
query = '''
query CollectionMembership($collectionId: ID!, $productsId: ID!) {
collection(id: $collectionId) {
id
hasProduct(id: $productsId)
}
}
'''When product 456 is added to collection 123, the delivery carries the query result in data, the affected IDs in query_variables, and a fields_changed object that lists what was added, updated or removed.
{
"topic": "Collection",
"action": "update",
"handle": "collection-membership",
"data": { "collection": { "id": "gid://shopify/Collection/123", "hasProduct": true } },
"fields_changed": {
"added": ["collection[id: 'gid://shopify/Collection/123'].products[id: 'gid://shopify/Product/456']"],
"updated": [],
"removed": []
},
"query_variables": {
"collectionId": "gid://shopify/Collection/123",
"productsId": "gid://shopify/Product/456"
}
}The query runs as part of the subscription, so there is no second API call. Shopify notes that the query result reflects the state when the query runs. Use fields_changed to understand the change and data for current context.
The 18 Topics at General Availability
- Merchandising: Product and Collection.
- Customers and companies: Customer and Company.
- Orders, fulfillment and returns: Order, FulfillmentOrder, Refund and Return.
- Inventory and locations: InventoryItem, InventoryShipment, InventoryTransfer and Location.
- Content: Article, Blog and Page.
- Custom data: MetafieldDefinition, Metaobject and MetaobjectDefinition.
Each topic has its own supported triggers, query variables and access scopes, so check the Events API reference for the changes you want.
Shopify Events vs Webhooks at a Glance
- What fires a delivery: webhooks fire on any qualifying change to a topic. Events fire when the triggers you chose change.
- Payload: webhooks send a fixed schema you can trim. Events send the result of your own GraphQL query.
- What changed: webhooks leave you to compare state. Events include
fields_changed. - Coverage: webhooks cover every topic. Events cover the 18 topics above, and Shopify says to keep classic webhooks for topics or patterns Events does not support yet.
- Limits: subscription queries have a complexity limit of 100 points.
Get Started
- New to both: use Shopify CLI and follow the getting started guide, then set the events API version to
2026-10and choose a topic and triggers. - Already using the preview: change the events API version from
unstableto2026-10, including subscription-level overrides, then test and deploy. - Moving from webhooks: follow our step-by-step migration guide.
Our Analysis: Shopify Events vs Webhooks, When to Switch
The preview caveat no longer applies. Events are generally available on 2026-10, so a new integration can reasonably start on them. Existing integrations do not need a rush, because webhooks continue to work.
Count what you throw away. The best candidate is any handler that receives a broad delivery, compares it with stored state, discards most of them, and then calls the Admin API. Log how many deliveries you discard today. Shopify’s advice is to measure deliveries, payload size and follow-up API calls before and after.
Do not copy the old payload. Shopify warns that pasting your existing payload into a query and subscribing to every change carries over the work your app was already doing. Design from the change you need to handle.
Know where webhooks still win. In 2026-10, Shopify says to keep some returns and fulfillment webhooks, and orders/edited has no direct field-level equivalent. The migration guide lists the cases.
Keep the safety work. Fewer deliveries do not remove the need for retries, deduplication and authentication. Our guide to setting up, verifying and debugging webhooks still applies, and you should check the Events documentation for how deliveries are authenticated.
FAQ about Shopify Events vs Webhooks
Do Events replace webhooks? Shopify calls Events the successor to classic webhooks, but existing webhook integrations keep working and some cases still need them.
Which API version do Events use? Events are generally available on 2026-10. The earlier developer preview used unstable.
Can I use both in one app? Yes. Shopify says you can use both and move workflows over one at a time.


