●MAX — Rork Max handles code signing and provisioning so you can submit to the App Store in two clicks, with no local Mac required●SIMULATOR — Try your app in an in-browser streaming simulator, then scan a QR code to install straight to your device without TestFlight●NATIVE — Coverage reaches SwiftUI, ARKit, HealthKit, HomeKit, Core ML, and Metal, going where React Native cannot●SEED — Rork raised a $15M seed led by Left Lane Capital in April 2026, joined by Peak XV and a16z Speedrun●GROWTH — Reported at 743,000 monthly visits with 85% growth, widening access to AI-built mobile apps●NOCODE — Gartner expects 75% of new applications to be built with low-code or no-code tools by the end of 2026●MAX — Rork Max handles code signing and provisioning so you can submit to the App Store in two clicks, with no local Mac required●SIMULATOR — Try your app in an in-browser streaming simulator, then scan a QR code to install straight to your device without TestFlight●NATIVE — Coverage reaches SwiftUI, ARKit, HealthKit, HomeKit, Core ML, and Metal, going where React Native cannot●SEED — Rork raised a $15M seed led by Left Lane Capital in April 2026, joined by Peak XV and a16z Speedrun●GROWTH — Reported at 743,000 monthly visits with 85% growth, widening access to AI-built mobile apps●NOCODE — Gartner expects 75% of new applications to be built with low-code or no-code tools by the end of 2026
Lower Store Fees by Their Structure, Not Their Rate — Apple SBP and Google Play's June 2026 Pricing
A working breakdown of Apple's Small Business Program and Google Play's new fee model that started June 30, 2026, framed as fee design for indie developers, with code to compute your effective rate and a break-even table.
The first thing I checked when a Rork app of mine took its first payment was not the sale amount but how much of it would actually land in my bank account. As an indie developer, that take-home rate more or less decides how much runway a product has. Yet store fees usually get summarized as "Apple takes 30%, or 15% if you're small," and when you map that onto your own app the numbers stop adding up.
A store fee is not a single rate. It is a structure where eligibility, revenue scale, and charge type interact. And on June 30, 2026, Google Play reorganized that structure. Writing from the perspective of someone who keeps several apps running solo, here is how I break Apple and Google fees down to a form you can actually price against.
Memorizing a Rate Will Always Be Wrong
It helps to see why the "15%" or "30%" you remember drifts from reality. Three reasons. First, Apple judges eligibility on proceeds — your take after commission and certain taxes — not gross sales. Second, rates change once you cross a revenue threshold. Third, Google Play now applies fees differently depending on the charge type.
Ignore those three and set a price on "we're at 15%," and your take-home will diverge from your plan the moment you cross $1M, or when non-subscription charges are treated differently. Let's pin down each condition.
Apple Small Business Program Eligibility
Apple's App Store Small Business Program (SBP) reduces the commission on paid apps and in-app purchases from the standard 30% to 15%. Most indie developers qualify, but a few conditions are easy to misread.
Item
Detail
Commission
15% on paid apps and in-app purchases
Eligibility
Proceeds of $1M or less across all apps in the prior calendar year, and $1M or less in the current year
Basis
Proceeds (sales net of Apple's commission and certain taxes), not gross sales
Associated accounts
Proceeds of accounts you own or control are aggregated for the test
Crossing $1M
The standard 30% rate applies to future sales in the current year
Re-qualifying
Fall below $1M in a future year and you re-qualify for 15% the year after
Effective date
Your rate adjusts 15 days after the end of the fiscal month your enrollment is approved
The clause people miss is associated-account aggregation. If you hold a company account and a personal account, and one controls the other, their proceeds are summed against the $1M line. Indie developers who split apps across multiple entities can drift toward the threshold without realizing it.
Enrolling just means accepting the latest Paid Apps agreement (Schedule 2) in App Store Connect and declaring any associated accounts. There is no hard review, but the rate does not apply instantly — it starts 15 days after the end of the approval's fiscal month. Align a price increase or a new subscription launch with that date and you run at 15% from month one.
If you are on the EU alternative terms, SBP developers and subscriptions past their first year get a further reduced 10%. That is irrelevant for most indies, but worth knowing if you are weighing EU alternative terms.
✦
Thank you for reading this far.
Continue Reading
What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.
WHAT YOU'LL LEARN
✦If you were stuck on 'is it 15% or 30%', you can now reason through proceeds-based eligibility, associated-account aggregation, and the $1M threshold to find your real effective rate
✦You can turn Google Play's newly separated service fee and billing fee into concrete numbers for your own app with runnable code
✦You can fold fees into pricing and break-even so your next submission or migration leaves less money on the table
Secure payment via Stripe · Cancel anytime
✦
Unlock This Article
Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.
Google Play's June 30, 2026 Model — Service Fee and Billing Fee Split
Starting June 30, 2026, Google Play separated its service fee from its billing fee. It began in the US, the European Economic Area (EEA), and the UK, and is expanding to other markets on a schedule. That split actually creates room that favors indie developers.
The core: the service fee starts at 10% on your first $1M of annual earnings regardless of charge type, and the extra 5% billing fee (US/UK/EEA) applies only when you use Google Play's billing system. Charge through an external system or a link to your own site and that 5% does not apply.
Charge type
Service fee
Billing fee (Play billing)
Effective (with Play billing)
Auto-renewing subscription
Flat 10%
+5%
15%
Other charges (≤ $1M)
10%
+5%
15%
Other charges > $1M (new installs)
20%
+5%
25%
Other charges > $1M (existing installs)
25%
+5%
30%
Subscriptions carry a flat 10% service fee with no $1M cliff, which is plainly good for an indie subscription app. Non-subscription charges, once you pass $1M, split by whether the user is a "new" or "existing" install — defined by whether their first install or first update happened on or after the date the new model launched in that market. Choose external billing or a site link for "other charges" and the 5% billing fee disappears, leaving only the service fee — but you then carry checkout, refunds, and taxes yourself. For small-ticket subscriptions I pay Google Play's 15% to keep operational load low; for higher-priced one-time charges, external billing is worth considering.
Compute Your Effective Fee With Your Own Numbers
Instead of memorizing rates, keep a function that returns your effective fee from the conditions. This TypeScript returns the effective rate for Apple and Google and drops straight into a Rork backend such as Cloudflare Workers.
type Store = "apple" | "google";type ChargeKind = "subscription" | "other";type InstallType = "new" | "existing";interface FeeInput { store: Store; kind: ChargeKind; // Year-to-date proceeds (USD), used for the $1M threshold test ytdProceedsUsd: number; // Apple: enrolled in SBP / Google: using Play billing enrolledOrPlayBilling: boolean; installType?: InstallType; // needed for Google "other charges"}const ONE_MILLION = 1_000_000;// Returns the effective fee rate (%). Without Play billing, the 5% billing fee is excluded.function effectiveFeeRate(i: FeeInput): number { if (i.store === "apple") { // 15% if enrolled in SBP and YTD proceeds are at or below $1M, otherwise 30% const eligible = i.enrolledOrPlayBilling && i.ytdProceedsUsd <= ONE_MILLION; return eligible ? 15 : 30; } // Google Play (in markets on the post-2026-06-30 model) const billingFee = i.enrolledOrPlayBilling ? 5 : 0; if (i.kind === "subscription") { // Subscriptions: flat 10% service fee, no $1M cliff return 10 + billingFee; } // Other charges: 10% up to $1M, then 20% new / 25% existing let serviceFee = 10; if (i.ytdProceedsUsd > ONE_MILLION) { serviceFee = i.installType === "existing" ? 25 : 20; } return serviceFee + billingFee;}// Example: a small subscription served through Play billingconsole.log( effectiveFeeRate({ store: "google", kind: "subscription", ytdProceedsUsd: 40_000, enrolledOrPlayBilling: true, })); // => 15// Apple, SBP enrolled, $40k YTD proceedsconsole.log( effectiveFeeRate({ store: "apple", kind: "subscription", ytdProceedsUsd: 40_000, enrolledOrPlayBilling: true, })); // => 15
The point is to derive the rate from conditions so a half-remembered "15%" never sneaks into pricing. Google's non-subscription path in particular branches four ways across installType and ytdProceedsUsd, so a function is safer than mental math. Because the year-to-date total is an argument, feeding ytdProceedsUsd from your monthly rollups flips the effective rate automatically in the month you cross the threshold.
Fold Fees Into Take-Home and Break-Even
Once you have the effective rate, work backward from price to take-home. For a monthly subscription at an effective 15%:
Monthly price
Effective fee 15%
Take-home after store fee
$3.00
−$0.45
$2.55
$5.00
−$0.75
$4.25
$10.00
−$1.50
$8.50
Only after you layer on payment-side FX and taxes, plus fixed costs like your Rork paid plan and backend (Cloudflare Workers, RevenueCat), does the real break-even appear. Running several apps taught me that leaving fees vague as "a deduction that hits later" while setting price leads to a specific error: you hit your target MRR but miss your take-home goal.
On the Apple side, estimate your prior-year proceeds in USD from the Payments and Financial Reports in App Store Connect and confirm they are at or below $1M, aggregating any associated accounts. Accept the latest Paid Apps agreement and enroll in SBP. Since the rate applies from the approval fiscal month-end plus 15 days, align that date with a price change or a new subscription launch to run at 15% from month one.
On the Google side, confirm in Play Console whether the new model has started in your distribution markets (US/UK/EEA first, others rolling out). Subscriptions are a flat 10% (plus 5% with Play billing), while non-subscription charges pick up the new/existing distinction above $1M — so if you skew toward non-subscription charges, model it against your own revenue mix. Dropping the 5% billing fee via external billing is an option, but weigh it against carrying payments, refunds, and taxes yourself.
Reconciling take-home across multiple stores and apps is covered in Reconciling AdMob, App Store, Play, and Stripe Across Six Apps. Understanding the fee structure and then building the reconciliation to match actual deposits helps you catch changes like a threshold crossing early.
Wrapping Up
Today, compute the effective fee for a single app of yours. Put the store, charge type, year-to-date proceeds, and billing method into the function above, and the gap from the rate you had memorized should show up. That gap is exactly what has been slipping out of your pricing. Fees are an unavoidable deduction, but once you understand the structure they become a variable you can design. I am still tracking the per-market rollout myself, and I will keep sharing what I learn. Thank you for reading.
Share
Thank You for Reading
Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.