Should Shopify merchants test subscription and invoice flows in sandbox before turning on live billing?

A subscription can look fine on the product page and still fail where it matters.
The customer picks a plan. Checkout completes. A subscription contract should exist. The next renewal should create a new order. If an invoice is involved, the customer needs a clear route to pay it.
Those are separate steps. Test them before you turn on live billing.
This applies whether you sell subscriptions to shoppers or run an app with recurring charges for merchants. The systems differ, but the habit is the same: use a safe environment, follow the whole flow, and check the records Shopify creates at each stage.
Start with the kind of subscription you mean
“Subscription billing” can mean two different things in Shopify.
- Customer product subscriptions: a shopper buys a recurring product, such as coffee delivered each month.
- App subscriptions: a merchant approves a recurring charge for an app they use in their Shopify admin.
Don't test one flow and assume it proves the other. Their checkout, records, and billing paths are different.
For customer subscriptions, Shopify creates a subscription contract after checkout. At renewal, the subscription app starts a billing attempt and Shopify creates a new order.
For app subscriptions, Shopify's billing system adds app charges to the merchant's Shopify invoice. Shopify hosts plan selection and handles approval, metering, invoicing, trials, plan changes, and proration.
The useful question is not “Did the button work?” It is “Did every system record the right thing?”
Test customer subscriptions with the right payment mode
Shopify documents Shopify Payments test mode as the supported way to test subscription orders.
That distinction matters because Shopify's generic Test payment gateway does not work with subscription products. It can still cover other test orders, but it is not the path for a recurring product.
Shopify Payments test mode doesn't capture real payments. It also stops customers from placing live card orders while it is enabled. Shopify says not to activate it on a production store and to turn it off after testing.
So use it on a test store or during a planned window where real checkout is not available.
Before testing, open Settings → Payments in Shopify admin and confirm which mode is active. This takes less than a minute and prevents a surprisingly basic mistake: thinking you are testing safely when live payments are still enabled.
Shopify provides test cards for successful and failed payments. One documented successful Visa test number is `4242424242424242`. The test purchase amount must be more than the equivalent of $1 USD in your store currency.
Run at least these checks:
- Buy a subscription product with a successful test card.
- Try a documented failed-card scenario too.
- Find the order in Shopify admin.
- Find the subscription contract created from that order.
- Check the delivery schedule, product, quantity, and selling plan.
- Confirm the customer emails and internal notifications say what you expect.
Don't stop at the thank-you page. That page only proves the first request got through.
Check the contract after checkout
A common integration mistake is to look for the subscription contract immediately when the initial order appears.
Shopify says the contract might not be available at that exact moment. It recommends using subscription-contract webhooks instead.
If you use a subscription app, you may not control that code. You can still ask a practical question: after the test order, does the app show the subscription correctly, with the expected next billing date and delivery schedule?
If you build or maintain a custom subscription integration, check that your system listens for the relevant subscription-contract webhook. Do not make the initial order your only proof that a contract exists.
This is the difference between a one-time purchase with a label attached and an actual recurring agreement that can renew later.
Test invoice-based subscription orders separately
Draft orders add another path worth checking.
Shopify's current documentation says that when a draft order contains subscription products, the customer must pay the draft-order invoice at checkout. Shopify then creates the order and subscription contract.
That means the test should begin with the invoice, not just the product page.
Create a draft order with a subscription product. Send or open the invoice checkout link. Then verify:
- The customer can reach checkout from the invoice.
- The subscription product and plan appear correctly.
- Payment creates an order.
- Payment also creates the subscription contract.
- The order, contract, and customer record agree on the product and schedule.
For a custom integration, Shopify documents two technical requirements for this flow: GraphQL Admin API version `2027-01` or later, and the `write_draft_orders` scope.
If those names mean nothing to you, they are still useful checks to put to your developer or subscription provider. Ask them whether the draft-order subscription flow meets both requirements.
Test app billing before an app can charge merchants
If you are building an app, or reviewing one built for your business, Shopify offers safe routes for testing app billing too.
With Shopify App Pricing, a paid plan selected on a development store owned by the same Shopify Partner organization has effective recurring and usage-based prices of $0. Shopify also provides a $0 private test plan for testing specific stores.
This lets you test plan selection, approval, redirects, subscription status, usage meters, and billing events without charging the merchant.
We followed the same principle before wiring up real invoicing in our own work. We chose an API key limited to what the feature needed, then tested every flow in sandbox before touching live mode.
The restriction matters. A sandbox is where you learn what the flow does. A restricted key limits what a mistake can do while you learn.
For older or manual billing flows that use Shopify's Billing API, the charge has a `test` field. Set it to `true` to make a test charge without billing the merchant. After the test, set it to `false` for production.
That last check is not optional. Leaving `test` set to `true` means production app users will not be charged.
A simple pre-launch checklist for app billing looks like this:
- Approve a plan on a development store.
- Return from Shopify's approval screen.
- Confirm your app records the active subscription.
- Test any usage meter or usage-based charge.
- Change plans if your app supports upgrades or downgrades.
- Cancel and re-approve if that is a supported path.
- Confirm production settings cannot leave charges in test mode.
Check the approval redirect method too
Billing integrations age quickly when a platform changes a handoff between two systems.
Shopify changed App Pricing subscription-status handling on April 28, 2026. Shopify no longer appends `charge_id` to approval redirects. Apps now need to use the Partner API and the `plan_handle` redirect parameter instead.
If you test an app's billing approval today, don't only check that Shopify sends you back to the app. Check that the app correctly knows the plan is active after the redirect.
If it does not, ask the developer how it checks status. “We read `charge_id` from the URL” is a sign the flow needs updating.
A short test is cheaper than a billing cleanup
You do not need a large test plan to catch the most important errors.
Pick one subscription product or one app plan. Use the safe test route Shopify documents. Complete a successful payment, attempt a failure, and inspect the order, contract, invoice, or app subscription that should follow.
Then turn test mode off before real customers return.
The quiet next step is to open your Shopify payment settings or development store today and write down which billing path you currently use. Once that is clear, you can test the right flow instead of a nearby one.