Google Ads search terms report
The actual search queries that triggered your ads, with matched-keyword
status and spend metrics, the raw material for wasted-spend analysis and
negative-keyword lists. Reads Google's search_term_view, cached for
the quota window; defaults to the last 30 days. Rows are ordered by
cost, descending. Draws on the shared Google Ads operations budget.
The response carries cachedAt and stale, set when a quota-exhausted
call falls back to the last-good copy instead of a live read.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Query Parameters
Google ads SocialAccount id.
Numeric Google Ads customer id (no dashes). Defaults to the account's connected customer.
Defaults to 30 days ago.
dateDefaults to today.
dateNumeric Google campaign id filter.
Numeric Google ad group id filter.
Cursor from paging.nextPageToken of the previous page.
Response Body
application/json
application/json
application/json
application/json
application/json
{ "customerId": "string", "data": [ { "searchTerm": "string", "status": "string", "matchType": "string", "campaignId": "string", "campaignName": "string", "adGroupId": "string", "adGroupName": "string", "impressions": 0, "clicks": 0, "costMicros": 0, "conversions": 0, "conversionsValue": 0 } ], "paging": { "nextPageToken": "string" }, "cachedAt": "2019-08-24T14:15:22Z", "stale": true}Poll an async insights report run
Status and results for a report run created via POST /v1/ads/insights/reports. While the job runs, returns `status` and `percentCompletion`. Once `status` is "Job Completed" the response also carries a `data` page, cursor-paginated via `limit` / `after`.
Get campaign analytics
Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.