This document lists the quotas and limits that apply to App Engine.
A quota restricts how much of a particular shared Google Cloud resource your Cloud project can use, including hardware, software, and network components.
Quotas are part of a system that does the following:
- Monitors your use or consumption of Google Cloud products and services.
- Restricts your consumption of those resources for reasons including ensuring fairness and reducing spikes in usage.
- Maintains configurations that automatically enforce prescribed restrictions.
- Provides a means to make or request changes to the quota.
When a quota is exceeded, in most cases, the system immediately blocks access to the relevant Google resource, and the task that you're trying to perform fails. In most cases, quotas apply to each Cloud project and are shared across all applications and IP addresses that use that Cloud project.
There are also limits on App Engine resources. These limits are unrelated to the quota system. Limits cannot be changed unless otherwise stated.
An App Engine application can consume resources up to certain quotas. You can view your application's daily consumption on the Google Cloud console Quota Details page.
Types of quotas
The following types of quotas apply to App Engine applications:
- Free quotas give your application an amount of each resource for free.
After your application exceeds a free quota, you will be billed
for any additional use of that resource.
Only the App Engine standard environment provides free quotas.
- Daily quotas protect the integrity of the App Engine system by ensuring that no single app over-consumes a resource to the detriment of other apps. If you go above these limits, you'll get an error. Daily quotas are refreshed daily at midnight Pacific time.
- Per-minute quotas protect your application from consuming all of its resources in very short periods of time, and prevent other applications from monopolizing a given resource. If your application consumes a resource too quickly and depletes a per-minute quota, the word "Limited" appears next to the appropriate quota on the Quotas page in the console. Requests for resources that reach their per-minute maximum are denied.
When you enable billing for your application, the application's safety limits increase. See the Resources section for details.
For details about what happens when a quota is exceeded and how to handle quota overage conditions, see When a resource is depleted.
Tip: The maximum per-minute quotas accommodate high
traffic levels, enough to handle a spike in traffic from your site getting
mentioned in news stories. If you believe a particular quota does not meet
this requirement, submit
feedback in the issue tracker. Note that filing feedback is not a
request for increasing your quota, but it will help us understand which quota
is potentially too low for general use
If you're expecting extremely high traffic levels, or for some reason your app requires particularly high quotas (for example, because of a significant product launch or large load tests), we recommend that you sign up for a support package.
How resources are replenished
App Engine tracks your application's resource usage against system quotas. App Engine resets all resource measurements at the beginning of each calendar day (except for Stored Data, which always represents the amount of datastore storage in use).
Daily quotas are replenished daily at midnight Pacific time. Per-minute quotas are refreshed every 60 seconds.
When a resource is depleted
When an application consumes all of an allocated resource, the resource becomes unavailable until the quota is replenished. This may mean that your application will not work until the quota is replenished.
For resources that are required to initiate a request, when the resource is
depleted, App Engine by default returns an HTTP
503 error code for the request instead of calling a request
handler. This behavior applies to the Instance hours
Tip: You can configure your application to serve a custom error page when your application exceeds a quota. For details, see the configuration file reference for Python (2.7, 3), Java, Go, PHP (5.5, 7), or Node.js .
For all other resources, when the resource is depleted, an attempt in the application to consume
the resource results in an exception. This exception can be caught by the application and handled,
such as by displaying a friendly error message to the user. In the Python API, this exception is
apiproxy_errors.OverQuotaError. In the API for Java, this exception is
com.google.apphosting.api.ApiProxy.OverQuotaException. In the Go API, the
appengine.IsOverQuota function reports whether an error represents an API call failure
due to insufficient available quota.
The following example illustrates how to catch the
OverQuotaError, which may be
raised by the
SendMessage() method if an email-related quota has been exceeded:
try: mail.SendMessage(email@example.com', firstname.lastname@example.org', subject='Test Email', body='Testing') except apiproxy_errors.OverQuotaError, message: # Log the error. logging.error(message) # Display an informative message to the user. self.response.out.write('The email could not be sent. ' 'Please try again later.')
Is your app exceeding the default limits? If you need a higher mail quota, you can use SendGrid to send email. For any other quota increase, if you have Silver, Gold, or Platinum support package, you can contact your support representative to request higher throughput limits.
Quotas for the App Engine flexible environment
When you deploy an application to the App Engine flexible environment, some Google Cloud resources are consumed. You might not be able to modify these resources; however, these resources count against your quota.For example, you can find your services' instance resource usage under the Compute Engine Resource quotas page.
An application may use the following resources, subject to quotas. Resources measured against billable limits are indicated with "(billable)." Resource amounts represent an allocation over a 24 hour period.
The cost of additional resources is listed on the Pricing page.
Default Cloud Storage bucket
The Default Cloud Storage bucket has a free quota for daily usage as shown below. You create this free default bucket in the Google Cloud console App Engine settings page for your project.
The following quotas apply specifically to use of the default bucket. See pricing for Cloud Storage Multi-Regional buckets for a description of these quotas.
|Default Cloud Storage Bucket Stored Data||First 5 GB free; no maximum|
|Default Cloud Storage Bucket Class A Operations||First 20,000 ops/day free; no maximum|
|Default Cloud Storage Bucket Class B Operations||First 50,000 ops/day free; no maximum|
|Default Cloud Storage Bucket Network Egress||First 1 GB free; no maximum|
The following quotas apply specifically to use of the blobstore.
- Blobstore stored data
- The total amount of data stored in the blobstore. Available for both paid and free apps.
|Blobstore Stored Data||First 5 GB free; no maximum|
Code and static data storage
- Static data limit
- In all languages except Go, no single static data file can be larger than 32MB. The limit for Go is 64MB.
- Total storage
- The storage quota applies to the total amount of code and static data stored by all versions of your app. The total stored size of code and static files is listed in the Main Dashboard table. Individual sizes are displayed on the Versions and Backends screens respectively. Apps will be charged $ 0.026 per GB per month for any code and static data storage that exceeds 1 GB.
Firestore in Datastore mode (Datastore)
The Stored Data (billable) quota refers to all data stored for the application in Datastore and Blobstore. Other quotas in the "Datastore" section of the Quota Details screen in the Google Cloud console refer specifically to the Datastore service.
- Stored data (billable)
The total amount of data stored in datastore entities and corresponding indexes and the Blobstore.
It's important to note that data stored in the datastore may incur significant overhead. This overhead depends on the number and types of associated properties, and includes space used by built-in and custom indexes. Each entity stored in the datastore requires the following metadata:
- The entity key, including the kind, the ID or key name, and the keys of the entity's ancestors.
- The name and value of each property. Since the datastore is schemaless, the name of each property must be stored with the property value for any given entity.
- Any built-in and custom index rows that refer to this entity. Each row contains the entity kind, any number of property values depending on the index definition, and the entity key.
- Number of indexes
- The number of Datastore indexes that exist for the application. This includes indexes that were created in the past and no longer appear in the application's configuration but have not been deleted. See the Datastore limits page for additional details about limits.
- Write operations
- The total number of Datastore write operations.
- Read operations
- The total number of Datastore read operations.
- Small operations
- The total number of Datastore small operations. Small operations include calls to allocate Datastore IDs or keys-only queries.
|Stored Data (billable)||1 GiB free; no maximum.
Beyond free quota, billing rates apply.
|Number of Indexes||200|
|Entity Reads||50,000 free; no maximum.
Beyond free quota, billing rates apply.
|Entity Writes||20,000 free; no maximum.
Beyond free quota, billing rates apply.
|Entity Deletes||20,000 free; no maximum.
Beyond free quota, billing rates apply.
In each App Engine application, you can deploy up to 10,000 times per day.
The following quota applies to the total number of app deployment files.
|Default files per app||10,000 files
Contact Support to request an increase.
Instance usage is billed by instance uptime, at a given hourly rate.
There are separate free quotas for "F" and "B" instance classes (also known as "frontend" and "backend" instance classes). Note that when you use App Engine Services, the service's instance class determines which quota applies.
|"F" instances||28 free hours per day|
|"B" instances||9 free hours per day|
Accrual of instance hours begins when an instance starts and ends as described below, depending on the type of scaling you specify for the instance:
- Basic or automatic scaling: accrual ends fifteen minutes after an instance finishes processing its last request.
- Manual scaling: accrual ends fifteen minutes after an instance shuts down.
If the number of idle instances created by App Engine exceeds the maximum you specify in the Performance Settings tab of the console, the excess instances do not accrue instance hours.
The Logs API is metered when log data is retrieved.
The logs ingestion allotment refers to request logs and application logs data for an application. Logging for App Engine apps is provided by Google Cloud's operations suite. See Google Cloud's operations suite pricing for more information on rates and limits.
App Engine bills for email use "by message," counting each email to each recipient. For example, sending one email to ten recipients counts as 10 messages.
- Messages sent
- The total number of messages that have been sent by the application. Note that the maximum quota for messages sent stays at free levels until the first charge for your application has cleared.
- Admins Messages Sent
- The total number of messages to application admins that have been sent by the application. (The total size limit for each admin email, including headers, attachments, and body, is 16KB).
- Message body data sent
- The amount of data sent in the body of email messages.
- Attachments sent
- The total number of attachments sent with email messages.
- Attachment data sent
- The amount of data sent as attachments to email messages.
|Resource||Default daily limit||Maximum rate|
|Recipients emailed||100 messages||8 messages/minute|
|Admins emailed||5,000 mails||24 mails/minute|
|Message body data sent||60 MB||340 KB/minute|
|Attachments sent||2,000 attachments||8 attachments/minute|
|Attachment data sent||100 MB||10 MB/minute|
You can add up to a maximum of 50 authorized senders for the Mail API.
Sending mail above your daily mail quota
- Outgoing bandwidth (billable)
The amount of data sent by the application in response to requests.
- data served in response to both secure requests and non-secure requests by application servers, static file servers, or the Blobstore
- data sent in email messages
- data in outgoing HTTP requests sent by the URL fetch service.
- Incoming bandwidth
The amount of data received by the application from requests. Each incoming HTTP request can be no larger than 32MB.
- data received by the application in secure requests and non-secure requests
- uploads to the Blobstore
- data received in response to HTTP requests by the URL fetch service
- Secure outgoing bandwidth
- The amount of data sent by the application over a secure connection in response to requests.
- Secure incoming bandwidth
- The amount of data received by the application over a secure connection from requests.
Search API resources are charged according to the rates on the pricing schedule.
|Resource or API call||Free Quota|
|Total storage (documents and indexes)||0.25 GB|
|Queries||1000 queries per day|
|Adding documents to indexes||0.01 GB per day|
The application console quota section displays a raw count of API requests. Note that when indexing multiple documents in a single call, the call count is increased by the number of documents.
The Search API imposes these limits to ensure the reliability of the service:
- 100 aggregated minutes of query execution time per minute, within an app and an index.
- 15,000 Documents added/deleted per minute
Note: Although these limits are enforced by the minute, the console displays the daily totals for each. Customers with Silver, Gold, or Platinum support can request higher throughput limits by contacting their support representative.
When a task executes, its associated requests count toward the application request quotas
These limits apply to all task queues:
|Resource||Daily limit||Maximum rate|
|Task Queue management calls (using the console)||10,000||n/a|
|Maximum number of queues (includes both push and pull queues but not the default queue)||100 queues.|
Note: Once a task has been executed or deleted, the storage it uses is freed. Your storage quota is updated at regular intervals and might not show the reclaimed space immediately. See the Python, Java, or Go, or PHP documentation for more details.
The following limits apply to task queues according to their type:
|Push Queue Limits|
|Maximum task size||100KB|
|Queue execution rate||500 task invocations per second per queue|
|Maximum countdown/ETA for a task||30 days from the current date and time|
|Maximum number of tasks that can be added in a batch||100 tasks|
|Maximum number of tasks that can be added in a transaction||5 tasks|
|Default maximum number of task queues||100 queues. Contact Support to request an increase.|
The following quotas apply specifically to Cron jobs.
- Cron jobs
- Number of cron jobs.
|Cron job||250 cron jobs|
- URL Fetch API calls
- The total number of times the application accessed the URL fetch service to perform an HTTP or HTTPS request.
- URL Fetch data sent
- The amount of data sent to the URL fetch service in requests.
- URL Fetch data received
- The amount of data received from the URL fetch service in responses. This also counts toward the Incoming Bandwidth quota.
|Resource||Daily limit||Maximum rate|
|UrlFetch API calls||860,000,000 calls||660,000 calls/minute|
|UrlFetch data sent||4.5 TB||3,600 MB/minute|
|UrlFetch data received||4.5 TB||3,600 MB/minute|