Media & Limits
Media requirements, quotas, and what you can't do
Media Requirements
| Type | Format | Max Size | Notes |
|---|---|---|---|
| Responsive Search Ad | Text | 15 headlines / 4 descriptions | 30/90 chars |
| Responsive Display (landscape) | JPEG, PNG | 5120 KB | 1.91:1, 1200x628 recommended. Required. |
| Responsive Display (square) | JPEG, PNG | 5120 KB | 1:1, 1080x1080 recommended. Required. |
| Keyword | Text | 80 chars | BROAD, PHRASE, EXACT |
Quotas and the ops budget
Every Google Ads API call across all Zernio customers shares one developer-token quota, which the background sync also lives off. User-driven live reads (GAQL, Keyword Planner, tracking-tag audits) are therefore metered per user:
| Window | Default |
|---|---|
| Per user, per minute | 15 ops |
| Per user, per day | 500 ops |
Hitting a window returns a clean 429; daily windows reset at midnight Pacific (when Google resets its own quota). The limits are generous for interactive use; if you're planning sustained high-volume pulls (bulk tag audits, scheduled GAQL sweeps), talk to us first and we'll provision for it.
What You Can't Do
- Create conversion-goal, Performance Max, Shopping, Video, or Demand Gen campaigns via
/v1/ads/create(Search and Display only). Discovered campaigns of every type still sync into/ads/treewith metrics. - Run a Responsive Display Ad with one image (Google requires landscape AND square)
- Write GAQL (the passthrough is read-only
SELECT) - Select
segments.datewithout a finite date filter (Google rejects it) - See campaign-level negative keywords on
GET /v1/ads/keywords(ad-group-level only; query GAQL for the rest) - Expect same-day keyword sync: the synced keyword list refreshes about weekly per customer
- Phone-number matching on Customer Match (email only;
phoneis ignored) - See conversions instantly (Data Manager conversions take up to 3 hours to appear in reports)
Common Errors
| Error | Where | Meaning + fix |
|---|---|---|
NOT_ENOUGH_SQUARE_MARKETING_IMAGE_ASSET / NOT_ENOUGH_MARKETING_IMAGE_ASSET | Display create | Missing one of the two required images. Pass both images.landscape and images.square. |
400 carrying a GAQL message | GAQL passthrough | Google's query validator, verbatim, and its messages name the offending field. The classic: unbounded segments.date. |
429 | GAQL / Keyword Planner / tag audits | You hit the per-user ops budget window. Back off; daily reset is midnight Pacific. |
| Int64 fields look like strings | Any Google read | Not an error: Google encodes counters as strings. Parse before doing math; monetary fields are micros. |
Version Migrations
Google Ads API ships v22, v23, v24... twice a year with breaking changes. Zernio absorbs these at our layer, so your integration keeps working without code changes.