The /ad_account/ads endpoint has a rate limit of 200 requests per hour per ad account
Facebook's /ad_account/ads Graph API endpoint enforces a rate limit of 200 calls per hour when you query a single ad account. This means if you're pulling ad data from one account, you can make at most 200 requests in any 60-minute window. Once you hit that ceiling, the API returns a rate limit error and rejects further requests until the hour resets.
The limit applies per ad account, not per app or per user. If you're managing multiple ad accounts through the same application, each account gets its own separate 200-request budget. A request that returns no results still counts against your limit, as does a request that returns an error.
Beyond the hourly rate limit, there's also a batch request limit. When you use the batch endpoint to send multiple requests in a single API call, you can include up to 50 requests per batch. Batch requests still count individually against your hourly rate limit — sending a batch of 50 requests uses 50 of your 200 available calls.
Key Takeaways
- The /ad_account/ads endpoint allows 200 requests per hour per ad account, and this limit resets on an hourly basis.
- Each ad account has its own separate rate limit bucket, so managing multiple accounts does not share the same 200-request pool.
- Batch requests can contain up to 50 individual API calls, but each call counts separately against your hourly limit.
- When you exceed the rate limit, Facebook returns an error response with a retry-after header indicating when you can resume requests.
- Requests that fail, return empty results, or hit errors all consume your rate limit quota.
How rate limits work across different API versions
Facebook's rate limiting applies consistently across Graph API versions, but the specific limits can vary depending on which endpoint you're calling and what permissions your app holds. The /ad_account/ads endpoint specifically targets the 200-per-hour ceiling for standard app access.
If your app has been granted higher-tier access through Facebook's business partnership program, you may receive a higher rate limit. This requires a formal request to Facebook and is not automatic. Standard app access — the default for most developers — uses the 200-per-hour limit.
What happens when you exceed the rate limit
When you send a request after exhausting your 200 calls, Facebook returns an HTTP 429 (Too Many Requests) error. The response includes a retry-after header that tells you how many seconds to wait before trying again. Most often this is 3600 seconds (one hour), meaning you must wait until your hourly window resets.
The error response looks like this: a JSON object with an error code of 429 and a message indicating you've hit the rate limit. Your application should check for this error and implement a backoff strategy — either waiting the full hour or queuing requests to send when the limit resets.
Strategies to stay within your rate limit
The most effective approach is to request only the fields you need. By default, the /ad_account/ads endpoint returns a standard set of fields. If you specify only the fields your application actually uses, you reduce the processing cost on Facebook's servers and can sometimes make more efficient use of your quota.
Another strategy is to batch your requests. Instead of making 50 separate API calls to retrieve data for 50 ads, you can send one batch request containing all 50 queries. This still uses 50 of your rate limit calls, but it reduces network overhead and is faster overall.
For ongoing monitoring or reporting, consider caching results locally. If you need to pull the same ad data multiple times per hour, store the results in your own database and refresh on a schedule — perhaps once per hour — rather than querying the API every time you need the information.
If you're building an application that requires more than 200 requests per hour per account, you should contact Facebook directly through your developer account to discuss higher-tier access. Be prepared to explain your use case and expected volume.
How to monitor your rate limit usage
Every response from the Graph API includes rate limit information in the response headers. Look for the x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset headers. The remaining header tells you how many calls you have left in your current window, and the reset header shows the Unix timestamp when your quota refreshes.
Most API client libraries (like the Facebook SDK for Python or JavaScript) parse these headers automatically and make them available in the response object. Check your library's documentation for how to access rate limit data after each call.
Logging these values over time helps you understand your actual usage patterns. If you consistently use 180+ of your 200 calls per hour, you're operating close to your ceiling and should plan for higher limits or optimize your requests.
Differences between ad account limits and other Facebook API endpoints
Facebook applies different rate limits to different endpoints. The Insights API, for example, has its own separate limits. The Marketing API (which includes /ad_account/ads) generally enforces tighter limits than the Graph API's public endpoints, because ad account data is sensitive and high-volume queries can impact system performance.
If you're working with multiple Facebook APIs in the same application, each endpoint has its own rate limit bucket. Hitting the limit on /ad_account/ads does not affect your ability to call other endpoints, and vice versa.
Frequently Asked Questions
Does the 200-request limit reset at a specific time each day, or is it a rolling window?
It's a rolling 60-minute window, not a daily reset. If you make 100 requests between 2:00 PM and 2:30 PM, you have 100 requests remaining until 3:00 PM. At 3:00 PM, your quota resets to 200 again. The limit is based on time elapsed, not calendar days.
If I'm managing ads for multiple clients, does each client's ad account get its own 200-request limit?
Yes. Each ad account has a separate rate limit bucket. If you manage 10 client accounts, you have 200 requests per hour for each of those 10 accounts. However, your application itself must be authorized to access each account, and you must make separate API calls specifying each account ID.
Can I increase my rate limit without contacting Facebook?
No. The 200-per-hour limit is the standard for all apps with regular access. Increasing it requires a formal request through your Facebook developer account, and Facebook reviews these requests based on your use case and business relationship. There's no automatic upgrade path.
Do test or sandbox ad accounts have different rate limits?
Rate limits apply the same way to test accounts as to live accounts. A test ad account still has a 200-per-hour limit on /ad_account/ads requests. This is important to know when you're developing and testing — your test requests count against your quota just like production requests.
What's the difference between the rate limit and the batch size limit?
The batch size limit (50 requests per batch) is a technical constraint on how many queries you can pack into a single API call. The rate limit (200 per hour) is how many total requests you can make in a time window. You can send 4 batches of 50 requests each, which uses all 200 of your hourly calls.