Google Ads icon

Google Ads data API: campaigns, metrics and billing

Google LLC · Business

Google Ads (package com.google.android.apps.adwords) is Google's first-party Android client for running Search, Smart and Performance Max campaigns from a phone. After Google-account sign-in, every screen talks to a customer-scoped data API reconstructed from those features: the account picker calls GET /v1/customers:listAccessible, the home list pages campaigns at POST /v1/customers/{customerId}/campaigns:search, and the analytics tab reads impressions, clicks, ctr and costMicros from POST /v1/customers/{customerId}/reports/campaignMetrics.

Keyword construction hits POST /v1/customers/{customerId}/keywords:search (text, matchType, qualityScore). Optimization cards come from GET /v1/customers/{customerId}/recommendations and apply through POST /v1/customers/{customerId}/recommendations:apply. Billing reads GET /v1/customers/{customerId}/billingSetups (paymentsAccountId, spendingLimitMicros); conversion tracking lists GET /v1/customers/{customerId}/conversionActions with attributionModel. Signed-in calls send an OAuth2 Bearer token minted from the Google account on the device.

Google Ads is Google's first-party Android client for running Search, Performance Max, Smart and Display campaigns from a phone: picking a customer account, watching impressions/clicks/cost, editing keywords, applying recommendations, checking billing and wiring conversion actions. Its data API is reconstructed from those screens as a signed-in REST surface scoped to a Google Ads customerId. The account picker lists every customer the Google account can access; the home list returns campaigns with advertisingChannelType, status and budget; the analytics tab pages campaign metrics (impressions, clicks, ctr, costMicros, conversions); keyword and search-term screens expose matchType and query text; recommendations cover raise-budget / raise-bid / reallocation; billing rides Google payments account ids; conversion actions carry attributionModel (data-driven, last-click, first-click, linear, time-decay, position-based). Signed-in calls send an OAuth2 Bearer token minted from the Google account on the device.

Screenshots

  • Google Ads screenshot 1
  • Google Ads screenshot 2
  • Google Ads screenshot 3
  • Google Ads screenshot 4

API surface

  • List accessible customers

    GET /v1/customers:listAccessible opendata

    Returns 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
        }
      ]
    }

    Source in the app

    • inferred from the account-picker / initial-loading Google-account SSO flow
    • SSOAuthPlugin fetchTokenForAccount mints the Google-account token the rest of the app attaches
  • Get customer account

    GET /v1/customers/{customerId} opendata

    Loads 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
    }

    Source in the app

    • inferred from the account header on the campaign home screen
    • account_construction illustration is the empty/new-account state of the same customer resource
  • Search campaigns

    POST /v1/customers/{customerId}/campaigns:search opendata

    Pages 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
    }

    Source in the app

    • inferred from the campaign-list home screen
    • search_campaign_type, smart_campaign_type and uberversal_campaign_type assets map to advertisingChannelType values
  • Campaign performance metrics

    POST /v1/customers/{customerId}/reports/campaignMetrics opendata

    Reads 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
        }
      ]
    }

    Source in the app

    • inferred from the analytics screen plus impressions.png / clicks.png metric illustrations
    • feature_promo_card_modify_columns is the column-picker for this metrics table
  • Search keywords

    POST /v1/customers/{customerId}/keywords:search opendata

    Lists 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"}
        }
      ]
    }

    Source in the app

    • inferred from add-keywords.png and feature_promo_card_keyword_construction
    • match-type.png maps to keyword.matchType (EXACT / PHRASE / BROAD)
  • List recommendations

    GET /v1/customers/{customerId}/recommendations opendata

    Loads 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
        }
      ]
    }

    Source in the app

    • inferred from feature_promo_card_recommendation_intro and no-recommendations-to-display empty state
    • raise-budget.png, raise-bid.png, lower-bid.png, reallocation.png and forecasting_budget_raising.png are the recommendation types
  • Apply recommendation

    POST /v1/customers/{customerId}/recommendations:apply opendata

    Applies 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
          }
        }
      ]
    }

    Source in the app

    • inferred from the raise-budget / raise-bid confirmation flow on the recommendations tab
    • forecasting_budget_raising.png is the before/after impact card shown prior to apply
  • Read billing setup

    GET /v1/customers/{customerId}/billingSetups openfinance

    Loads 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
        }
      ]
    }

    Source in the app

    • inferred from feature_promo_card_check_billing and the payments_gm2_24px billing icon
    • PaymentsListener pendingBillingAccountManagerFlowResult / billingAccountManager opens the Google payments instrument manager
  • List conversion actions

    GET /v1/customers/{customerId}/conversionActions opendata

    Lists 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
        }
      ]
    }

    Source in the app

    • inferred from conversion_tracking.png, no_conversion_goals.png and congrats_screen_conversion
    • data-driven / first-click / last-click / linear / time-decay / u-shaped assets are the attribution-model picker
  • Read change history

    GET /v1/customers/{customerId}/changeEvents opendata

    Pages 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"}}
        }
      ]
    }

    Source in the app

    • inferred from change_history_empty_state.png, the empty state of the change-history screen
  • Search terms report

    GET /v1/customers/{customerId}/searchTerms opendata

    Returns 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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
        }
      ]
    }

    Source in the app

    • inferred from search-terms-illustration.svg and the manage_search_gm2_24px search-terms entry point
  • Create campaign

    POST /v1/customers/{customerId}/campaigns:create opendata

    Creates 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

    Illustrative example reconstructed from the app's interface — not a live capture.

    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"
      }
    }

    Source in the app

    • inferred from ad-creation.png plus create_from_scratch.svg and create_with_ai.svg
    • ai_max_intro.svg and gemini_logo.svg are the AI-assisted creation path; search/smart/uberversal campaign-type assets pick advertisingChannelType

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).

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

Get a quote