Facebook Graph API Rate Limits: App, BUC and Page Limits
The Facebook Graph API rate limit depends on the token. App access tokens get 200 calls per hour times the app's daily active users, on a rolling hour; user tokens have a per-user limit Meta does not disclose. Pages API calls with a Page or system user token use Business Use Case limits of 4,800 calls per 24 hours times the Page's engaged users. Usage shows in the X-App-Usage or X-Business-Use-Case-Usage header, and throttled calls return error codes such as 4, 17, 32, 613 or 80001.
Meta does not give the Graph API one rate limit. It gives formulas, and which formula applies depends on the type of token you send. Most "why am I throttled" questions come down to using a token type whose formula is small for your app. For access and pricing, see Is the Facebook API free? Instagram limits are covered in Instagram Graph API pricing and limits.
Which Facebook Graph API rate limit applies to your call
| Token | Limit type | Formula | Window |
|---|---|---|---|
| App access token | Platform, per app | 200 x daily active users | Rolling 1 hour |
| User access token | Platform, per user | Not disclosed | Rolling 1 hour |
| Page or system user token on the Pages API | Business Use Case (BUC) | 4,800 x users who engaged with the Page | Rolling 24 hours |
| Marketing API, Ads Insights | BUC, per ad account | 600 + 400 x active ads (Standard); 190,000 + 400 x active ads (Advanced) | Rolling 1 hour |
| Marketing API, Ads Management | BUC, per ad account | 300 + 40 x active ads (Standard); 100,000 + 40 x active ads (Advanced) | Rolling 1 hour |
From Meta's rate limiting guide. If both a Platform and a BUC limit could apply, Meta applies the BUC limit.
Platform rate limits: apps and users
The app formula counts unique daily active users, falling back to weekly and monthly actives when usage is uneven. It is a pool, not a per-user allowance: an app with 100 users can make 20,000 calls an hour, and ten heavy users may spend 19,000 of them.
User limits work the other way. A user's call count covers every app they use, so a person who uses three apps built on the Graph API can be throttled because of the other two. Meta does not reveal the number.
The trap: an internal dashboard with 3 users that reads public Page data with an app token gets about 600 calls an hour. Meta's guide recommends a system user token for the Page Public Content Access feature for exactly this reason.
Business Use Case limits for Pages
With a Page or system user token, the Pages API allows 4,800 calls per 24 hours times the number of people who engaged with that Page in the last 24 hours. A Page with 25 engaged users gets 120,000 calls a day. Meta's guide sets no minimum for Pages, so a quiet Page can have a small budget.
BUC types share quotas. All endpoints in one business use case share one budget, so a heavy insights job can throttle your ads management calls on the same ad account.
Facebook Graph API rate limit headers
Once an endpoint gets enough traffic from your app, responses include a usage header:
x-app-usage: {"call_count": 28, "total_time": 25, "total_cputime": 25}
x-business-use-case-usage: {"PAGE_ID": [{"type": "pages", "call_count": 97,
"total_cputime": 23, "total_time": 23, "estimated_time_to_regain_access": 0}]}
The numbers are percentages of your allowance, not counts. Throttling can start when any of them reaches 100, including CPU time, so a few heavy queries can throttle you before the call count does. estimated_time_to_regain_access is in minutes. The App Dashboard also shows a 7-day graph of Platform rate limit usage.
Error codes when you are throttled
| Code | Meaning |
|---|---|
| 4 | The app has reached its rate limit |
| 17 | The user has reached their rate limit |
| 32 | Pages API call with a user token hit its limit |
| 80001 | Pages API call with a Page or system user token hit its BUC limit |
| 613 | A custom rate limit for that API; subcode 1996 means unusual changes in your call volume |
| 341 | Application limit reached |
| 80000, 80002, 80003, 80004, 80005, 80006 | BUC limits for Ads Insights, Instagram, Custom Audience, Ads Management, LeadGen and Messenger |
Codes are from the rate limiting guide and the error handling guide. They arrive in the JSON error object, so check error.code, not just the HTTP status.
What counts as one call
- One request with
?ids=4,5,6counts as 3 calls. It is still faster than three requests. - A batch request holds up to 50 requests, and each counts separately source.
- A request with nested fields, such as
posts{comments}, is one request, but heavy queries use more of the CPU and time shares shown in the usage header.
How many calls can you really make per day?
An agency dashboard syncs 30 client Pages every hour with Page tokens. Each sync reads the feed (1 call) and comments on the 25 newest posts (25 calls): 26 calls an hour, 624 a day per Page. A Page with 25 engaged users allows 120,000 a day, so the budget is 0.5% used. A Page with 1 engaged user allows 4,800, so the same job uses 13%. Now run the job with one app token on an app with 3 daily users instead: 30 x 26 = 780 calls an hour against a limit of 600. It fails every hour.
Python: slow down before Meta throttles you
import json, time, requests
VERSION = "v27.0" # the Graph API version your app uses
THROTTLE = {4, 17, 32, 341, 613, 80001}
def usage_pct(r):
pct = 0
if "x-app-usage" in r.headers:
pct = max(json.loads(r.headers["x-app-usage"]).values())
if "x-business-use-case-usage" in r.headers:
for items in json.loads(r.headers["x-business-use-case-usage"]).values():
for u in items:
pct = max(pct, u["call_count"], u["total_cputime"], u["total_time"])
return pct
def graph(path, token, **params):
for attempt in range(5):
r = requests.get("https://graph.facebook.com/" + VERSION + "/" + path,
params={**params, "access_token": token}, timeout=30)
body = r.json()
code = body.get("error", {}).get("code")
if code in THROTTLE:
time.sleep(60 * 2 ** attempt) # stop, don't hammer: calls during a block still count
continue
if usage_pct(r) >= 75:
time.sleep(30) # ease off near the limit
return body
raise RuntimeError("throttled for too long")
Meta's own advice: when you hit the limit, stop calling. Calls made while throttled still increase your count and push recovery further out. Set VERSION to the Graph API version your app uses.
How to raise your Facebook API rate limits
- Platform limits have no request form. They grow with your daily active users.
- Pages: switch to a Page or system user token so the BUC formula applies.
- Marketing API: apply for Advanced Access to the Ads Management Standard Access feature in App Review. It raises the base from hundreds to 100,000 or 190,000 calls an hour.
- Spread work evenly, request only the fields you need, and avoid overlapping queries.
When a paid API is simpler
The Graph API works well for Pages you manage. It is a poor fit for reading public posts and comments from Pages that never connected to your app. ScrapeIO allows 300 requests a minute per API key, with no daily or monthly cap beyond the credits you hold. A 429 from ScrapeIO costs nothing, and neither do failed calls, private or not-found answers, or cached repeats.
ScrapeIO's facebook profile posts API, facebook comments API and facebook profile API read public Facebook Pages and posts at 1 credit a call. For public ads, the facebook adlibrary search ads API searches the Ad Library. Agents can use the Facebook MCP server.
FAQ
What is the Facebook Graph API rate limit?
For app tokens, 200 calls per hour times daily active users. For Page tokens on the Pages API, 4,800 calls per 24 hours times engaged users. User-token limits are not published.
Is the limit per hour or per day?
Platform limits use a rolling hour. Pages BUC limits use a rolling 24 hours. Ads limits use a rolling hour.
What is the difference between error 4 and error 17?
Code 4 means your app hit its limit. Code 17 means the user whose token you used hit theirs.
What does error 80001 mean?
Too many calls to that Page with a Page or system user token. Wait; the usage header tells you how long.
How do I check my Graph API usage?
Read the X-App-Usage or X-Business-Use-Case-Usage header, or open the rate limit card in the App Dashboard.
Sources
Checked on 9 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.
- https://developers.facebook.com/docs/graph-api/overview/rate-limiting/
- https://developers.facebook.com/docs/graph-api/guides/error-handling
- https://developers.facebook.com/docs/graph-api/batch-requests
100 free credits, no card. Credits never expire.
Get API key