Detecting store plan changes reliably

Hi,

I have a question regarding tracking changes to a store’s plan in a Shopify app.

When the app is installed, I save the store’s plan information in my database using the API (version 2025-07) and the new publicDisplayName field, according to the latest update:

Currently, to detect plan changes, I’m listening to the shop/update webhook (version 2025-07), where there’s a plan_display_name field. The value I receive there is, for example, Developer Preview.

However, the value in my database (from the Shopify API) is, for example, Development.

I wanted to monitor plan changes by comparing the value from the webhook (plan_display_name) with what I have stored in the DB from the publicDisplayName field, but these values are always different—so I would always detect a “plan change,” even if nothing actually changed.

Technically, I could query the Shopify API for the latest plan info every time a webhook arrives, but that doesn’t seem efficient and would result in unnecessary API calls.

How are you handling this?

Is there a recommended way to reliably detect real plan changes, or a mapping between these values, now that publicDisplayName has been introduced?

Or is there an official best practice for tracking store plan changes on Shopify after this update?

Thanks in advance for any insights!

Good find @sebastian.pisula

How important is it to you that the plan change needs to be recorded/responded to in real time?

I agree that for the most accurate change detection, you’d need to query the shop details. However, unless you debounce, the shop/update webhook could fire several times consecutively and worst case scenario exhaust your rate limit bucket.

No bueno.

If timing isn’t critical, perhaps set up a daily poll to query the shop details and update your DB record accordingly?

1 Like

Hey folks :waving_hand: - just agreeing with @Dylan here - in most cases, merchant’s plans don’t change too frequently.

You could use the shop/update webhook, but I think the most resource focused method would be to do a regular poll like Dylan suggested.

You could even run a poll every 6 hours if you did want to capture the plan changes more regularly with a simple query like this and just have it run like a cron job:

{
  shop {
    id
    name
    plan {
      publicDisplayName
    }
  }
}

Hope this helps!