How to track currentPeriodEnd on renewals or uninstall?

Topic summary

A developer is seeking guidance on reliably tracking currentPeriodEnd for Shopify app subscriptions, particularly across renewals and after uninstalls.

Current approach:

  • They store currentPeriodEnd from the initial appSubscriptionCreate response
  • Save it to their database to manage post-uninstall access

Core problem:

  • Uncertain whether Shopify sends app_subscriptions/update webhooks on automatic renewals
  • Unclear if currentPeriodEnd updates silently without notification
  • If a merchant uninstalls months after renewal without the developer fetching updated data, they can’t determine the actual paid period

Specific questions:

  • What’s the recommended method to keep currentPeriodEnd current?
  • Is daily polling via appInstallation → activeSubscriptions → currentPeriodEnd the only solution?
  • Are there plans for renewal webhooks or established best practices?
  • Notes that currentPeriodEnd becomes null upon cancellation, making it impossible to retrieve via GraphQL during the cancellation webhook

Goal: Enable merchants to retain access through their paid period, even after uninstalling or downgrading mid-cycle.

Summarized with AI on October 27. AI used: claude-sonnet-4-5-20250929.

Hi Shopify team,

We’d appreciate clarification around how to correctly track currentPeriodEnd for active subscriptions over time.

We currently:

  • Store the currentPeriodEnd returned after a subscription is approved (via appSubscriptionCreate)
  • Save that value to our DB to manage access after uninstall or downgrade

The issue is that subscriptions can renew monthly or yearly, but we’re not sure if (in test or real charges):

  • Shopify does send a webhook (app_subscriptions/update) after each renewal ?
  • The currentPeriodEnd field moves forward silently?
  • If the merchant uninstalls the app months later and we didn’t fetch it again, we have no way of knowing how long they were charged for

Our goal is to let merchants keep access until their paid period ends, even if they uninstall or downgrade mid-cycle.

So:

➤ What’s the recommended way to keep currentPeriodEnd up to date over time?

  • Is polling appInstallation → activeSubscriptions → currentPeriodEnd the only option, every day?
  • Does Shopify plan to send a webhook on automatic renewals?
  • Is there a best practice to handle this (e.g. via GraphQL or scheduled jobs)?

Like we know that currentPeriodEnd will be null if subscription is canceled… so it’s not possible to query with GraphQL inside the canceled webhook “app_subscriptions_update”, it will already be null…

Thanks in advance for any guidance!

Chris
Movo Labs