What subscription apps like Recharge, Bold Subscriptions, and Skio actually cost over time
Recharge, Bold Subscriptions, and Skio are the dominant subscription apps on Shopify, with pricing ranging from $99–499/mo. That sounds manageable month to month — until you run the math. At the high end that comes to $1,188–$5,988/year. Stretched over five years — a reasonable lifespan for a healthy Shopify store — the total reaches $5,940–$29,940. None of that money builds equity in your store. None of it makes the software yours. It buys access, and access ends the moment you stop paying.
Subscription billing logic is straightforward — but most apps charge $99–499/mo plus a revenue cut. You're renting a feature you could own once.
What a custom subscription app actually includes
The assumption most merchants make is that replacing an app like Recharge, Bold Subscriptions, and Skio requires a developer, a long timeline, and a significant budget. That was accurate until AI builders trained on actual Shopify documentation changed the economics. A Shopivibe-generated subscription app ships as a complete, deployable application — not a prototype. OAuth, Shopify Billing API, webhook handlers, and App Bridge come built in before you describe a single feature specific to your store.
The comparison table above breaks down exactly what you get. Specifically: Monthly platform fee, Transaction fee, Customer portal, Code ownership, Skip / pause / swap. These are not paid add-ons or plan upgrades — they're the baseline of every app built through Shopivibe.
When the math tips in favor of building
At $99–499/mo, the payback period on a custom build is typically three to six months — after which every month is margin recovered rather than rent paid. The rule most merchants use: if you've been paying for a subscription app like Recharge, Bold Subscriptions, and Skio for longer than six months and it costs more than $50/month, building your own version is almost always the cheaper option over a two-year window.
Beyond the cost math, there's a strategic case for ownership. Recharge, Bold Subscriptions, and Skio all hold your subscription data — customer records, transaction history, any accumulated state — in their infrastructure. If a vendor raises prices, gets acquired, or shuts down, migrating that data is painful by design. Owning the code means owning the data, and the ability to extend or change the logic without asking permission or paying for a higher tier.
When to keep paying instead
Not every store should replace Recharge, Bold Subscriptions, and Skio. If you're in the first few months of trading and still validating your product, app costs are a minor variable compared to everything else on your plate. If the app costs under $30/month and works perfectly, the time investment isn't worth it. The decision becomes clear when your subscription app is a meaningful recurring line item, when you've hit a plan ceiling, or when you want the subscription experience to feel fully native to your brand rather than a vendor widget embedded in your store.
See how Shopivibe pricing works or browse all Shopify app types you can build and own to map out what your full replacement stack would look like, or compare Recharge individually.
What a Shopify subscription app actually has to do
Shopify subscription apps use the Selling Plans API — GraphQL mutations and queries on SellingPlanGroup and SellingPlan objects. Required Admin API scopes: read_purchase_options, write_purchase_options, read_customer_payment_methods (to display saved cards in the customer portal), and write_own_subscription_contracts. Subscription contracts track what a customer has subscribed to and are managed via subscriptionContractCreate, subscriptionContractUpdate, and related mutations. Billing is handled by subscriptionBillingAttemptCreate, which charges the customer's stored payment method through Shopify's billing infrastructure. Key webhooks: subscription_contracts/create, subscription_contracts/update, billing_attempts/success, and billing_attempts/failure. Failed billing requires dunning logic — typically 3–4 retry attempts over 7–14 days before marking a subscription at-risk.
The data model behind subscription on Shopify
The core data model mirrors Shopify's subscription objects. A SubscriptionContract record stores: the Shopify contract GID, shop_id, customer_id, status (active/paused/cancelled/failed), next_billing_date, and billing_interval. A SubscriptionLine record links each contract to a product variant: variant_id, quantity, current_price, and selling_plan_id. A BillingAttempt record tracks each charge: contract_id, shopify_billing_attempt_id, status, amount, attempted_at, and error_message. A DunningEvent record logs each retry with its outcome. The next_billing_date is the most critical field — incorrect values cause billing on the wrong day and are the most common source of merchant complaints.
Edge cases most subscription apps get wrong
- Selling plan anchors: Shopify supports anchor-based billing (charge on the 1st of each month regardless of signup date) — not all subscription implementations handle anchors correctly, causing billing drift
- Mid-cycle plan changes: upgrading a subscription mid-cycle requires proration calculation — most custom implementations miss this and either overcharge or undercharge
- Draft orders: some merchants use draft orders for manual subscriptions; these don't connect to the Selling Plans API and require separate tracking outside the standard contract system
- Dunning without duplicates: the billing_attempts/failure webhook fires immediately; the dunning scheduler must track each retry independently to avoid creating duplicate billing attempts on the same contract
- Pause vs cancel semantics: a paused contract still exists in Shopify but doesn't generate billing attempts; cancellation requires explicitly cancelling the Shopify contract and stopping future attempts
- Multi-currency display: subscription prices stored in shop currency may differ from what the customer sees in their local currency — storefront display must use presentment currency from the Shopify Storefront API
- Free trial handling: selling plans support trial_days; the first billing attempt fires after the trial period ends, not at signup — the next_billing_date must account for this
Migrating off your subscription app without losing data
Exporting your data: Recharge provides a full data export via their Data Export feature in the merchant portal. The export includes subscription contracts, customer details, billing intervals, products, and Shopify payment method tokens. Request the export 2–3 weeks before your migration date.
Mapping to your new app: Recharge contract fields map to Shopify SellingPlan objects: Recharge's charge_interval_frequency + order_interval_unit translate to Shopify's SellingPlanRecurringDeliveryPolicy. Recharge stores payment methods as Shopify customer payment method GIDs — these tokens are reusable via subscriptionContractCreate without requiring customers to re-enter card details.
Parallel-run period: Subscriptions are typically migrated in a single cutover: freeze new Recharge signups, export data, import contracts into the new app, verify contract count matches, then disable Recharge. A parallel-run period is not recommended for subscriptions — the double-billing risk is too high.
Frequently asked questions
What is a Selling Plan in Shopify?
A Selling Plan is Shopify's native data structure for recurring purchases. It defines billing intervals, discounts, and trial periods. Apps built on the Selling Plans API integrate with Shopify checkout natively — customers see subscription options on the product page without any third-party widget.
Does Shopify's Billing API handle failed payments automatically?
Shopify fires a billing_attempts/failure webhook when a charge fails, but retry logic is the app's responsibility. Most implementations retry 3–4 times over 7–14 days (dunning) before marking a subscription as failed and notifying the merchant.
Can customers manage their subscriptions without contacting support?
Yes — a customer portal lets subscribers skip, pause, swap products, change delivery frequency, update payment methods, and cancel. The portal authenticates using Shopify customer account sessions — no separate login required.
Can I migrate from Recharge without customers re-entering payment details?
Yes. Recharge stores payment methods as Shopify customer payment method GIDs. These tokens transfer to the new app — customers don't need to re-enter card details, and there's no interruption to active subscriptions.
What happens to active subscriptions during the migration?
Active Recharge contracts continue billing until you cancel them in Recharge and recreate them in the new system. The migration window is typically one business day. Subscriptions created after the cutover go through the new app; all existing ones are migrated from the export.