Google Ads data API: campaigns, metrics and billing
Google Ads is Google LLC's official Android companion to its pay-per-click advertising platform, the service formerly called AdWords, built for advertisers, small-business owners and agencies who need to manage campaigns away from a desk. After Google-account sign-in, an account picker lists every Ads customer account the user can open, including the manager accounts agencies use to run many clients, and the home screen lists each campaign with its type, status, budget and spend. From there users can launch a new Search, Smart or Performance Max campaign in a creation wizard, either from scratch or with AI Max and Gemini assistance, follow daily performance on the analytics tab, edit keywords and bids, accept or dismiss Optimization recommendations such as budget raises, set up conversion tracking with a chosen attribution model, review the search terms that actually triggered their ads, scroll the change history of who edited budgets, keywords and ads, and check billing and spending limits. Listed on the US Play Store, it is the mobile front end of Google's search-advertising business and competes for paid-media budgets with Microsoft Advertising and Meta's Ads Manager.
Campaign budgets and spend are denominated in micros, millionths of the account currency (amountMicros, costMicros, cpcBidMicros), and roll up to customer accounts keyed by customerId with descriptiveName, currencyCode, timeZone, an optimizationScore and a manager flag that marks agency roll-up accounts. Campaign records carry advertisingChannelType (Search, Smart, Performance Max), advertisingChannelSubType and biddingStrategyType, while daily metric rows add impressions, clicks, ctr, averageCpc, conversions and conversionsValue per date.
Under each ad group (adGroupId) sit keyword rows with text, matchType, qualityScore and creativeQualityScore, next to a search-terms report of the real queries (searchTerm, searchTermMatchType) that triggered ads, with their clicks, cost and conversions. Optimization recommendations expose currentAmountMicros against recommendedAmountMicros with projected baseMetrics and potentialMetrics; conversion actions record countingType, attributionModel (data-driven, last-click, first-click, linear, time-decay, position-based) and primaryForGoal; billing setups carry paymentsAccountId, paymentsAccountName and spendingLimitMicros; and the change-history feed logs every edit with changeDateTime, userEmail, clientType and the oldResource / newResource pair.
Agencies page per-customer campaign metrics into the same daily spend cube as their other paid channels; keyword-ops bots mine converting search terms that are still unmatched exact keywords; budget-pacing services post a newAmountMicros budget raise once projected conversions clear a threshold, the same path as the in-app recommendation card; and finance teams reconcile monthly invoices against the payments account and spending limit on the billing screen. openData Studio turns this Google Ads account, campaign and billing data into callable open data for exactly those integrations.
Screenshots
API surface
Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.
List accessible customers
GET
/v1/customers:listAccessibleopendataReturns every Google Ads customer the signed-in Google account can open, filling the account-picker before the home campaign list.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope). Issued after Google-account SSO on the device.
- resourceNames
- resourceName
- customerId
- descriptiveName
- currencyCode
- timeZone
- manager
- testAccount
- status
GET /v1/customers:listAccessible HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "resourceNames": [ "customers/1234567890", "customers/9876543210" ], "customers": [ { "resourceName": "customers/1234567890", "customerId": "1234567890", "descriptiveName": "Northwind Retail — Brand", "currencyCode": "USD", "timeZone": "America/New_York", "manager": false, "testAccount": false, "status": "ENABLED" } ] }Get customer account
GET
/v1/customers/{customerId}opendataLoads the selected customer header — name, currency, timezone and optimization score — shown above the campaign list.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- resourceName
- customerId
- descriptiveName
- currencyCode
- timeZone
- autoTaggingEnabled
- optimizationScore
- status
- trackingUrlTemplate
GET /v1/customers/1234567890 HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "resourceName": "customers/1234567890", "customerId": "1234567890", "descriptiveName": "Northwind Retail — Brand", "currencyCode": "USD", "timeZone": "America/New_York", "autoTaggingEnabled": true, "optimizationScore": 0.82, "status": "ENABLED", "trackingUrlTemplate": "{lpurl}?utm_source=google&utm_medium=cpc" }Search campaigns
POST
/v1/customers/{customerId}/campaigns:searchopendataPages the home campaign list with type (Search / Smart / Performance Max), status, budget and a spend snapshot.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- campaign
- id
- name
- status
- advertisingChannelType
- advertisingChannelSubType
- biddingStrategyType
- campaignBudget
- amountMicros
- impressions
- clicks
- costMicros
- nextPageToken
POST /v1/customers/1234567890/campaigns:search HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Content-Type: application/json { "pageSize": 50, "pageToken": "", "status": ["ENABLED", "PAUSED"], "advertisingChannelType": ["SEARCH", "PERFORMANCE_MAX", "SMART"] }{ "results": [ { "campaign": { "resourceName": "customers/1234567890/campaigns/111222333", "id": "111222333", "name": "Brand — US Search", "status": "ENABLED", "advertisingChannelType": "SEARCH", "advertisingChannelSubType": "SEARCH_MOBILE_APP", "biddingStrategyType": "MAXIMIZE_CONVERSIONS", "campaignBudget": "customers/1234567890/campaignBudgets/555", "amountMicros": "50000000" }, "metrics": { "impressions": "58230", "clicks": "1987", "costMicros": "412100000" } } ], "nextPageToken": "CgQItoED" }Campaign performance metrics
POST
/v1/customers/{customerId}/reports/campaignMetricsopendataReads the analytics tab: daily impressions, clicks, CTR, average CPC, costMicros and conversions for one campaign.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- campaignId
- currencyCode
- date
- impressions
- clicks
- ctr
- averageCpc
- costMicros
- conversions
- conversionsValue
- allConversions
POST /v1/customers/1234567890/reports/campaignMetrics HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Content-Type: application/json { "campaignId": "111222333", "dateRange": {"startDate": "2026-09-21", "endDate": "2026-09-27"}, "segments": ["date"] }{ "campaignId": "111222333", "currencyCode": "USD", "rows": [ { "date": "2026-09-27", "impressions": "9102", "clicks": "311", "ctr": 0.0342, "averageCpc": "2070000", "costMicros": "64377000", "conversions": 18.5, "conversionsValue": 842.10, "allConversions": 21.0 } ] }Search keywords
POST
/v1/customers/{customerId}/keywords:searchopendataLists keywords for a campaign with match type, quality score, CPC bid and spend — the keyword-construction screen.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- criterionId
- adGroupId
- keyword
- text
- matchType
- status
- qualityScore
- creativeQualityScore
- cpcBidMicros
- impressions
- clicks
- costMicros
POST /v1/customers/1234567890/keywords:search HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Content-Type: application/json { "campaignId": "111222333", "pageSize": 50, "matchType": ["EXACT", "PHRASE", "BROAD"] }{ "results": [ { "criterionId": "3344556677", "adGroupId": "888999000", "keyword": {"text": "running shoes", "matchType": "EXACT"}, "status": "ENABLED", "qualityInfo": {"qualityScore": 8, "creativeQualityScore": "ABOVE_AVERAGE"}, "cpcBidMicros": "1500000", "metrics": {"impressions": "12040", "clicks": "402", "costMicros": "60300000"} } ] }List recommendations
GET
/v1/customers/{customerId}/recommendationsopendataLoads Optimization recommendations (raise budget, raise/lower bid, reallocation) shown on the recommendations tab.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- resourceName
- type
- campaignBudgetRecommendation
- currentAmountMicros
- recommendedAmountMicros
- impact
- baseMetrics
- potentialMetrics
- dismissed
GET /v1/customers/1234567890/recommendations?pageSize=20 HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "results": [ { "resourceName": "customers/1234567890/recommendations/rec-raise-budget-01", "type": "CAMPAIGN_BUDGET", "campaignBudgetRecommendation": { "currentAmountMicros": "50000000", "recommendedAmountMicros": "75000000" }, "impact": { "baseMetrics": {"clicks": 1987, "conversions": 63.0}, "potentialMetrics": {"clicks": 2610, "conversions": 81.0} }, "dismissed": false } ] }Apply recommendation
POST
/v1/customers/{customerId}/recommendations:applyopendataApplies a recommendation (for example a budget raise) so the change lands on the live campaign from the phone.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- resourceName
- applyParameters
- newAmountMicros
- applied
- campaignBudget
- amountMicros
POST /v1/customers/1234567890/recommendations:apply HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Content-Type: application/json { "resourceName": "customers/1234567890/recommendations/rec-raise-budget-01", "applyParameters": { "campaignBudget": {"newAmountMicros": "75000000"} } }{ "results": [ { "resourceName": "customers/1234567890/recommendations/rec-raise-budget-01", "applied": true, "campaignBudget": { "resourceName": "customers/1234567890/campaignBudgets/555", "amountMicros": "75000000" } } ] }Read billing setup
GET
/v1/customers/{customerId}/billingSetupsopenfinanceLoads the billing screen: payments account, spending limit and setup status behind check-billing.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope). Billing writes additionally open the on-device Google payments account manager.
- resourceName
- status
- paymentsAccountId
- paymentsAccountName
- paymentsProfileId
- secondaryPaymentsAccountId
- endTimeType
- spendingLimitMicros
- currencyCode
GET /v1/customers/1234567890/billingSetups HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "results": [ { "resourceName": "customers/1234567890/billingSetups/42", "status": "APPROVED", "paymentsAccountId": "1234-5678-9012", "paymentsAccountName": "Northwind Retail Ads", "paymentsProfileId": "1234-5678", "secondaryPaymentsAccountId": null, "endTimeType": "FOREVER", "spendingLimitMicros": "1000000000", "currencyCode": "USD" } ] }List conversion actions
GET
/v1/customers/{customerId}/conversionActionsopendataLists conversion actions and their attribution model (data-driven, last-click, first-click, linear, time-decay, position-based) for the conversion-tracking screen.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- resourceName
- id
- name
- status
- type
- category
- countingType
- attributionModel
- defaultValue
- alwaysUseDefaultValue
- primaryForGoal
GET /v1/customers/1234567890/conversionActions HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "results": [ { "resourceName": "customers/1234567890/conversionActions/7001", "id": "7001", "name": "Purchase", "status": "ENABLED", "type": "WEBPAGE", "category": "PURCHASE", "countingType": "ONE_PER_CLICK", "attributionModelSettings": {"attributionModel": "GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN"}, "valueSettings": {"defaultValue": 42.0, "alwaysUseDefaultValue": false}, "primaryForGoal": true } ] }Read change history
GET
/v1/customers/{customerId}/changeEventsopendataPages the change-history feed of who edited budgets, keywords and ads from the mobile client.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- resourceName
- changeDateTime
- userEmail
- clientType
- changeResourceType
- changeResourceName
- resourceChangeOperation
- oldResource
- newResource
GET /v1/customers/1234567890/changeEvents?pageSize=25 HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "results": [ { "resourceName": "customers/1234567890/changeEvents/20260927-184422", "changeDateTime": "2026-09-27 18:44:22", "userEmail": "[email protected]", "clientType": "GOOGLE_ADS_MOBILE_APP", "changeResourceType": "CAMPAIGN_BUDGET", "changeResourceName": "customers/1234567890/campaignBudgets/555", "resourceChangeOperation": "UPDATE", "oldResource": {"campaignBudget": {"amountMicros": "50000000"}}, "newResource": {"campaignBudget": {"amountMicros": "75000000"}} } ] }Search terms report
GET
/v1/customers/{customerId}/searchTermsopendataReturns the search-terms report: the actual queries that triggered ads, with match type and performance.
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- searchTerm
- searchTermMatchType
- status
- campaignId
- adGroupId
- impressions
- clicks
- costMicros
- conversions
GET /v1/customers/1234567890/searchTerms?campaignId=111222333&pageSize=50 HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Accept: application/json{ "results": [ { "searchTerm": "buy running shoes online", "searchTermMatchType": "BROAD", "status": "NONE", "campaignId": "111222333", "adGroupId": "888999000", "impressions": "640", "clicks": "28", "costMicros": "4200000", "conversions": 2.0 } ] }Create campaign
POST
/v1/customers/{customerId}/campaigns:createopendataCreates a Search, Smart or Performance Max campaign from the in-app creation wizard (from scratch or with AI Max / Gemini).
Auth: OAuth2 Bearer access token from the signed-in Google account (Ads scope).
- campaign
- id
- name
- status
- advertisingChannelType
- biddingStrategyType
- amountMicros
- createWithAi
- resourceName
POST /v1/customers/1234567890/campaigns:create HTTP/1.1 Authorization: Bearer <google-oauth2-access-token> Content-Type: application/json { "campaign": { "name": "PMax — Fall catalog", "status": "PAUSED", "advertisingChannelType": "PERFORMANCE_MAX", "biddingStrategyType": "MAXIMIZE_CONVERSION_VALUE", "amountMicros": "40000000", "createWithAi": true } }{ "campaign": { "resourceName": "customers/1234567890/campaigns/444555666", "id": "444555666", "name": "PMax — Fall catalog", "status": "PAUSED", "advertisingChannelType": "PERFORMANCE_MAX", "biddingStrategyType": "MAXIMIZE_CONVERSION_VALUE", "amountMicros": "40000000" } }
Data categories
- customers
- campaigns
- metrics
- keywords
- recommendations
- billing
- conversions
- change history
- search terms
Where teams use this data
Cross-channel spend dashboard
An agency BI job pages POST /v1/customers/{customerId}/reports/campaignMetrics (impressions, clicks, ctr, costMicros, conversions) per customer from GET /v1/customers:listAccessible and folds Google spend into the same daily cube as other paid channels.
Search-term mining
A keyword ops bot reads GET /v1/customers/{customerId}/searchTerms and POST /v1/customers/{customerId}/keywords:search (text, matchType, qualityScore) to flag converting queries that are still unmatched exact keywords.
Recommendation automation
A budget-pacing service lists GET /v1/customers/{customerId}/recommendations and, when impact.potentialMetrics.conversions clears a threshold, posts POST /v1/customers/{customerId}/recommendations:apply with a newAmountMicros — the same raise-budget path as the in-app card.
Billing reconciliation
Finance pulls GET /v1/customers/{customerId}/billingSetups (paymentsAccountId, spendingLimitMicros, currencyCode) and matches monthly invoices to the payments account shown on the check-billing screen.
Frequently asked questions
What data API does the Google Ads app use?
A signed-in, customer-scoped REST surface reconstructed from the app's screens: GET /v1/customers:listAccessible for the account picker, POST /v1/customers/{customerId}/campaigns:search for the home list, and POST /v1/customers/{customerId}/reports/campaignMetrics for the analytics tab. The endpoints on this page are an illustrative map of that surface, not a live traffic dump.
How does the Google Ads app authenticate?
The app signs in with the Google account on the device (SSO) and attaches an OAuth2 Bearer access token with the Ads scope to later calls. There is no anonymous browse — every customer, campaign, keyword and billing read requires that session.
Which performance fields sit behind the analytics screen?
POST /v1/customers/{customerId}/reports/campaignMetrics returns impressions, clicks, ctr, averageCpc, costMicros, conversions, conversionsValue and allConversions, segmented by date — the same columns the in-app metrics table and column-picker expose.
Can billing and conversion setup be read from the app?
Yes. GET /v1/customers/{customerId}/billingSetups returns paymentsAccountId, paymentsAccountName, spendingLimitMicros and currencyCode (the check-billing screen, with payment-method edits going through the on-device Google payments manager). GET /v1/customers/{customerId}/conversionActions lists conversion goals plus attributionModel (data-driven, last-click, first-click, linear, time-decay, position-based).
Apps similar to Google Ads
- Meta Ads Manager — Meta Ads Manager is the Facebook Ads product for running campaigns to audiences on Facebook and Instagram, and Stackmatix treats Google Ads as Meta's largest paid competitor for high-intent demand.
- Microsoft Advertising — Microsoft Advertising is a pay-per-click platform for ads on Bing and partner sites, and advertisers can import Google Ads campaigns directly into it.
- TikTok Ads Manager — TikTok Ads Manager is the tool to create, manage and optimize ad campaigns on TikTok, listed by Stackmatix as a rival for short-video ad inventory.
- Amazon Ads — Amazon Ads places retail and sponsored-product ads on Amazon's storefront, and Stackmatix notes it competes when the purchase happens on Amazon's shelf.
- LinkedIn Ads — LinkedIn Ads lets advertisers target professionals by job title and company, which Stackmatix describes as unmatched for account-based marketing.
- Pinterest Ads — Pinterest Ads is included in Stackmatix's list of paid-social competitors to Meta and Google-style acquisition, running ads on Pinterest's discovery feed.
Topics
- Google Ads API
- Google Ads mobile data API
- campaign metrics costMicros
- listAccessible customers
- keyword matchType qualityScore
- Google Ads recommendations
- billingSetups paymentsAccountId
- conversionActions attributionModel
- search terms report
- Performance Max campaign
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use