specification: API Commons Rate Limits specificationVersion: '0.1' schema: https://raw.githubusercontent.com/api-evangelist/interface-research/main/schema/api-commons.yml#/$defs/RateLimits provider: Google Campaign Manager providerId: google-campaign-manager generated: '2026-08-13' created: '2026-05-04' modified: '2026-08-13' method: searched source: https://developers.google.com/doubleclick-advertisers/quotas tags: - Advertising - Campaign Management - Rate Limiting - Quotas - Throttling description: >- Published quotas for the Campaign Manager 360 API, read from Google's own quotas page. Two things make this API unusual and both matter more than the numbers: exhaustion is reported as HTTP 403 rather than 429, and NO rate-limit headers are returned at all — a client is given no runtime budget signal and must infer throttling from an error reason string. headers: limit: null remaining: null reset: null retryAfter: null policy: null note: >- None documented on the quotas page and none observed on live responses. This supersedes a 2026-05-04 scaffold that asserted X-RateLimit-* and Retry-After headers this API does not send. responseCodes: throttled: 403 note: >- There is no 429 anywhere in this API. A client that branches on 429 will silently mis-handle every Campaign Manager 360 quota event. error_reasons: - reason: dailyLimitExceeded message: Daily Limit Exceeded meaning: The project's daily request budget is spent. - reason: userRateLimitExceeded message: User Rate Limit Exceeded meaning: The per-second query rate was exceeded. - reason: quotaExceeded message: varies meaning: >- An account-level object quota was hit — number of accounts, user profiles or scheduled reports. limits: - name: Daily requests scope: per-project window: day limit: 50000 unit: requests resets: midnight PST increasable: true increase_path: Google API Console quota request source: https://developers.google.com/doubleclick-advertisers/quotas - name: Query rate scope: per-project window: second limit: 1 unit: queries burst: null console_display: 60 queries per minute per user maximum: 600 maximum_unit: queries per minute maximum_note: 600 per minute is 10 QPS, the highest rate Google will grant. increasable: true source: https://developers.google.com/doubleclick-advertisers/quotas - name: Report Builder / account object quotas scope: per-account window: n/a limit: null unit: objects note: >- Account-specific limits apply to accounts, user profiles and scheduled reports; Google does not publish the numbers, pointing to Campaign Manager support instead. Exhaustion surfaces as 403 quotaExceeded. source: https://developers.google.com/doubleclick-advertisers/quotas retry: strategy: exponential backoff retry_after_header: false guidance: - Google advises against making concurrent write requests. - Google advises against exceeding 10 QPS even where quota allows it. note: >- Because no Retry-After is returned, the backoff schedule is entirely the client's responsibility. Retrying a dailyLimitExceeded before midnight PST cannot succeed. attribution: parameter: quotaUser note: >- An arbitrary caller-supplied string used to attribute per-user quota when there is no authenticated end user. It shapes throttling, not tracing. limit_count: 3 evidence: - url: https://developers.google.com/doubleclick-advertisers/quotas status: 200 checked: '2026-08-13' - url: https://dfareporting.googleapis.com/dfareporting/v5/userprofiles status: 401 checked: '2026-08-13' finding: No RateLimit-* or Retry-After header present on a live response.