Quotas and limits
This page identifies the request quotas and limits for Firestore.
Free Tier usage
Firestore offers a free tier that lets you get started with Firestore at no cost. The free tier amounts are listed in the following table.
Free tier amounts are applied daily and reset at midnight Pacific time.
The free tier applies to only one Firestore database per project. The first database that is created in a project without a free tier database will get the free tier. If the database with the free tier applied is deleted, the next database created will receive the free tier.
Standard edition
| Free tier | Quota |
|---|---|
| Stored data | 1 GiB |
| Document reads | 50,000 per day |
| Document writes | 20,000 per day |
| Document deletes | 20,000 per day |
| Outbound data transfer | 10 GiB per month |
Enterprise edition
| Free tier | Quota |
|---|---|
| Stored data | 1 GiB |
| Read units | 50,000 per day |
| Real-time update units | 50,000 per day |
| Write units | 40,000 per day |
| Outbound data transfer | 10 GiB per month |
The following operations and features don't include free usage. You must enable billing to use these features:
- Managed deletes (TTL)
- PITR data
- Backup data
- Restore operations
- Clone operations
Limits
The following tables show the limits that apply to Firestore. These are hard limits unless otherwise noted.
Databases
Standard edition
| Limit | Details |
|---|---|
| Maximum number of databases per project | 100 You can contact support to request an increase to this limit. |
| Maximum number of customer-managed encryption keys (CMEK) databases per project | 0 By default the quota is 0 because this feature is behind an allowlist. You can request to increase the quota by filling in the CMEK access request form . |
Enterprise edition
| Limit | Details |
|---|---|
| Maximum number of databases per project | 100 You can contact support to request an increase to this limit. |
| Maximum number of customer-managed encryption keys (CMEK) databases per project | 0 By default the quota is 0 because this feature is behind an allowlist. You can request to increase the quota by filling in the CMEK access request form . |
Collections, documents, and fields
Standard edition
- Must be valid UTF-8 characters
- Must be no longer than 1,500 bytes
- Cannot contain a forward slash (
/) - Cannot solely consist of a single period (
.) or double periods (..) - Cannot match the regular expression
__.*__
- Must be valid UTF-8 characters
- Must be no longer than 1,500 bytes
- Cannot contain a forward slash (
/) - Cannot solely consist of a single period (
.) or double periods (..) - Cannot match the regular expression
__.*__ - If you import Datastore entities into a Firestore database,
numeric entity IDs are exposed as
__id[0-9]+__
- Must be valid UTF-8 characters
- Cannot match the regular expression
__.*__
- Must separate field names with a single period
(
.) - May be passed as a dot-delimited (
.) string of segments where each segment is either a simple field name or a quoted field name (defined below).
- Contains only the characters
a-z,A-Z,0-9, and underscore (_) - Does not start with
0-9
`
). For example, foo.`x&y`
refers to the x&y
field nested under the foo
field. To construct a field name with the backtick character, escape the backtick character with the backslash character ( \
). For convenience, you can avoid quoted field names by passing the field path as a FieldPath object ( for example, see JavaScript FieldPath
).20
Map and array fields add one level to the overall depth of an object. For example, the following object has a total depth of three levels:
{
nested_map: { #depth 1
nested_array: [ #depth 2
{
foo: "bar" #depth 3
}
]
}
}
Enterprise edition
- Must be valid UTF-8 characters
- Must be no longer than 1,500 bytes
- Cannot contain a forward slash (
/) - Cannot solely consist of a single period (
.) or double periods (..) - Cannot match the regular expression
__.*__
- Must be valid UTF-8 characters
- Must be no longer than 1,500 bytes
- Cannot contain a forward slash (
/) - Cannot solely consist of a single period (
.) or double periods (..) - Cannot match the regular expression
__.*__ - If you import Datastore entities into a Firestore database,
numeric entity IDs are exposed as
__id[0-9]+__
- Must be valid UTF-8 characters
- Cannot match the regular expression
__.*__
- Must separate field names with a single period
(
.) - May be passed as a dot-delimited (
.) string of segments where each segment is either a simple field name or a quoted field name (defined below).
- Contains only the characters
a-z,A-Z,0-9, and underscore (_) - Does not start with
0-9
`
). For example, foo.`x&y`
refers to the x&y
field nested under the foo
field. To construct a field name with the backtick character, escape the backtick character with the backslash character ( \
). For convenience, you can avoid quoted field names by passing the field path as a FieldPath object ( for example, see JavaScript FieldPath
).20
Map and array fields add one level to the overall depth of an object. For example, the following object has a total depth of three levels:
{
nested_map: { #depth 1
nested_array: [ #depth 2
{
foo: "bar" #depth 3
}
]
}
}
Writes and transactions
Standard edition
| Limit | Details |
|---|---|
| Maximum API request size | 10 MiB |
| Time limit for a transaction | 270 seconds, with a 60-second idle expiration time |
Maximum number of field transformations that can be performed on a
single document in a Commit
operation or in a
transaction |
500 |
Enterprise edition
| Limit | Details |
|---|---|
| Maximum API request size | 10 MiB |
| Time limit for a transaction | 270 seconds, with a 60-second idle expiration time |
Maximum number of field transformations that can be performed on a
single document in a Commit
operation or in a
transaction |
500 |
Indexes
Standard edition
-
200 when you have not enabled billing for your Google Cloud project.
If you need more quota, you must enable billing for your Google Cloud project.
-
1000 when you enable billing for your Google Cloud project.
You can contact support to request an increase to this limit.
-
200 when you have not enabled billing for your Google Cloud project.
If you need more quota, you must enable billing for your Google Cloud project.
- 1000 when you enable billing for your Google Cloud project.
One field level configuration can contain multiple configurations for the same field. For example, a single-field indexing exemption and a TTL policy on the same field count as one field configuration towards the limit.
Maximum number of index entries for each document
40,000
The number of index entries is the sum of the following for a document:
- The number of single-field index entries
- The number of composite index entries
To see how Firestore turns a document and a set of indexes into index entries, see this index entry count example .
7.5 KiB
To see how Firestore calculates index entry size, see index entry size .
8 MiB
The total size is the sum of the following for a document:
1500 bytes
Field values over 1500 bytes are truncated. Queries involving truncated field values may return inconsistent results.
Enterprise edition
-
200 when you have not enabled billing for your Google Cloud project.
If you need more quota, you must enable billing for your Google Cloud project.
-
1000 when you enable billing for your Google Cloud project.
You can contact support to request an increase to this limit.
Maximum number of index entries for each document
40,000
7.5 KiB
To see how Firestore calculates index entry size, see index entry size .
8 MiB
Time-to-live (TTL)
Standard edition
-
200 when you have not enabled billing for your Google Cloud project.
If you need more quota, you must enable billing for your Google Cloud project.
- 1000 when you enable billing for your Google Cloud project.
Enterprise edition
-
200 when you have not enabled billing for your Google Cloud project.
If you need more quota, you must enable billing for your Google Cloud project.
- 1000 when you enable billing for your Google Cloud project.
One field level configuration can contain multiple configurations for the same field. For example, a single-field indexing exemption and a TTL policy on the same field count as one field configuration towards the limit.
Export/Import
The following limits apply to managed import and export operations :
Standard edition
| Limit | Details |
|---|---|
| Maximum total number of both export and import requests for a project allowed per minute | 20 |
| Maximum number of concurrent exports and imports | 50 |
| Maximum number of collection ID filters for export and import requests | 100 |
Enterprise edition
| Limit | Details |
|---|---|
| Maximum total number of both export and import requests for a project allowed per minute | 20 |
| Maximum number of concurrent exports and imports | 50 |
| Maximum number of collection ID filters for export and import requests | 100 |
Security rules
Standard edition
exists()
, get()
, and getAfter()
calls per request- 10 for single-document requests and query requests.
-
20 for multi-document reads, transactions, and batched writes. The previous limit of 10 also applies to each operation.
For example, imagine you create a batched write request with 3 write operations and that your security rules use 2 document access calls to validate each write. In this case, each write uses 2 of its 10 access calls and the batched write request uses 6 of its 20 access calls.
Exceeding either limit results in a permission denied error.
Some document access calls may be cached, and cached calls do not count towards the limits.
match
statement depthmatch
statementsmatch
statementslet
variable bindings per function- a 256 KB limit on the size of the ruleset text source
published from the Firebase console or from the CLI using
firebase deploy. - a 250 KB limit on the size of the compiled ruleset that results when Firebase processes the source and makes it active on the back-end.
Enterprise edition
exists()
, get()
, and getAfter()
calls per request- 10 for single-document requests and query requests.
-
20 for multi-document reads, transactions, and batched writes. The previous limit of 10 also applies to each operation.
For example, imagine you create a batched write request with 3 write operations and that your security rules use 2 document access calls to validate each write. In this case, each write uses 2 of its 10 access calls and the batched write request uses 6 of its 20 access calls.
Exceeding either limit results in a permission denied error.
Some document access calls may be cached, and cached calls do not count towards the limits.
match
statement depthmatch
statementsmatch
statementslet
variable bindings per function- a 256 KB limit on the size of the ruleset text source
published from the Firebase console or from the CLI using
firebase deploy. - a 250 KB limit on the size of the compiled ruleset that results when Firebase processes the source and makes it active on the back-end.

