Expo EAS Pricing Explained: The Hidden Costs (2026)
Expo EAS looks affordable at first glance. Then you hit 50K monthly active users and start shipping updates regularly — and the bill surprises you. Here's the math Expo doesn't show you up front.
How EAS Update Pricing Actually Works
Expo EAS charges along two axes simultaneously: the number of monthly active users (MAU) your app serves, and the amount of bandwidth those users consume when downloading updates. You pay both, every month.
The MAU tiers as of 2026 look like this:
| Plan | Monthly cost | Included MAU | Extra MAU |
|---|---|---|---|
| Free | $0 | 1,000 | Not available |
| Starter | $29 | 10,000 | $0.005/user |
| Production | $99 | 30,000 | $0.005/user |
| Enterprise | $499+ | 200,000 | Negotiated |
Source: Expo EAS pricing page, May 2026. Bandwidth charges apply on all paid plans.
The Bandwidth Trap: $0.10/GiB on Top of Everything
Here is where teams get caught off-guard. Expo EAS charges $0.10 per GiB of egress for bundles downloaded by your users. This is billed separately from your plan fee and is not capped.
Standard React Native bundles without aggressive splitting run between 3–15 MB. Even if you run Hermes and get a reasonable compressed size of 5 MB, the bandwidth math compounds quickly when you ship multiple updates per month to a growing user base.
Expo does offer differential updates for Hermes-compiled apps, which reduces payload sizes significantly — but only if you're using Hermes, and only when the prior bundle version is known. For teams on other bundlers or with diverse device states, full bundle downloads are common.
Real Cost Example: 50K MAU, Active Shipping Team
Let's run the numbers for a realistic mid-size app. You have 50,000 monthly active users. Your team ships 20 updates per month (roughly one per working day). Your average bundle, after compression, is 5 MB.
Monthly cost breakdown
That's $7,044 per year for OTA updates alone — before your build infrastructure, CI/CD, or any other tooling costs. The majority of that bill ($388/mo) is bandwidth overage, not the plan fee itself.
The MAU Penalty: Growth Costs More
The per-MAU overage model creates a perverse incentive: the more successful your app, the more you pay — and the growth is not linear. As you cross plan thresholds, you're paying $0.005 per user per month for every user above the plan ceiling.
At 100K MAU on the Production plan (50K ceiling), that's 50K extra users × $0.005 = $250/mo in MAU overages alone, before you count bandwidth. Add bandwidth at 5 MB per update × 20 updates × 100K users ≈ 9,766 GiB; after the 1,000 GiB plan allowance, that's 8,766 GiB × $0.10 = $877/mo.
Your OTA bill at 100K MAU: roughly $1,326/mo($199 plan + $250 MAU overage + $877 bandwidth). The plan fee is now less than 16% of your total cost. You're essentially paying for a bandwidth CDN at an expensive mark-up.
The Alternative: Flat-Rate BYOS
The core issue with EAS pricing is that Expo controls and charges for the CDN your bundles are served from. Every byte your users download is a billing event on Expo's infrastructure.
Bring Your Own Storage (BYOS) inverts this model. Your bundles live in your own S3, GCP, or Cloudflare R2 bucket. You pay your cloud provider directly — at standard rates (under $0.023/GiB on S3, $0.00/GiB egress on Cloudflare R2) — and the OTA platform only handles routing and control-plane logic at a flat monthly fee.
RNPush is built on this model. Flat-rate plans starting at $0 (Hobby) to $149/mo (Scale), binary diffing that compresses a 15 MB bundle to ~94 KB, and no bandwidth line items — because the bytes never touch our servers.
Try RNPush free — no bandwidth bills
Flat-rate pricing, binary diffing, BYOS. Your OTA costs stay predictable no matter how fast you grow.
Join the waitlist →Free plan available · No credit card required