how a call runs
what it reaches
Google Ads API v25
server to server · straight to the platform’s API
access granted once · OAuth · scoped to this account
no browser session · no password sharing · no scraping
what you get
read-only by default · Every question is answered without touching the account. Changing anything is a separate, deliberate step with its own guards, its own record and its own way back.
a machine identity that cannot fall back to a person · A scheduled report runs under its own identity, checked before it connects. It never borrows a person's login and it never runs with more access than it was given.
an approval a machine cannot forge · A change that cannot be undone waits for a person to approve it, from a tool only they can run, and the approval expires in minutes. A ticked box in a prompt proves nothing; this does.
| tool | type of access | what it does | why it exists |
|---|---|---|---|
| campaigns.list | reads only | lists every campaign with status and budget | the starting inventory for any question |
| performance.pull | reads only | pulls spend and results by day or campaign | the numbers behind the weekly answer |
| search_terms.report | reads only | surfaces the words people typed before clicking | intent straight from the account |
| change_history.read | reads only | reads who changed what and when | the account’s own paper trail |
| campaign.pause | changes or removes | stops delivery once you approve | stops spend when a problem is found, with your approval on record |
| budget.set | changes or removes | moves a daily budget once you approve | moves money deliberately, with the before and after on record |
covers
19 of the 169 methods in the Google Ads API v25 in full, and 101 more as bounded surfaces. Not covered: 38 that wait on a permission the vendor has to grant, 2 the vendor does not publicly expose, and 9 deferred by design, most of them to the server that owns that job.
how it operates · alone, or with the rest of the fleet
alone
daily spend answers and a change history on demand
01
you ask · “Which campaigns earned their spend last month?”
02
it picks · the campaign-results read and the search-terms read · nothing that changes anything
03
comes back · spend, results, and the search terms that drove them, per campaign
04
lands · one plain-words readout in the session · every line traceable to the account
with GA4
Google Ads reports what it was paid for. GA4 records what visitors did after the click. Read together, a platform claim is checked against the behaviour on your own site, so over-claiming shows up as a gap instead of a success.
01
you ask · “Did last month’s conversions really happen on the site?”
02
it picks · the campaign-results read in Google Ads and the key-event read in GA4, over the same dates and clock · reads only
03
comes back · conversions as the platform claims them, beside the sessions and purchases the site recorded
04
lands · one readout per campaign · where the two agree, and where the claim is larger than the record
with Merchant Center
A shopping campaign can only sell what the feed lists as sellable. Read together, spend on a campaign is set beside the rejections and price mismatches in the feed behind it, so money pointed at products that cannot sell is found by name.
01
you ask · “Is shopping spend going to products that cannot sell?”
02
it picks · the campaign-results read in Google Ads and the product-status read in Merchant Center · reads only
03
comes back · spend per shopping campaign, beside the rejected and mismatched products in the feed behind it
04
lands · the products that took spend while refused, named · nothing paused without your yes
