The Shopify App Developer Playbook

Shopify takes a 0% revenue share on your first $1M in annual app revenue, making it one of the most developer-friendly ecosystems in e-commerce. After that threshold, the cut is just 15%. Combine this with built-in distribution to millions of merchants and you have a platform where a solo developer can build a six-figure recurring revenue business. This guide covers the specific technical and business decisions you need to make.
Understanding the Shopify App Architecture
Shopify apps are now required to be embedded apps that render inside the Shopify Admin using App Bridge. Standalone apps that redirect merchants to external URLs are no longer accepted for new public apps. This means your frontend must use Shopify's Polaris design system for a native look and feel, and all authenticated requests flow through Shopify's session token mechanism rather than traditional cookies.
The recommended stack is Shopify's Remix app template, which replaces the older Node/Express and Next.js templates. It handles OAuth, session management, billing, and webhooks out of the box. If you prefer a different framework, you will need to implement session token exchange, HMAC validation, and CSP headers manually.
Step-by-Step: Building Your First Shopify App
- Scaffold your app using
npm init @shopify/app@latest. This generates a Remix app with Prisma for data storage, Polaris components, and App Bridge pre-configured. Choose the Remix template over the deprecated Node template. - Set up your development store. Create a free development store through your Partner Dashboard. You get unlimited test transactions and can install your app without charges. Never test billing on a live store.
- Configure your app extensions. Theme app extensions let you inject UI into the storefront without editing theme code. Checkout UI extensions let you add widgets to the checkout flow. Both are sandboxed and versioned independently from your main app.
- Implement the Billing API before your first public release. Use
appSubscriptionCreatefor recurring charges andappPurchaseOneTimeCreatefor one-time fees. Always handle theAPP_UNINSTALLEDwebhook to cancel active subscriptions and clean up merchant data per Shopify's GDPR requirements. - Submit for App Store review. Shopify's review team tests your app manually. Common rejection reasons: missing privacy policy link, app crashes on mobile admin, not using Polaris components, or accessing API scopes you don't actually use. Trim your scopes to the minimum required.
API Rate Limits
Shopify uses a leaky bucket algorithm: REST API gives you 40 requests per app per store, refilling at 2 per second. GraphQL uses a point-based system with 1,000 points per second. A single complex query can cost 500+ points. Use bulk operations for importing/exporting large datasets, as they bypass rate limits entirely and run asynchronously.
Revenue Models That Actually Work
Based on data from successful Shopify apps, here is what pricing strategies generate the best results:
Tiered by Shopify Plan
Charge $9/month for Basic Shopify stores, $29/month for Shopify plan, $79/month for Advanced. Merchants expect pricing to scale with their plan, and this maps neatly to their willingness to pay.
Usage-Based with Floor
Charge a minimum monthly fee plus per-order or per-notification charges. This works well for apps tied to transaction volume, like shipping label generators or upsell tools.
Free with Premium Unlock
Offer core functionality free to build install base and reviews. Charge for advanced analytics, priority support, or higher usage limits. Aim for 5-10% conversion to paid.
Annual Discount
Offer 2 months free on annual plans. This reduces churn significantly and improves cash flow predictability. Shopify's Billing API supports both monthly and annual intervals.
Navigating the App Review Process
The Shopify app review process is the single biggest bottleneck for new developers. Reviews take 5-10 business days on average, and rejections require a full re-review. To maximize your chances of first-pass approval:
- Test on mobile: Shopify's review team tests on both desktop and mobile admin. If your embedded app doesn't render properly on a phone, it will be rejected.
- Handle uninstall gracefully: Implement the
APP_UNINSTALLEDwebhook and the mandatory GDPR webhooks (customer data request, customer data erasure, shop data erasure). - Minimize API scopes: Request only the scopes your app actively uses. If you request
write_productsbut only read product data, you will be asked to justify it or downgrade. - Provide test credentials: If your app connects to external services, give the review team working test accounts. They cannot review what they cannot access.
- Write a clear listing: Include screenshots, a demo video, and specific feature descriptions. Vague listings like "boost your sales" without explaining how will delay approval.
Frequently Asked Questions
How does Shopify's app billing work, and when do I get paid?
Shopify collects subscription fees from merchants as part of their Shopify invoice and pays you through your Partner Dashboard. Payouts happen via PayPal or bank transfer on a net-30 cycle. You never need to handle credit card processing yourself. The Billing API creates charges that appear on the merchant's Shopify bill. Important detail: if a merchant's Shopify subscription is frozen (unpaid), your app charges are also frozen, so factor occasional payment delays into your cash flow planning.
What happens during the app review process, and how long does it take?
A Shopify reviewer manually installs your app on a test store, walks through the setup flow, tests core features, and checks compliance with their requirements. First submissions typically take 7-10 business days. Updates to approved apps take 3-5 days. The most common rejection reasons are: not handling the mandatory GDPR webhooks, using deprecated API versions, requesting unnecessary API scopes, and UI that breaks on mobile. After rejection, you get detailed feedback with screenshots. Fix all issues before resubmitting, as partial fixes result in another rejection cycle.
Should I use Shopify's REST API or GraphQL API, and how do I handle rate limits?
Use GraphQL for everything new. Shopify is deprecating REST API versions and has stated GraphQL is the future. GraphQL gives you better rate limits (cost-based rather than call-based), lets you fetch exactly the data you need in one request, and supports bulk operations for large data exports. For rate limit management, track the throttleStatus field in GraphQL responses. When your available points drop below 100, pause requests for a second. For data-heavy operations like syncing thousands of products, use the bulkOperationRunQuery mutation, which runs asynchronously and notifies you via webhook when complete.
The Shopify ecosystem rewards apps that solve narrow problems exceptionally well. Start by finding one pain point that merchants complain about in forums, build the simplest possible solution, and iterate based on merchant feedback.
Last updated: March 14, 2026