Skip to main content

Google Ads

Read a Google Ads account - campaigns, ad groups, ads, keywords, search terms, budgets, conversion actions and lead form submissions, plus raw GAQL - and pause, enable or re-budget what is running.

Connect a Google Ads account with its own OAuth client, refresh token and developer token to report on and steer advertising: list the accounts the credentials reach, read campaigns, ad groups, ads, keywords and search terms with performance over a date range, inspect budgets and conversion actions, pull lead form submissions, and run any GAQL query the typed tools do not cover. Writes are deliberately narrow: enable or pause a campaign or ad group, and change a budget's daily amount. Money is handled in Google's micros with a major-unit sibling on every read, and the one write that takes an amount takes it in the account's currency. Every metrics tool reports the window it applied - without a date range Google returns LIFETIME numbers, which is a different question. Campaign removal, and creating campaigns, ads or keywords, are not offered. Calls use API v18, pinned by this integration.

Connect

Credential fieldRequiredWhere it comes from
Developer token (DEVELOPER_TOKEN)YesFrom your MANAGER account's API Center in Google Ads (not from Google Cloud). Its ACCESS LEVEL is a separate gate from OAuth: a Test Account token can only reach test accounts, and against a live account every call fails with a message that does not mention access levels.
OAuth client id (CLIENT_ID)YesFrom an OAuth client (Desktop app type) in your own Google Cloud project, with the Google Ads API enabled.
OAuth client secret (CLIENT_SECRET)YesFrom the same Google Cloud console screen as the client id.
Refresh token (REFRESH_TOKEN)YesMinted once by authorizing that OAuth client for the https://www.googleapis.com/auth/adwords scope. Publish the Cloud project's consent screen first - refresh tokens minted while it is in Testing expire after seven days. It belongs to the Google user who authorized it, and every change is attributed to them.
SettingRequiredWhat it is
Manager (login) customer id (LOGIN_CUSTOMER_ID)NoThe ten-digit id of the manager (MCC) account to act through, needed whenever the accounts being worked on are managed by one. Dashes are fine - they are stripped. Leave empty if the authorizing user has direct access to the accounts.

Tools

ToolAccessWhat it does
List accessible customers (yekar.google-ads.list-accessible-customers)ReadThe Google Ads accounts this connection's credentials can reach directly, as digit-only customer ids. Call this first: everything else takes a customer id, and this is the only way to learn which ones the token actually has. Accounts nested under a manager are NOT listed here - the note says how to enumerate those.
Get account (yekar.google-ads.get-customer)ReadOne Google Ads account's name, currency, time zone and type. Two flags matter more than they look: isManager accounts hold no campaigns of their own, and isTestAccount accounts never serve or spend - a test-level developer token can reach only those, so an account that looks empty may simply be the wrong one.
Search (GAQL) (yekar.google-ads.search)ReadRun any Google Ads Query Language query against an account and get the rows back. Use this for anything the typed report tools do not cover - Google Ads has hundreds of resources. Values are normalized: int64s arrive as real numbers rather than strings, and every micros field gains a major-unit sibling (costMicros → cost). Ask for a total only when you need one; it is extra work Google charges for.
List campaigns (yekar.google-ads.list-campaigns)ReadCampaigns in an account with their status, channel, budget and performance. Give a date range for recent performance - without one the metrics are LIFETIME totals, which is a different question. Costs come back both as micros (as stored) and in the account's currency.
List ad groups (yekar.google-ads.list-ad-groups)ReadAd groups in an account or one campaign, with status, bids and performance. As with campaigns, no date range means LIFETIME metrics rather than recent ones.
List ads (yekar.google-ads.list-ads)ReadThe ads in an account, ad group or campaign, with their type, final URLs, approval status and performance. Responsive search ads carry their headlines and descriptions as asset lists rather than single strings - the rows keep that shape.
List keywords (yekar.google-ads.list-keywords)ReadKeyword criteria in an account, ad group or campaign, with match type, bids, quality score and performance. Positive and NEGATIVE keywords live in the same resource and are told apart by the negative flag - a negative keyword blocks traffic and legitimately shows zero metrics, which is not the same as underperforming.
List search terms (yekar.google-ads.list-search-terms)ReadWhat people actually typed before an ad served, with the keyword each matched and the resulting performance. Google withholds low-volume terms for privacy, so these rows deliberately do NOT sum to the campaign's totals - the difference is Google's redaction, not missing data.
List campaign budgets (yekar.google-ads.list-budgets)ReadThe campaign budgets in an account, with their daily amount, delivery method and how many campaigns each serves. Read this before changing a budget: a shared budget's change lands on every campaign referencing it.
List conversion actions (yekar.google-ads.list-conversion-actions)ReadWhat this account counts as a conversion, with each action's category, status, counting rule and value. Read this before interpreting any conversions metric: only actions marked primary contribute to the conversions column in the other reports.
List lead form submissions (yekar.google-ads.list-lead-form-submissions)ReadLeads submitted through Google Ads lead form extensions, with the submitted field values and the campaign, ad group and ad that produced each. Google keeps this data for 30 days only - an empty result for an older window means it has been deleted, not that nobody submitted.
Set campaign status (yekar.google-ads.update-campaign-status)WriteEnable or pause a campaign. Enabling resumes spending at once. Removal is deliberately not offered - in Google Ads it is permanent and a removed campaign can never be brought back, so pausing is the reversible way to stop a campaign.
Set ad group status (yekar.google-ads.update-ad-group-status)WriteEnable or pause an ad group. Note the parent rule: an enabled ad group under a paused campaign still serves nothing, and Google reports no error for that combination - so verify the campaign as well.
Set campaign budget (yekar.google-ads.update-campaign-budget)WriteChange a campaign budget's daily amount, given in the account's own currency (the conversion to Google's micros happens here - do not pre-multiply). Check List campaign budgets first: a shared budget's change lands on every campaign using it. Google treats a daily budget as an average and may spend up to twice it on a single day.

Notes

  • You need THREE things from Google, from two different places. First, in Google Ads: open your MANAGER (MCC) account → Tools & settings → API Center and copy the developer token. Check its access level there - a Test Account token can only reach test accounts, and against a real account every call fails.
  • Second, in Google Cloud console: create (or pick) a project, enable the Google Ads API, configure the OAuth consent screen and PUBLISH it - while it is in Testing, refresh tokens expire after seven days - then create an OAuth client of type Desktop app and copy its client id and secret.
  • Third, authorize that client once for the scope https://www.googleapis.com/auth/adwords as the Google user whose Ads access Yekar.AI should have, and keep the refresh token it returns. Google's own generate_user_credentials script or the OAuth Playground (with "Use your own OAuth credentials") both do this.
  • Paste all four values here. If your accounts sit under a manager account, also set Manager (login) customer id to that manager's ten-digit id - without it a managed account fails as a permission problem rather than a missing setting.
  • Call List accessible customers, then Get account, to confirm what the credentials reach and whether it is a test account. Every change Yekar.AI makes will appear in Google Ads' change history under the user who authorized the refresh token.