Meta Marketing API Rate Limits: Quotas, Headers, Errors

By Mika ReyesPublished 6 min read

The short answer

Meta Marketing API rate limits are counted per ad account per hour. Ads management allows 300 + 40 × active ads calls on Limited Access and 100,000 + 40 × active ads on Full Access. Insights get a larger quota. The X-Business-Use-Case-Usage header shows usage and minutes to recovery, and errors 80004, 80000, 17, and 613 mean you're throttled.

Meta Marketing API rate limits are Business Use Case (BUC) quotas counted per ad account over a rolling hour, with a separate quota for each type of call. Ads management calls get 300 + 40 × active ads an hour on Limited Access and 100,000 + 40 × active ads on Full Access. On top of that sit an ad account score, a write limit per second, and caps on budget changes.

This page lists every limit with its number, the headers that report usage, the error code for each, and how to back off. It's part of our Meta Ads API series.

How do Meta Marketing API rate limits work?

Meta Marketing API rate limits stack in three layers: Business Use Case quotas, ad account limits, and platform limits. A call can be throttled by any one of them, and each layer reports in its own header and error code.

Layer Counted per What it caps
Business Use Case (BUC) Ad account, per use case, rolling hour Calls by type: ads management, insights, custom audiences
Ad account limits Ad account A points score, writes per second, edits per object, budget changes
Platform limits App All Ads Insights calls, and all calls by app user count

Source: Meta's Marketing API rate limiting page. Meta notes that endpoints sharing a use case share one quota per ad account, so a heavy reporting job can throttle your campaign edits on the same account.

What are the Business Use Case rate limits?

Business Use Case rate limits are hourly call quotas per ad account, and they grow with the number of active ads. Meta's formulas, by Marketing API Access Tier:

Use case Limited Access Full Access
ads_management 300 + 40 × active ads 100,000 + 40 × active ads
ads_insights 600 + 400 × active ads − 0.001 × user errors 190,000 + 400 × active ads − 0.001 × user errors
custom_audience 5,000 + 40 × active custom audiences 190,000 + 40 × active custom audiences, capped at 700,000

On Limited Access, an account with 5 active ads gets 500 ads management calls an hour. A sync job that reads campaigns, ad sets, and ads one by one across a few accounts can spend that in minutes. Total CPU time and wall time count against the quota too, so a few heavy queries can throttle you before the call count does.

What changed in Meta's access tiers in 2026?

On May 4, 2026, Meta renamed Ads Management Standard Access to the Marketing API Access Tier and lowered the bar for Full Access. The labels changed from Standard and Advanced to Limited and Full, and the qualifying volume fell from 1,500 to 500 Marketing API calls in the past 15 days.

The error-rate rule stayed at under 15%, measured differently. Jiaqi Sun wrote in Meta's announcement that it is now:

"calculated over a rolling window of your last 500 calls rather than a fixed time period."

For platforms with bursty traffic, an overnight batch that fails half its calls can sink your error rate before review, so fix throttling before you apply for Full Access.

What are the ad account limits?

Ad account limits cap how fast you can call and write to one ad account, regardless of your hourly quota. All of these come from Meta's rate limiting page:

  • Ad account score. Reads cost 1 point and writes 3. Limited Access tops out at 60 points, decays over 300 seconds, and blocks for 300 seconds at the max. Full Access tops out at 9,000, with a 60-second block.
  • Writes per second. 100 requests per second per app and ad account on create and edit calls for campaigns, ad sets, and ads.
  • Edits per object. By default, one edit per object every 30 seconds.
  • Budget changes. An ad set's daily_budget or lifetime_budget can change 4 times per hour, then budget edits are blocked for an hour.
  • Spend limits. Spend cap fields can change 10 times per day.
  • Ad creation. Limited by the account's daily spend limit.

The budget cap catches AI tools that adjust budgets on every optimization pass. Batch the decision and write once.

Which headers show Meta Marketing API usage?

The X-Business-Use-Case-Usage header shows usage as a percentage per ad account and the minutes until access returns. Read it on every response and slow down before you reach 100.

Header Fields What it tells you
X-Business-Use-Case-Usage call_count, total_cputime, total_time, type, estimated_time_to_regain_access, ads_api_access_tier BUC usage by ad account and use case
X-Ad-Account-Usage acc_id_util_pct, reset_time_duration, ads_api_access_tier Ad account score usage
X-FB-Ads-Insights-Throttle app_id_util_pct, acc_id_util_pct, ads_api_access_tier Insights usage for the app and the account
X-App-Usage call_count, total_time, total_cputime Platform limits for the app

X-Business-Use-Case-Usage is keyed by business object ID, and one response can report several. Parse it as a map, and check ads_api_access_tier to confirm which tier Meta thinks you're on.

