Salesforce App Limits
Salesforce App Limits
Total stack depth for any Apex invocation that recursively fires triggers 16 16
due to insert, update, or delete statements3
Total number of callouts (HTTP requests or web services calls) in a 100 100
transaction
Maximum cumulative timeout for all callouts (HTTP requests or Web 120 seconds 120 seconds
services calls) in a transaction
Maximum number of methods with the future annotation allowed 50 0 in batch and
per Apex invocation future
contexts; 1 in
queueable
context
Maximum number of push notifications that can be sent in each push 2,000 2,000
notification method call
1
In a SOQL query with parent-child relationship subqueries, each parent-child relationship counts as an
extra query. These types of queries have a limit of three times the number for top-level queries. The limit
for subqueries corresponds to the value that Limits.getLimitAggregateQueries() returns.
The row counts from these relationship queries contribute to the row counts of the overall code execution.
This limit doesn’t apply to custom metadata types. In a single Apex transaction, custom metadata records
can have unlimited SOQL queries. In addition to static SOQL statements, calls to the following methods
count against the number of SOQL statements issued in a request.
• Database.countQuery
2
Salesforce Developer Limits and Allocations Quick Reference Apex Governor Limits
• Database.getQueryLocator
• Database.query
2
Calls to the following methods count against the number of DML statements issued in a request.
• Approval.process
• Database.convertLead
• Database.emptyRecycleBin
• Database.rollback
• Database.setSavePoint
• delete and Database.delete
• insert and Database.insert
• merge and Database.merge
• undelete and Database.undelete
• update and Database.update
• upsert and Database.upsert
• EventBus.publish for platform events configured to publish after commit
• System.runAs
3
Recursive Apex that doesn’t fire any triggers with insert, update, or delete statements, exists
in a single invocation, with a single stack. Conversely, recursive Apex that fires a trigger spawns the trigger
in a new Apex invocation. The new invocation is separate from the invocation of the code that caused it
to fire. Spawning a new invocation of Apex is a more expensive operation than a recursive call in a single
invocation. Therefore, there are tighter restrictions on the stack depth of these types of recursive calls.
4
Email services heap size is 36 MB.
5
CPU time is calculated for all executions on the Salesforce application servers occurring in one Apex
transaction. CPU time is calculated for the executing Apex code, and for any processes that are called from
this code, such as package code and workflows. CPU time is private for a transaction and is isolated from
other transactions. Operations that don't consume application server CPU time aren't counted toward
CPU time. For example, the portion of execution time spent in the database for DML, SOQL, and SOSL isn't
counted, nor is waiting time for Apex callouts. Application server CPU time spent in DML operations is
counted towards the Apex CPU limit, but isn’t expected to be significant.
Note:
• Limits apply individually to each testMethod.
• To determine the code execution limits for your code while it’s running, use the Limits methods.
For example, you can use the getDMLStatements method to determine the number of
DML statements that have already been called by your program. Or, you can use the
getLimitDMLStatements method to determine the total number of DML statements
available to your code.
3
Salesforce Developer Limits and Allocations Quick Reference Apex Governor Limits
certified managed packages, which are installed in your org from AppExchange and have unique
namespaces.
There’s no limit on the number of certified namespaces that can be invoked in a single transaction.
However, the number of operations that can be performed in each namespace must not exceed the
per-transaction limits. There’s also a limit on the cumulative number of operations that can be made across
namespaces in a transaction. This cumulative limit is 11 times the per-namespace limit. For example, if
the per-namespace limit for SOQL queries is 100, a single transaction can perform up to 1,100 SOQL
queries. In this case, the cumulative limit is 11 times the per-namespace limit of 100. These queries can
be performed across an unlimited number of namespaces, as long as any one namespace doesn't have
more than 100 queries. The cumulative limit doesn’t affect limits that are shared across all namespaces,
such as the limit on maximum CPU time.
Note: These cross-namespace limits apply only to namespaces in certified managed packages.
Namespaces in packages that aren’t certified don’t have their own separate governor limits. The
resources they use continue to count against the same governor limits used by your org's custom
code.
This table lists the cumulative cross-namespace limits.
Description Cumulative
Cross-Namespace
Limit
Total number of SOQL queries issued 1,100
Total number of callouts (HTTP requests or web services calls) in a transaction 1,100
Description Limit
The maximum number of asynchronous Apex method executions (batch 250,000 or the number
Apex, future methods, Queueable Apex, and scheduled Apex) per a 24-hour of user licenses in your
period1 org multiplied by 200,
whichever is greater
4
Salesforce Developer Limits and Allocations Quick Reference Apex Governor Limits
Description Limit
Maximum number of batch Apex jobs in the Apex flex queue that are in 100
Holding status
Maximum number of test classes that can be queued per 24-hour period The greater of 500 or 10
(production orgs other than Developer Edition)5 multiplied by the
number of test classes in
the org
Maximum number of test classes that can be queued per 24-hour period The greater of 500 or 20
(sandbox and Developer Edition orgs)5 multiplied by the
number of test classes in
the org
Maximum number of query cursors open concurrently per user for the Batch 15
Apex start method
Maximum number of query cursors open concurrently per user for the Batch 5
Apex execute and finish methods
1
For Batch Apex, method executions include executions of the start, execute, and finish
methods. This limit is for your entire org and is shared with all asynchronous Apex: Batch Apex, Queueable
Apex, scheduled Apex, and future methods. To check how many asynchronous Apex executions are
available, make a request to REST API limits resource. See List Organization Limits in the REST API
Developer Guide. The license types that count toward this limit include full Salesforce and Salesforce
Platform user licenses, App Subscription user licenses, Chatter Only users, Identity users, and Company
Communities users.
2
If more transactions are started while the 10 long-running transactions are still running, they’re denied.
HTTP callout processing time isn’t included when calculating this limit.
3
When batch jobs are submitted, they’re held in the flex queue before the system queues them for
processing.
4
Batch jobs that haven’t started yet remain in the queue until they’re started. If more than one job is
running, this limit doesn’t cause any batch job to fail.execute methods of batch Apex jobs still run in
parallel.
5
This limit applies to tests running asynchronously. This group of tests includes tests started through the
Salesforce user interface including the Developer Console or by inserting ApexTestQueueItem
objects using SOAP API.
6
For example, assume that 50 cursors are open. If a client application, logged in as the same user, attempts
to open a new one, the oldest of the 50 cursors is released. Cursor limits for different Lightning Platform
features are tracked separately. For example, you can have all these cursors open concurrently: 50 Apex
5
Salesforce Developer Limits and Allocations Quick Reference Apex Governor Limits
query cursors, 15 for the Batch Apex start method, 5 each for the Batch Apex execute and finish
methods, and 5 Visualforce cursors.
Maximum size of callout request or response (HTTP request or Web services 6 MB for synchronous
call)1 Apex or 12 MB for
asynchronous Apex
Maximum SOQL query run time before Salesforce cancels the transaction 120 seconds
Maximum number of class and trigger code units in a deployment of Apex 7500
1
The HTTP request and response sizes count towards the total heap size.
2
The Apex trigger batch size for platform events and Change Data Capture events is 2,000.
1
This limit doesn’t apply to Apex code in first generation(1GP) or second generation(2GP) managed
packages. The code in those types of packages belongs to a namespace unique from the code in your
org. This limit also doesn’t apply to any code included in a class defined with the @isTest annotation.
2
Large methods that exceed the allowed limit cause an exception to be thrown during the execution of
your code.
6
Salesforce Developer Limits and Allocations Quick Reference API Request Limits and Allocations
7
Salesforce Developer Limits and Allocations Quick Reference API Request Limits and Allocations
Salesforce Edition API Calls Per License Type Total Calls Per 24-Hour
Per 24-Hour Period Period
Developer Edition N/A 15,000
8
Salesforce Developer Limits and Allocations Quick Reference API Request Limits and Allocations
Salesforce Edition API Calls Per License Type Total Calls Per 24-Hour
Per 24-Hour Period Period
• External Identity 250,000 SKU,
750,000
• External Identity 1,000,000
SKU: 4,000,000
• Partner Community: 200
• Partner Community Login: 10
• Lightning Platform Starter: 200
per member for Unlimited and
Performance Edition orgs
• Lightning Platform Plus: 5,000
per member for Unlimited and
Performance Edition orgs
Note: Load, performance, and other system issues can prevent you from using your entire allocation
of calls in a 24–hour period.
APIs that count toward this allocation include the Lightning Platform REST API, the Lightning Platform
SOAP API, Bulk API, and Bulk API 2.0. API calls issued by certain Salesforce connected apps (for example,
the Salesforce mobile app) don’t count. To determine which APIs affect the allocation, see Monitoring
Your API Usage.
Calls that include DebuggingHeader have a separate allocation limit of 1,000 calls per 24-hour period.
These calls can continue to be made after the total request limit for an org is reached.
Limits and allocations are enforced against the aggregate of all API calls made to the org in a 24-hour
period. Limits and allocations are not on a per-user basis.
9
Salesforce Developer Limits and Allocations Quick Reference API Request Limits and Allocations
entering API Usage Notifications in the Quick Find box and then selecting API Usage
Notifications.
See also the Learn About Daily Rate Limits section in the App Development Without Limits Trailhead
module.
Note: The ability to go over your normal daily limit is always subject to restrictions to protect the
overall health of the Salesforce instance that hosts your org. (You can monitor the health of your
instance on Salesforce Trust.)
This ability is designed to be used occasionally to help avoid interruptions in your workflow. Don’t
rely on it on an ongoing basis. To increase your allocation, contact your Salesforce account
representative.
This ability only applies to paid orgs in active status. It does not apply to trial orgs, Developer Edition,
or sandboxes.
API request activity is aggregated into 30 day periods, starting with your contract start date, and includes
calls that exceed the org's entitled limit.
10
Salesforce Developer Limits and Allocations Quick Reference Connect REST API Limits
Note: Other factors, such as browsers and load balancers, can lower the maximum length of the
URI and headers. For public-facing services, it’s recommended to limit URI length to 2000 characters
and headers to approximately 8000 bytes.
Note: Load, performance, and other system issues can prevent some limits from being reached.
Limits can change without notice. Applications should make efficient use of available requests and
gracefully handle the 503 error code.
Batch Allocations
You can submit up to 15,000 batches per rolling 24-hour period. This allocation is shared between Bulk
API and Bulk API 2.0, so every batch that is processed in Bulk API or Bulk API 2.0 counts towards this
allocation.
In Bulk API 2.0, only ingest jobs consume batches. Query jobs do not. For details, see How Requests Are
Processed in the Bulk API 2.0 Developer Guide.
In Bulk API 2.0, batches are created for you automatically. In Bulk API, you must create the batches yourself.
11
Salesforce Developer Limits and Allocations Quick Reference Bulk API and Bulk API 2.0 Limits and Allocations
Batch processing Batches are processed in chunks. The chunk Same as Bulk API
time size depends on the API version. In API version
20.0 and earlier, the chunk size is 100 records.
In API version 21.0 and later, the chunk size is
200 records. If it takes longer than 10 minutes
to process a whole batch, the Bulk API places
the remainder of the batch back in the queue
for later processing. If the Bulk API continues
to exceed the 10-minute limit on subsequent
attempts, the batch is placed back in the
queue and reprocessed up to 10 times before
the batch is permanently marked as failed.
12
Salesforce Developer Limits and Allocations Quick Reference Bulk API and Bulk API 2.0 Limits and Allocations
Maximum retrieved file size 1 GB. If processing of the batch Same as Bulk API.
results in 1GB of retrieved data, Additionally, the API client can
then those results are saved to navigate through the full set of
disk, and then the batch is put results by using the locator
back on the queue to be resumed and maxRecords query
later. This also counts as one of parameters. The client is not
the 15 retries. bound to a set of files.
13
Salesforce Developer Limits and Allocations Quick Reference Bulk API and Bulk API 2.0 Limits and Allocations
General Limits
Item Bulk API Limit Bulk API 2.0 Limit
Batch and job Batches and jobs that are older than seven Jobs in a terminal state
lifespan days are removed from the queue if batches (completed, aborted, or failed)
are in a terminal state (completed, aborted, or that are older than seven days are
failed), regardless of their respective job status. deleted. Jobs in a non-terminal
The seven days are measured from the state that are older than seven
youngest batch associated with a job, or the days are periodically cleaned up.
age of the job if there are no batches. You can’t
create batches associated with a job that is
more than 24 hours old. Batches in a
non-terminal state that are older than seven
days are periodically cleaned up with their
respective jobs.
Binary content • The length of any file name can’t exceed N/A
512 bytes.
• A zip file can’t exceed 10 MB.
• The total size of the unzipped content
can’t exceed 20 MB.
• A maximum of 1,000 files can be
contained in a zip file. Directories don’t
count toward this total.
14
Salesforce Developer Limits and Allocations Quick Reference API Query Cursor Limits
Note: Cursor limits for different Lightning Platform features are tracked separately. For example,
you can have 10 SOAP API query cursors, 10 Metadata API cursors, and 50 Apex query cursors open
at the same time.
emptyRecycleBin() Maximum number Your org can have up to 5,000 records per license in the
of records in the Recycle Bin at any one time. For example, if your org has
Recycle Bin five user licenses, 25,000 records can be stored in the
Recycle Bin. If your org reaches its Recycle Bin limit,
Salesforce automatically removes the oldest records, as
long as they have been in the recycle bin for at least two
hours.
getDeleted() Limits for returned If a getDeleted() call returns more than 600,000
records records, the exception EXCEEDED_ID_LIMIT is returned.
login() Login request size The login request size is limited to 10 KB.
limit
merge() Merge request limits • Up to 200 merge requests can be made in a single
SOAP call.
• Up to three records can be merged in a single request,
including the master record. This limit is the same as
the limit enforced by the Salesforce user interface. To
merge more than 3 records, do a successive merge.
• External ID fields cannot be used with merge().
15
Salesforce Developer Limits and Allocations Quick Reference Metadata Limits
update() Maximum number Your client application can change up to 200 records in a
of records updated single update() call. If an update request exceeds 200
records, the entire operation fails.
query() and Batch size limits The maximum batch size is 2,000 records, but this number
queryMore() is only a suggestion. To maximize performance, the
requested batch size isn’t necessarily the actual batch size.
Salesforce Web Service Connector (WSC) clients can set
the batch size by calling setQueryOptions() on
the connection object. C# client applications can change
the batch size in the QueryOptions portion of the
SOAP header before invoking the query() call.
If the SOQL statement selects two or more custom fields
of type long text, the batch size can’t be greater than 200
records. This limit prevents large SOAP messages from
being returned.
Metadata Limits
The following limits apply to the Salesforce Extensions for Visual Studio Code, the Ant Migration Tool, and
the Metadata API.
Limit Description
Retrieving and You can deploy or retrieve up to 10,000 files at once. AppExchange packages
deploying metadata use different limits: They can contain up to 35,000 files. The maximum size of
the deployed or retrieved .zip file is 39 MB. If the files are uncompressed in an
unzipped folder, the size limit is 400 MB. Note the following:
• If using the Ant Migration Tool to deploy an unzipped folder, all files in
the folder are compressed first. The maximum size of uncompressed
components in an unzipped folder is 400 MB or less depending on the
compression ratio. If the files have a high compression ratio, you can
migrate a total of approximately 400 MB because the compressed size
would be under 39 MB. However, if the components can't be compressed
much, like binary static resources, you can migrate less than 400 MB.
• Metadata API base-64 encodes components after they’re compressed.
The resulting .zip file can't exceed 50 MB, which is the limit for SOAP
16
Salesforce Developer Limits and Allocations Quick Reference SOQL and SOSL Limits for Search Queries
Limit Description
messages. Base-64 encoding increases the size of the payload, so your
compressed payload can't exceed approximately 39 MB before encoding.
• You can perform a retrieve() call for a big object only if its index is
defined. If a big object is created in Setup and doesn’t yet have an index
defined, you can’t retrieve it.
Change sets Inbound and outbound change sets can have up to 10,000 files of metadata.
SOQL WHERE Strings in SOQL 4,000 characters for each string within a WHERE clause.
clause WHERE clauses
SOQL query results Maximum rows 2,000 results total (API version 28.0 and later), unless you
returned specify custom limits in the query. This limit includes
results from child objects. Previous API versions return
200 results.
17
Salesforce Developer Limits and Allocations Quick Reference SOQL and SOSL Limits for Search Queries
SOSL search query Maximum length of If the SearchQuery string is longer than 10,000
strings SearchQuery string characters, no result rows are returned. If
SearchQuery is longer than 4,000 characters, any
logical operators are removed. For example, the AND
operator in a statement with a SearchQuery that’s
4,001 characters will default to the OR operator, which
could return more results than expected.
SOSL query results Maximum rows 2,000 results total (API version 28.0 and later), unless you
returned specify custom limits in the query. This limit includes
results from child objects. Previous API versions return
200 results.
FOR VIEW and FOR Maximum The RecentlyViewed object is updated every time the
REFERENCE RecentlyViewed records logged-in user views or references a record. It is also
allowed updated when records are retrieved using the FOR
VIEW or FOR REFERENCE clause in a SOQL query.
To ensure that the most recent data is available,
RecentlyViewed data is periodically truncated down to
200 records per object. RecentlyViewed data is retained
for 90 days, after which it is removed on a periodic basis.
OFFSET clause Maximum number of The maximum offset is 2,000 rows. Requesting an offset
rows skipped by greater than 2,000 results in a
OFFSET NUMBER_OUTSIDE_VALID_RANGE error.
18
Salesforce Developer Limits and Allocations Quick Reference Visualforce Limits
Visualforce Limits
Limit Value
Maximum response size for a Visualforce page Less than 15 MB
Maximum size of HTML response before rendering, when Visualforce page Less than 15 MB
is rendered as PDF
Maximum rows retrieved by queries for a single Visualforce page request 50,000
Maximum rows retrieved by queries for a single Visualforce page request 1,000,000
in read-only mode
19