Use this skill when an org needs proactive, automated visibility into its consumption of Salesforce platform limits. Unlike per-transaction governor limits that are enforced inline during code execution, org-level limits are shared ceilings that accumulate over time -- daily API calls, data storage, file storage, custom object counts, platform event delivery allocations, and more. When these limits are exhausted, the impact is org-wide: all integrations fail, all users are blocked from creating records, or platform events are silently dropped. The correct response is not reactive firefighting but proactive monitoring with automated threshold alerts.
Before Starting
- Which limits matter most? Not every org needs to monitor every limit. Identify the limits that are most likely to be exhausted given the org's usage pattern -- integration-heavy orgs should monitor API calls; high-growth orgs should monitor storage; event-driven architectures should monitor platform event delivery allocations.
- What is the current consumption baseline? Before setting thresholds, establish what "normal" looks like. A single day's snapshot is not enough -- collect at least two weeks of data to identify peaks and trends.
- What notification channels are available? Email is the simplest but most easily ignored. Platform Events can drive real-time LWC dashboards. Custom Notifications appear in-app. Outbound Messages or callouts can reach Slack or PagerDuty.
Core Concepts
Three Monitoring Surfaces
Salesforce exposes org-level limit data through three distinct surfaces, each with different strengths:
Surface 1: Apex OrgLimits Class
The System.OrgLimits class (available since API v41.0) provides a Map<String, System.OrgLimit> via OrgLimits.getAll(). Each OrgLimit instance exposes .getName(), .getLimit(), and .getValue() (current consumption). This is the best surface for scheduled Apex-based monitoring because it runs inside the org without consuming an API call.
Key characteristics:
- Returns a curated subset of limits, not every limit the REST resource exposes.
- Does not consume an API call (it is native Apex, not a callout).
- Available in all Apex execution contexts (trigger, batch, queueable, scheduled).
- The map keys are string names like
DailyApiRequests, DataStorageMB, FileStorageMB, DailyAsyncApexExecutions, DailyBulkApiRequests, DailyStreamingApiEvents, HourlyPublishedPlatformEvents, and others.
Surface 2: REST API Limits Resource
GET /services/data/vXX.0/limits returns a JSON object with every org limit, including limits not available through the Apex class. Each entry contains Max and Remaining values.
Key characteristics:
- Most comprehensive surface -- exposes limits that OrgLimits.getAll() does not.
- Consumes one API call per invocation (factor this into API budget calculations).
- Ideal for external monitoring tools, middleware health checks, or CI/CD pre-deployment validation.
- Response payload is a flat JSON object with limit names as keys.
Surface 3: Setup -- Company Information
The Setup > Company Information page displays storage usage, API usage (last 24 hours), and feature limits in the UI. This is the only monitoring surface available to administrators without developer tooling.
Key characteristics:
- No programmatic access -- manual inspection only.
- Useful for one-time audits but not for proactive alerting.
- Shows a rolling 24-hour window for API usage.
- Storage breakdown shows data storage, file storage, and big object storage separately.
Threshold Alerting Architecture
The recommended architecture for proactive limit monitoring follows a simple pattern:
- Scheduled Apex runs on a cron schedule (hourly or every 4 hours).
- The job calls
OrgLimits.getAll() and compares each limit's .getValue() against .getLimit().
- When consumption crosses a configured threshold (e.g., 70% warning, 90% critical), the job fires an alert through one or more channels.
- Alert channels include:
Messaging.SingleEmailMessage for email, Platform Event publish for real-time dashboard updates, Messaging.CustomNotification for in-app bell notifications, or an HTTP callout to an external incident management system.
Custom Metadata for Threshold Configuration
Store monitoring thresholds in Custom Metadata Type records rather than hard-coding them. This allows administrators to adjust thresholds without code changes and supports per-limit configuration:
Limit_Monitor_Config__mdt with fields: Limit_Name__c (text, matches the OrgLimit key), Warning_Threshold__c (percent, e.g., 70), Critical_Threshold__c (percent, e.g., 90), Enabled__c (checkbox), Notification_Channel__c (picklist: Email / Platform Event / Custom Notification / External).
Distinguishing From Related Skills
| Concern |
Correct Skill |
| Designing for governor limit headroom in new builds |
limits-and-scalability-planning |
| Throttling API consumers via Connected App policies |
api-security-and-rate-limiting |
| Optimizing individual Apex transactions for CPU/heap |
apex-cpu-and-heap-optimization |
| Monitoring org-wide limit consumption and alerting |
org-limits-monitoring (this skill) |
Recommended Workflow
Identify critical limits. Review the org's integration landscape, storage trajectory, and automation density. Select the 5-10 limits most likely to be exhausted. Common high-priority limits: DailyApiRequests, DataStorageMB, FileStorageMB, DailyBulkApiRequests, HourlyPublishedPlatformEvents, DailyAsyncApexExecutions.
Establish baselines. Run OrgLimits.getAll() or GET /services/data/vXX.0/limits daily for two weeks. Record peak consumption values. Use these peaks to set meaningful thresholds that avoid false alarms.
Design the monitoring job. Create a Scheduled Apex class that reads limit values from OrgLimits.getAll(), compares them against thresholds stored in Custom Metadata, and dispatches alerts when thresholds are crossed. Schedule the job at an appropriate frequency (hourly for API-heavy orgs, every 4 hours for storage-focused monitoring).
Configure alert routing. Map each limit to a notification channel. API limit breaches may need to reach the integration team via Slack webhook. Storage warnings may need to reach the data team via email. Critical alerts for any limit should page the platform team.
Build visibility. Create a Lightning Dashboard or LWC component that displays current limit consumption as gauges or progress bars. If the monitoring job publishes Platform Events, the dashboard can update in near-real-time without polling.
Test with realistic load. In a full sandbox, simulate high-consumption scenarios (e.g., run a bulk data load that consumes 80% of daily API calls) and verify that alerts fire correctly and reach the intended audience.
Operationalize. Add the monitoring job to the org's runbook. Document the escalation path for each alert severity. Review thresholds quarterly as org usage patterns evolve.
Modes of Engagement
Mode 1: Greenfield Monitoring Setup
The org has no limit monitoring in place. Start from Step 1 of the Recommended Workflow. Deliver a complete monitoring solution including Scheduled Apex, Custom Metadata configuration, alert routing, and a visibility dashboard.
Mode 2: Incident Response -- Limit Exhausted
A limit has already been breached. Start by identifying which limit was exhausted using GET /services/data/vXX.0/limits or Setup > Company Information. Determine the root cause (unexpected integration spike, data load, runaway automation). Implement emergency mitigation (disable the offending integration, archive data, increase allocation if contractually possible). Then proceed to Mode 1 to prevent recurrence.
Mode 3: Existing Monitoring Enhancement
The org has basic monitoring (e.g., a weekly manual check or a simple email alert) but needs more sophistication. Assess the current monitoring coverage, identify blind spots (limits not being tracked, thresholds too high or too low, alert fatigue from false positives), and enhance the solution incrementally.
Key Limit Categories
API Consumption Limits
| Limit |
Scope |
How to Check |
| DailyApiRequests |
Per 24-hour rolling window |
OrgLimits / REST /limits |
| DailyBulkApiRequests |
Per 24-hour rolling window |
OrgLimits / REST /limits |
| DailyBulkV2QueryJobs |
Per 24-hour rolling window |
REST /limits |
| DailyBulkV2QueryFileStorageMB |
Per 24-hour rolling window |
REST /limits |
Storage Limits
| Limit |
Scope |
How to Check |
| DataStorageMB |
Org-wide |
OrgLimits / REST /limits / Setup |
| FileStorageMB |
Org-wide |
OrgLimits / REST /limits / Setup |
Platform Event Limits
| Limit |
Scope |
How to Check |
| HourlyPublishedPlatformEvents |
Per clock hour |
OrgLimits / REST /limits |
| HourlyPublishedStandardVolumePlatformEvents |
Per clock hour |
REST /limits |
| DailyStandardVolumePlatformEvents |
Per 24-hour rolling window |
REST /limits |
Async Processing Limits
| Limit |
Scope |
How to Check |
| DailyAsyncApexExecutions |
Per 24-hour rolling window |
OrgLimits / REST /limits |
| ConcurrentAsyncGetReportInstances |
Concurrent |
REST /limits |
Official Sources Used
- Apex Reference Guide -- OrgLimits class and OrgLimit methods
- REST API Developer Guide -- Limits resource (
/services/data/vXX.0/limits)
- Salesforce Help -- Monitor API Usage and Limits
- Salesforce Well-Architected Overview -- Operational Excellence pillar
1---2name: org-limits-monitoring3description: Use when designing or implementing proactive monitoring of Salesforce org-level limits such as API call consumption, storage usage, custom object counts, or platform event allocations. Trigger phrases: 'how do I monitor org limits programmatically', 'set up alerts before we hit API limits', 'REST Limits resource usage', 'OrgLimits.getAll() in Apex', 'scheduled limit checks', 'proactive limit threshold alerting', 'Company Information limits dashboard', 'we keep getting surprised by limit breaches in production'. NOT for per-transaction governor limit planning (use limits-and-scalability-planning). NOT for Connected App API throttling or rate limiting policies (use api-security-and-rate-limiting). NOT for individual Apex code optimization against transaction limits (use apex-cpu-and-heap-optimization).4---5
6Use this skill when an org needs proactive, automated visibility into its consumption of Salesforce platform limits. Unlike per-transaction governor limits that are enforced inline during code execution, org-level limits are shared ceilings that accumulate over time -- daily API calls, data storage, file storage, custom object counts, platform event delivery allocations, and more. When these limits are exhausted, the impact is org-wide: all integrations fail, all users are blocked from creating records, or platform events are silently dropped. The correct response is not reactive firefighting but proactive monitoring with automated threshold alerts.
7
8---
9
10## Before Starting
11
12- **Which limits matter most?** Not every org needs to monitor every limit. Identify the limits that are most likely to be exhausted given the org's usage pattern -- integration-heavy orgs should monitor API calls; high-growth orgs should monitor storage; event-driven architectures should monitor platform event delivery allocations.
13- **What is the current consumption baseline?** Before setting thresholds, establish what "normal" looks like. A single day's snapshot is not enough -- collect at least two weeks of data to identify peaks and trends.
14- **What notification channels are available?** Email is the simplest but most easily ignored. Platform Events can drive real-time LWC dashboards. Custom Notifications appear in-app. Outbound Messages or callouts can reach Slack or PagerDuty.
15
16---
17
18## Core Concepts
19
20### Three Monitoring Surfaces
21
22Salesforce exposes org-level limit data through three distinct surfaces, each with different strengths:
23
24#### Surface 1: Apex OrgLimits Class
25
26The `System.OrgLimits` class (available since API v41.0) provides a `Map<String, System.OrgLimit>` via `OrgLimits.getAll()`. Each `OrgLimit` instance exposes `.getName()`, `.getLimit()`, and `.getValue()` (current consumption). This is the best surface for scheduled Apex-based monitoring because it runs inside the org without consuming an API call.
27
28Key characteristics:
29- Returns a curated subset of limits, not every limit the REST resource exposes.
30- Does not consume an API call (it is native Apex, not a callout).
31- Available in all Apex execution contexts (trigger, batch, queueable, scheduled).
32- The map keys are string names like `DailyApiRequests`, `DataStorageMB`, `FileStorageMB`, `DailyAsyncApexExecutions`, `DailyBulkApiRequests`, `DailyStreamingApiEvents`, `HourlyPublishedPlatformEvents`, and others.
33
34#### Surface 2: REST API Limits Resource
35
36`GET /services/data/vXX.0/limits` returns a JSON object with every org limit, including limits not available through the Apex class. Each entry contains `Max` and `Remaining` values.
37
38Key characteristics:
39- Most comprehensive surface -- exposes limits that OrgLimits.getAll() does not.
40- Consumes one API call per invocation (factor this into API budget calculations).
41- Ideal for external monitoring tools, middleware health checks, or CI/CD pre-deployment validation.
42- Response payload is a flat JSON object with limit names as keys.
43
44#### Surface 3: Setup -- Company Information
45
46The Setup > Company Information page displays storage usage, API usage (last 24 hours), and feature limits in the UI. This is the only monitoring surface available to administrators without developer tooling.
47
48Key characteristics:
49- No programmatic access -- manual inspection only.
50- Useful for one-time audits but not for proactive alerting.
51- Shows a rolling 24-hour window for API usage.
52- Storage breakdown shows data storage, file storage, and big object storage separately.
53
54### Threshold Alerting Architecture
55
56The recommended architecture for proactive limit monitoring follows a simple pattern:
57
581. **Scheduled Apex** runs on a cron schedule (hourly or every 4 hours).
592. The job calls `OrgLimits.getAll()` and compares each limit's `.getValue()` against `.getLimit()`.
603. When consumption crosses a configured threshold (e.g., 70% warning, 90% critical), the job fires an alert through one or more channels.
614. Alert channels include: `Messaging.SingleEmailMessage` for email, Platform Event publish for real-time dashboard updates, `Messaging.CustomNotification` for in-app bell notifications, or an HTTP callout to an external incident management system.
62
63### Custom Metadata for Threshold Configuration
64
65Store monitoring thresholds in Custom Metadata Type records rather than hard-coding them. This allows administrators to adjust thresholds without code changes and supports per-limit configuration:
66
67- `Limit_Monitor_Config__mdt` with fields: `Limit_Name__c` (text, matches the OrgLimit key), `Warning_Threshold__c` (percent, e.g., 70), `Critical_Threshold__c` (percent, e.g., 90), `Enabled__c` (checkbox), `Notification_Channel__c` (picklist: Email / Platform Event / Custom Notification / External).
68
69### Distinguishing From Related Skills
70
71| Concern | Correct Skill |
72|---|---|
73| Designing for governor limit headroom in new builds | limits-and-scalability-planning |
74| Throttling API consumers via Connected App policies | api-security-and-rate-limiting |
75| Optimizing individual Apex transactions for CPU/heap | apex-cpu-and-heap-optimization |
76| Monitoring org-wide limit consumption and alerting | **org-limits-monitoring** (this skill) |
77
78---
79
80## Recommended Workflow
81
821. **Identify critical limits.** Review the org's integration landscape, storage trajectory, and automation density. Select the 5-10 limits most likely to be exhausted. Common high-priority limits: `DailyApiRequests`, `DataStorageMB`, `FileStorageMB`, `DailyBulkApiRequests`, `HourlyPublishedPlatformEvents`, `DailyAsyncApexExecutions`.
83
842. **Establish baselines.** Run `OrgLimits.getAll()` or `GET /services/data/vXX.0/limits` daily for two weeks. Record peak consumption values. Use these peaks to set meaningful thresholds that avoid false alarms.
85
863. **Design the monitoring job.** Create a Scheduled Apex class that reads limit values from `OrgLimits.getAll()`, compares them against thresholds stored in Custom Metadata, and dispatches alerts when thresholds are crossed. Schedule the job at an appropriate frequency (hourly for API-heavy orgs, every 4 hours for storage-focused monitoring).
87
884. **Configure alert routing.** Map each limit to a notification channel. API limit breaches may need to reach the integration team via Slack webhook. Storage warnings may need to reach the data team via email. Critical alerts for any limit should page the platform team.
89
905. **Build visibility.** Create a Lightning Dashboard or LWC component that displays current limit consumption as gauges or progress bars. If the monitoring job publishes Platform Events, the dashboard can update in near-real-time without polling.
91
926. **Test with realistic load.** In a full sandbox, simulate high-consumption scenarios (e.g., run a bulk data load that consumes 80% of daily API calls) and verify that alerts fire correctly and reach the intended audience.
93
947. **Operationalize.** Add the monitoring job to the org's runbook. Document the escalation path for each alert severity. Review thresholds quarterly as org usage patterns evolve.
95
96---
97
98## Modes of Engagement
99
100### Mode 1: Greenfield Monitoring Setup
101
102The org has no limit monitoring in place. Start from Step 1 of the Recommended Workflow. Deliver a complete monitoring solution including Scheduled Apex, Custom Metadata configuration, alert routing, and a visibility dashboard.
103
104### Mode 2: Incident Response -- Limit Exhausted
105
106A limit has already been breached. Start by identifying which limit was exhausted using `GET /services/data/vXX.0/limits` or Setup > Company Information. Determine the root cause (unexpected integration spike, data load, runaway automation). Implement emergency mitigation (disable the offending integration, archive data, increase allocation if contractually possible). Then proceed to Mode 1 to prevent recurrence.
107
108### Mode 3: Existing Monitoring Enhancement
109
110The org has basic monitoring (e.g., a weekly manual check or a simple email alert) but needs more sophistication. Assess the current monitoring coverage, identify blind spots (limits not being tracked, thresholds too high or too low, alert fatigue from false positives), and enhance the solution incrementally.
111
112---
113
114## Key Limit Categories
115
116### API Consumption Limits
117
118| Limit | Scope | How to Check |
119|---|---|---|
120| DailyApiRequests | Per 24-hour rolling window | OrgLimits / REST /limits |
121| DailyBulkApiRequests | Per 24-hour rolling window | OrgLimits / REST /limits |
122| DailyBulkV2QueryJobs | Per 24-hour rolling window | REST /limits |
123| DailyBulkV2QueryFileStorageMB | Per 24-hour rolling window | REST /limits |
124
125### Storage Limits
126
127| Limit | Scope | How to Check |
128|---|---|---|
129| DataStorageMB | Org-wide | OrgLimits / REST /limits / Setup |
130| FileStorageMB | Org-wide | OrgLimits / REST /limits / Setup |
131
132### Platform Event Limits
133
134| Limit | Scope | How to Check |
135|---|---|---|
136| HourlyPublishedPlatformEvents | Per clock hour | OrgLimits / REST /limits |
137| HourlyPublishedStandardVolumePlatformEvents | Per clock hour | REST /limits |
138| DailyStandardVolumePlatformEvents | Per 24-hour rolling window | REST /limits |
139
140### Async Processing Limits
141
142| Limit | Scope | How to Check |
143|---|---|---|
144| DailyAsyncApexExecutions | Per 24-hour rolling window | OrgLimits / REST /limits |
145| ConcurrentAsyncGetReportInstances | Concurrent | REST /limits |
146
147---
148
149## Official Sources Used
150
151- Apex Reference Guide -- OrgLimits class and OrgLimit methods
152- REST API Developer Guide -- Limits resource (`/services/data/vXX.0/limits`)
153- Salesforce Help -- Monitor API Usage and Limits
154- Salesforce Well-Architected Overview -- Operational Excellence pillar