What do Meta Marketing API error codes 17, 613, and 80004 mean?

Error 80004 means the ads management quota is used up, 80000 means insights, and 17 or 613 point to an ad account limit you identify by subcode. Error 613 is shared across several limits, so log the subcode with every failure.

Code Subcode Limit hit
80004 2446079 Ads management BUC quota
80000 2446079 Ads Insights BUC quota
80003 2446079 Custom audience BUC quota
80014 none Catalog batch BUC quota
17 2446079 Ad account score ("User request limit reached")
17 1885172 Spend limit changed more than 10 times a day
613 1487742 Too many calls from this ad account
613 5044001 Over 100 writes per second
613 4841018 Concurrent edits to one object
613 1487632 Ad set budget changed more than 4 times an hour
613 1487225 Ad creation limit
4 1504022 or 1504039 Too many Ads Insights calls from the app
4 none App-level limit

Source: Meta's Marketing API and Graph API rate limiting pages. The Instagram and Pages codes are in our Instagram API rate limit guide.

How should I back off from Meta Marketing API throttling?

Back off per ad account, using the header's recovery estimate, and stop sending calls to a throttled account until it clears. Every call you make while throttled still counts.

async function callWithBackoff(url: string, attempt = 0): Promise<Response> {
  const res = await fetch(url);
  const body = await res.clone().json().catch(() => null);
  const code = body?.error?.code;
  const throttled = [4, 17, 613, 80000, 80003, 80004, 80014].includes(code);
  if (!throttled || attempt >= 5) return res;
 
  const usage = JSON.parse(res.headers.get("x-business-use-case-usage") ?? "{}");
  const minutes = Object.values(usage).flat()
    .map((u: any) => u.estimated_time_to_regain_access ?? 0)
    .reduce((a: number, b: number) => Math.max(a, b), 0);
  const waitMs = minutes > 0
    ? minutes * 60_000
    : Math.min(2 ** attempt * 30_000, 600_000) + Math.random() * 5_000;
 
  await new Promise((r) => setTimeout(r, waitMs));
  return callWithBackoff(url, attempt + 1);
}

In a real queue, park the job for that ad account rather than sleeping a worker. Meta's own recommendations, from the rate limiting page:

  • Spread calls evenly instead of bursting.
  • Batch. Pass lists of IDs, use level on insights instead of one call per ad, and run large insights reports asynchronously.
  • Space edits to one object at least 30 seconds apart, increasing the gap on each retry.
  • Cut calls you don't need, such as re-reading structure that hasn't changed.

How does Adeli report Meta throttling?

Adeli's Ads endpoints turn Meta throttling into one response: 429 rate_limited with a Retry-After header and structured limit details. Your code handles one status code instead of a table of Meta codes and subcodes, per Adeli's Ads docs.

{
  "error": {
    "code": "rate_limited",
    "message": "Facebook is rate limiting this ad account; try again in a minute",
    "details": { "retryAfterSeconds": 60, "limit": "ad_account" }
  }
}

That example is from Get campaign tree, which returns the campaign, ad set, and ad hierarchy with spend, impressions, reach, and clicks rolled up at every level. A provider refusal that isn't throttling returns 422 provider_rejected instead. Adeli also reuses the ad account list for up to 15 minutes rather than asking Meta on every call.

AI marketing platforms call these endpoints with the same API key they use for Adeli's social media analytics API on other networks. The same Facebook connection also publishes Facebook Page posts through Adeli's posting API.

faq

Frequently asked questions

How long does a Meta Marketing API rate limit last?

The windows roll, so there's no fixed reset time. The X-Business-Use-Case-Usage header includes estimated_time_to_regain_access in minutes. An ad account score block lasts 300 seconds on Limited Access and 60 seconds on Full Access.

Is the Facebook Ads API rate limit per app or per ad account?

Mostly per ad account. Business Use Case quotas, the ad account score, and the 100 requests-per-second write limit are counted per ad account. Ads Insights and app-level platform limits are counted per app, so one busy customer can't use up another customer's ads management quota, but heavy insights traffic can slow every customer.

How do I raise my Meta Marketing API rate limit?

Upgrade the Marketing API Access Tier from Limited Access to Full Access through App Review. Meta asks for 500 or more Marketing API calls in the past 15 days and an error rate under 15% over the last 500 calls.

Does the Meta Marketing API return HTTP 429?

Meta's rate limiting docs describe throttling by error code and subcode in the response body, not by HTTP status. Branch on the code: 80004 for ads management, 80000 for insights, 17 with subcode 2446079 for the ad account score, and 613 for several other limits.

Power your next project
with one ads & social media API

Give your users publishing, scheduling, and analytics through one integration your team can actually maintain.

Try with agents

Start with free credits. No credit card required.