Hey everyone,
We’ve noticed that when a discount reaches its ends_at timestamp and automatically becomes “expired”, Shopify doesn’t trigger any webhook (like discounts/update).
This creates a challenge for systems that rely on tracking the real-time lifecycle of discounts — for example, loyalty programs or promo management tools.
Is this expected behavior?
Are there any recommended workarounds besides polling the API?
If there are no plans to add a webhook for this event, I’d love to suggest it as a feature — it would make automation much easier.
Hi - this is the expected behaviour currently, the recommended approach to track the status of discounts (if they’re expired) is to poll the API directly to check for changes.
If this was supported through a webhook, what specifically would this unblock for you? Having this context will help us evaluate investing resources in building support for this.
@Liam-Shopify, this is a problem from the perspective that we rely on the discount update webhook to keep our database up-to-date. We need the data to be up-to-date, especially for a property like STATUS. The webhook itself is meant to provide these updates in real time.
When we set the startsAt and endsAt dates, the discount is created as SCHEDULED. When the startsAt date arrives, its status changes to ACTIVE. When the endsAt date arrives, its status changes to EXPIRED.
The issue is that, when we set these dates, we need to constantly monitor the status to ensure it is accurate. Discounts can be created with both startsAt and endsAt, or without an endsAt at all. Additionally, users can change these dates. This all means that, on our side, we need to implement logic to track and manage these status changes (I understand this is part of my job). However, on your side, sending this information via the webhook would greatly simplify things and make it much easier for developers to rely on accurate, real-time status updates.
Instead of relying on webhooks, can you periodically query using the Admin API? Since webhook delivery is not 100% guaranteed, you shouldn’t rely on them for critical database updates, from our docs:
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.
Yes, we understand that. We already have data synchronization mechanisms set up to keep our system reliable and to handle situations if something goes wrong on Shopify’s side.
However, we also rely on Shopify to provide stable functionality. Webhooks are a helpful additional tool for us — they allow us to avoid writing extra code (such as scheduling synchronizations) and help save resources.