Essentials

Rate limits

The per-minute budget, what each call spends, and how to handle a 429.

The per-minute budget

Each plan gets a number of requests a minute: 60 on Grow, 300 on Scale, 600 on Custom. The budget belongs to whoever bought the plan — one workspace, or the account covering several — so keys and MCP connections under it share a single allowance rather than each getting their own.

Every REST response carries what is left:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 52

The window slides: it counts the requests of the last 60 seconds, not of the current clock minute, so a burst at the top of a minute can’t double the allowance.

Heavier reads cost more

A handful of endpoints read a project’s whole history to answer, so they spend more than one unit of the budget. Everything else costs 1.

EndpointUnits
Get impact5
Get competitor analysis3
Get engine detail3
Get visibility trend2
List gaps2
Everything else1

The same costs apply to the matching MCP tools. On Grow that means about 12 impact reads a minute — which is far more than a sensible client needs, because impact only changes when a run finishes.

Handling a 429

Over the budget, the API answers 429 with error.code of rate_limited and a Retry-Afterheader in seconds. A refused request doesn’t spend anything.

import time

import requests


def get(path, **params):
    for attempt in range(5):
        response = requests.get(f"{BASE}{path}", params=params, headers=AUTH, timeout=30)
        if response.status_code == 429:
            time.sleep(int(response.headers.get("Retry-After", "5")))
            continue
        response.raise_for_status()
        return response.json()
    raise RuntimeError("rate limited five times in a row")
429 rate_limited is the only error worth retrying unchanged. A 402 or a 403 will answer the same way until something changes on the plan, and retrying them in a loop just spends your budget.

The other limits

  • Drafting: at most 10 draft generations a minute per workspace, counting the ones started from the dashboard. Over that, the answer is 429 — with no Retry-After, so wait a minute.
  • Exports: 20 a day per workspace, and one at a time per project. Asking again while one is running returns the job already in flight.
  • Pages: page_size is capped at 100 rows.
  • Prompts:50 per call to add, and the plan’s prompt limit applies to the batch as a whole.