How Ads API Throttling Actually Works #
The Amazon Ads API throttles with a token bucket, per endpoint — not one global limit for your whole app. Each endpoint has a bucket with a maximum capacity and a steady refill rate. Every request spends a token; when the bucket is empty, you get:
HTTP 429 Too Many Requests
Update, October 2026: Amazon's rate-limiting page doesn't describe per-endpoint buckets. It says limits are dynamic and based on system load, and that report limits depend on the regional report queue, so it recommends spreading report requests through the day and backing off for longer. Read the token-bucket picture below as a model for pacing, not as Amazon's stated mechanism; the 429, the Retry-After header and exponential backoff are Amazon's.
Because buckets are per-endpoint in this model, hammering the reports endpoint won't throttle your campaign-read calls, and vice versa. This matters: the fix is rarely "request a higher limit" — it's spreading and pacing requests so no single bucket runs dry.
Key mental model: a burst of requests can drain a bucket instantly even if your average rate is well under the limit. Smoothing bursts matters more than lowering total volume.
Read the Headers Before You Retry #
When you get a 429, the response tells you what to do. Respect the Retry-After header — it's the number of seconds to wait before trying again. Blindly retrying without reading it is how a small blip becomes a throttle spiral.
- Retry-After — wait at least this long before re-sending.
- Non-2xx bodies often include a descriptive code; log them so you can tell a 429 (rate) from a 403 (permissions) from a 400 (bad request).
The Retry Mistake That Makes It Worse #
The classic failure: catch a 429, retry immediately in a tight loop. Now you're draining the bucket faster than it refills, and if several workers do it at once you get a thundering herd. Use exponential backoff with jitter:
delay = min(base * 2 ** attempt, max_delay) delay = delay * (0.5 + random()) # jitter avoids synchronized retries sleep(delay)
Honor Retry-After when present, and cap attempts so a persistently failing call fails loudly instead of looping forever.
Use Async v3 Reporting, Not Polling Everything #
The v3 reporting endpoints are asynchronous: you request a report, then poll for completion, then download. The throttle magnet is the polling step — teams poll every second and drain the bucket. Poll with backoff (e.g., 10s, then 20s, then 30s), not in a tight loop, and download once the status is complete.
Related: the same async-then-download shape trips people up on the seller side too — see The SP-API Reports Pattern Everyone Gets Wrong. If you run this across many seller accounts, dedicated egress IPs matter as much as pacing does.
Design So You Rarely Hit the Limit #
The durable fix is architectural, not more retries:
- Cache what doesn't change — profile IDs, portfolio lists, campaign metadata. Don't re-fetch them every run.
- Request only the data you need — narrower report types and date ranges cost fewer calls.
- Spread jobs over time — stagger multi-account pulls instead of firing them all at the top of the hour.
- Use Marketing Stream for hourly metrics — instead of polling reports every hour, let Amazon push hourly data to you. It sidesteps the reporting buckets entirely.
Drowning in throttles across many accounts? Multi-account pacing and pipelines are a specialty — see how I set up Ads API integrations that stay under the limits.
FAQ #
Is the Ads API rate limit per app or per endpoint?
Amazon doesn't publish it either way. Its rate-limiting page says limits are dynamic and based on system load, and that report limits depend on the size of the regional report queue. In practice, throttling on one operation hasn't throttled the others in my integrations, so pace each hot endpoint independently and always obey Retry-After.
What should I do when I get a 429?
Read the Retry-After header and wait that long, then retry with exponential backoff and jitter. Never retry immediately in a loop.
Can I ask Amazon to raise my rate limit?
Sometimes, but it's rarely the real fix. Most throttling comes from bursty requests or tight polling loops. Smooth your traffic first; a limit increase is a last resort.
Does Marketing Stream have the same limits?
No — Marketing Stream is push-based. Amazon delivers hourly data into your AWS, so you're not polling and not consuming reporting-endpoint tokens at all.
Do the same limits apply through the Ads MCP server?
Yes. MCP is a access layer over the same API, so the throttling behaves identically — and an agent fanning out across tools can hit it faster than a person clicking through a console. See connecting Claude to Amazon Ads MCP for how that surface is put together.
Related guides
Amazon Ads API
Custom PPC Automation vs Pacvue & Perpetua: an Honest Comparison
I build custom Amazon PPC automation for a living and I still tell most people to buy the SaaS. Here's a straight comparison of custom builds versus tools like Pacvue and Perpetua — what each does better, the real cost math, and how to tell which side of the line you're actually on.
Read guide →Amazon Ads API
AMS vs AMC: Which Amazon Ad Data Tool to Use, and When
Amazon Marketing Stream and Amazon Marketing Cloud both start with “Amazon Marketing” and both deal with ad data — so they get mixed up constantly. They actually solve opposite problems. One pushes you hourly data for real-time action; the other runs SQL over years of history for attribution. Here's the difference, side by side, and how to pick.
Read guide →Amazon Ads API
Amazon Marketing Stream Setup: Hourly Ad Data via Firehose in Python
Stop polling the Reports API. Amazon Marketing Stream pushes hourly Sponsored Products, Sponsored Brands, and Sponsored Display data directly into your AWS infrastructure — no cron jobs, no throttling. Here's the full setup: Firehose stream, IAM roles, the subscription API call, and what the data looks like when it lands.
Read guide →Running PPC across several accounts?
I built a dayparting control room that runs hourly across a PPC manager's client accounts: rules, dry runs, approvals and an audit log. Tell me what your tooling can't do and I'll quote the build at a fixed price.