Edit this page
Learn how Expo applies usage-based billing for customers who exceed their plan quotas and how to monitor your EAS Build usage.
Expo applies usage-based billing for customers who exceed their plan allowances. This enables our customers to use what they need without worrying about limitations or requiring contractual obligations.
Usage-based billing is enabled for EAS Build and EAS Update and is billed monthly. We provide an estimate of your existing usage and any overage charges on your account's Billing.
For EAS Build, a flat fee is charged for an individual build executed at higher-priority levels. This is totaled monthly and charged at the end of your billing period or sooner if you cancel your plan.
Note: Builds that are canceled before any work is done are not charged.
Production, Enterprise, and Legacy plans subscribers receive credits for EAS Build. These credits can be used to offset the cost of builds. They are reset at the start of the billing period and expire at the end of that billing period. Visit our pricing page for more information on the pricing schedule for supported build platforms and the available resource classes.
Consider an account subscribed to the Production plan that has 15 medium Android builds, and 10 large iOS builds in a billing period:
Description | Price | Quantity | Total |
---|---|---|---|
Android builds (medium) | $1 | 15 | $15 |
iOS builds (large) | $4 | 10 | $40 |
EAS Build Credit | -$55 | ||
Total (USD) | $0 |
Since the credit is included in the Production plan, the subscriber pays $0 for their 25 builds.
Consider another example where the credit limit is exceeded:
Description | Price | Quantity | Total |
---|---|---|---|
Android builds (medium) | $1 | 20 | $20 |
Android builds (large) | $2 | 10 | $20 |
iOS builds (medium) | $2 | 15 | $30 |
iOS builds (large) | $4 | 15 | $60 |
EAS Build Credit | -$99 | ||
Total (USD) | $31 |
In this scenario, the subscriber pays $31 for 60 builds instead of $130 because the EAS Build Credit covers $99.
Usage-based pricing for EAS Update comprises two metrics: monthly updated users and global edge bandwidth.
Monthly updated users reflect the number of unique users who download an update in a billing period. At the same time, global edge bandwidth represents the total amount of bandwidth used for all update downloads. Moreover, each monthly updated user includes 40 MiB of global edge bandwidth, up to that plan's global edge bandwidth limit.
Note: A monthly updated user counts only once per billing period, regardless of how many updates this user downloads.
Each plan has a number of monthly updated users and global edge bandwidth included as part of the subscription. These differ for each plan and the most updated numbers. See our pricing page, for more information.
Note: The On-demand plan includes the same amount of monthly updated users and global edge bandwidth as the Free plan.
Consider a subscriber to the On-demand plan who deploys 20 updates of 5 MiB each via EAS Update to 10,000 users. The subscription to the plan includes 1,000 monthly updated users and 100 GiB per month. As a result, the subscriber's bill for extra usage will be:
Description | Price | Quantity | Total |
---|---|---|---|
Updated users | $0.005 per user | 9,000 | $45 |
Global edge bandwidth | $0.10 per GiB | 525 GiB | $52.5 |
Total (USD) | $97.5 |
Out of the 10,000 users, 1,000 are included in the On-demand plan. As a result, 9,000 are billed for as part of usage-based billing. Paying for 9,000 updated users also includes approximately 351.6 GiB (9000 users * 40 MiB / 1024).
The global edge bandwidth calculation is:
Description | Calculation | Quantity |
---|---|---|
Bandwidth used to send updates | 20 updates * 5 MiB * 10,000 users | 976.5625 GiB |
Bandwidth included in plan | 100 GiB | |
Bandwidth included with 9,000 extra updated users | 9,000 * 40 MiB | 351.5625 GiB |
Total | 976.5625 - 100 - 351.5625 | 525 GiB |
If the same subscriber sends the 21st update of 5 MiB to the same 10,000 users in the current billing period, they will only pay for any extra bandwidth used.
Description | Calculation | Quantity |
---|---|---|
Bandwidth used to send updates | 21 updates * 5 MiB * 10,000 users | 1,025.39 GiB |
Bandwidth included in plan | 100 GiB | |
Bandwidth included with 9,000 extra updated users | 9,000 * 40 MiB | 351.5625 GiB |
Total | 1,025.39 - 100 - 351.5625 | 573.83 GiB |
This is because Expo only charges for unique monthly updated users. As a result, the subscriber's bill for extra usage will be:
Description | Price | Quantity | Total |
---|---|---|---|
Updated users | $0.005 per user | 9,000 | $45 |
Global edge bandwidth | $0.10 per GiB | 573.83 GiB | $57.4 |
Total (USD) | $102.4 |
If the same subscriber is on a Production plan, they will pay $0 as the Production plan includes 20,000 monthly updated users and 1 TiB (1024 GiB). As such, there is no extra bandwidth usage.
Note: Billing estimates shown may be delayed by up to 24 hours (one day).
To see the current billing period's usage summary, go to the Billing and under Usage this month, you will find a summary for both EAS Build and EAS Update usage.
To see detailed EAS Build usage for a current or previous billing period:
To see detailed EAS Update usage for a current or previous billing period:
You can enable Plan credit usage notifications to closely monitor your EAS Build usage. It enables email notifications when 80% and 100% of your plan's EAS Build credit is used.
To enable EAS Build credit usage notification
You can use EAS Update and development builds to test and deploy new code without having to create an entirely new build. This will help you iterate faster and reduce build usage.
For most apps, the JavaScript code changes more frequently than the underlying native code and configuration. If you are building a new build every time for code changes, consider using EAS Update to take advantage of the different iteration frequency between JavaScript and native code. This way, you can ship those changes as an update instead.
When using Continuous Integration (CI)/Continuous Deployment (CD) to build pre-production code, you can reduce unnecessary usage by automating the process of building only when changes are made to the native code. You can create a workflow in your CI/CD using Expo Fingerprint to detect when your native code has changed, and only execute a build if it has changed. Otherwise, publish an update if the native code has not changed.
A development build can run any EAS Update that is compatible with its native runtime. If you are using EAS Update with multiple testing channels, you can reduce the need for creating additional builds by having your testers or test devices use the same development build.
You can manage certain assets to include or exclude when using EAS Update. This reduces the number of assets uploaded or downloaded from the updates server and the global edge bandwidth used.
To optimize storage and bandwidth usage, you can choose to exclude assets that haven't been modified. For example, images or videos that haven't been changed can be excluded. Excluded assets won't be uploaded to the update server and won't be downloaded by the app. However, it's important to make sure that assets that are not part of an update are included in the native build of the app.
Note: If an app has already downloaded an asset that is also part of a new update, the app will not re-download that asset. This will also not add to your account's bandwidth usage.
You can use npx expo-updates assets:verify <dir>
to check all required assets are included in the update. For more information, see Asset selection and exclusion.