Meta Ads Limitations
The Meta Ads connector has a number of limitations tied both to Meta API policies and to the architectural specifics of the integration. All significant limitations and workaround strategies are listed below.
1. Rate Limiting (3 Requests/sec)
Limitation: the provider-level rate limiter caps request frequency at 3 requests per second, with a 1000ms window and 100ms jitter.
Implementation: requests are queued and executed sequentially while respecting the interval. Exceeding the limit returns HTTP 429 or an error code from the list of throttle errors.
Workaround strategy:
- Use filters to reduce the number of requests
- Apply data caching
- For large volumes, use async reports
2. META_MAX_PAGES (Page Limit)
Limitation: the maximum number of pagination pages is configured via runtimeConfig.providers.meta.maxPages.
What happens when exceeded: a meta_paging_truncated event is logged, and results are truncated to the maximum number of pages.
Recommendation: when working with large accounts (hundreds of campaigns and thousands of ads), use filters to narrow the sample or request data in parts.
3. Exponential Backoff on Throttling
Limitation: when throttle errors are received, exponential backoff is applied:
- Base delay: 60 seconds
- Maximum delay: 15 minutes
- Priority: the
estimated_time_to_regain_accessheader takes priority over the formulamin(MAX_THROTTLE_BACKOFF_MS, DEFAULT_THROTTLE_BACKOFF_MS * 2^attempt) - Maximum multiplier: 4x the base delay
Per-account quota tracking: callCount, totalCputime, totalTime are used — worstPct by maximum to estimate the wait needed. estimated_time_to_regain_access in seconds × 60 × 1000 → regainMs.
4. 8 Throttling Codes
The Meta API returns specific error codes when limits are exceeded:
| Code | Message | Category |
|---|---|---|
4 | Application request limit reached | throttle |
17 | User request limit reached | throttle |
32 | Page-level throttling | throttle |
613 | Custom-level throttling | throttle |
80000 | Business use case throttling (Instagram) | throttle |
80003 | Business use case throttling (custom audiences) | throttle |
80004 | Business use case throttling (ads management) | throttle |
80014 | Business use case throttling (ads insights) | throttle |
All throttle errors are retryable — the system automatically retries the request via backoff.
5. Payload Too Large
Limitation: a request can be rejected with a payload too large error in two variants:
| Code | Description |
|---|---|
payload-1-99 | Payload too large (code: 1, subcode: 99) |
payload-100-1487534 | Payload too large (code: 100, subcode: 1487534) |
Cause: too many fields or metrics in a single request.
Solution: split the request into several smaller ones — request metrics in groups of 10-15 at a time.
6. Creative Degradation
Limitation: creative enrichment can degrade on API errors.
Consequences: creative fields (thumbnail_url, image_url, body, link, download_url, video_id, title) may be missing from the response, while the core structural and metric data is preserved.
Cause: creatives are requested via a separate API call, which can fail independently of the main request.
7. Budget Fields in Cents
Limitation: the daily_budget and lifetime_budget fields come from the API in cents.
Conversion: LightLead automatically divides the value by 100 to get the amount in the actual currency.
campaign_budget = int(daily_budget) / 1008. Default Statistics Period
Limitation: the default statistics period is last_30d.
Available periods: today, yesterday, last_7d, last_30d.
Implementation: via the resolveGraphDateRange function.
9. Transport Errors
Network issues can cause transport errors:
| Code | Description |
|---|---|
transport-5xx | HTTP 5xx server error |
transport-ECONNABORTED | Connection aborted |
transport-ECONNRESET | Connection reset |
transport-ETIMEDOUT | Connection timed out |
transport-EAI_AGAIN | DNS lookup failed |
All transport errors are retryable — the system automatically retries the request.
Limitations Summary Table
| Limitation | Value | Retryable |
|---|---|---|
| Rate limit | 3 requests/sec | Yes |
| META_MAX_PAGES | Configurable | No (truncation) |
| Maximum backoff | 15 minutes | Yes |
| Backoff multiplier | Up to 4x | Yes |
| Throttle codes | 8 + HTTP 429 | Yes |
| Payload too large | 2 variants | Yes (split the request) |
| Creative degradation | Partial data loss | No |
| Budget in cents | /100 conversion | N/A |
| Transport errors | 5 types | Yes |