Get Google Ads campaign conversion breakdown

Changed on

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Breaks one campaign's conversions down by goal, by the Google surface they came through, and by where the people who converted were, for a date window.

Base44 reads all three live from Google Ads as separate reads, and each one can fail on its own. A failed read still returns a 200: its *_unavailable flag is true and its lists are empty, so show that section as unavailable rather than as zero conversions.

  • Goals. goals totals conversions and conversion value for the sales, leads, shopping and other families, and goal_actions lists the conversion categories behind them. A category whose conversions round to zero is left out of goal_actions but still counts in goals, so a total can differ slightly from the sum of its rows. BEGIN_CHECKOUT and ADD_TO_CART count as shopping, not sales, and can carry a value, so don't add shopping to a sales total as revenue.
  • Channels. channels ranks conversions by ad network. Conversions Google reports with no resolved network, which includes every Performance Max date before 1 June 2025, are summed into channels_unresolved instead.
  • Locations. countries and locations rank conversions by where people were, not by what they searched for. Conversions Base44 can't name a place for are summed into countries_unresolved and locations_unresolved.

The ranked lists leave out entries that round to zero. goals_configured names the goal families the app reports conversions for, so you can hide one it never tracks.

start_date and end_date are inclusive, must both be YYYY-MM-DD, and are read in the Google Ads account's time zone. Anything else is rejected with a 400. Keep start_date on or before end_date. The campaign has to have reached Google Ads, so one with no google_campaign_id yet returns a 404.

This is limited to 30 requests a minute per app. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key from anyone who can view the app, including a read-only key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>

get/api/apps/{app_id}/google-ads/campaigns/{campaign_id}/impact

Request

  • Base URL: https://app.base44.com
  • URL: https://app.base44.com/api/apps/{app_id}/google-ads/campaigns/{campaign_id}/impact
  • Auth: HTTP bearer

Path parameters

app_idstring required

ID of the app whose Google Ads reporting you want to read.

campaign_idstring required

Base44's ID for the campaign, as returned in id by List campaigns. This is not the Google Ads campaign ID, which is reported separately as google_campaign_id.

Query parameters

start_datestring required

First day of the window, as YYYY-MM-DD.

end_datestring required

Last day of the window, inclusive, as YYYY-MM-DD.

Response

The campaign's conversions by goal, channel and location.

goalsobject required

Totals per goal family, keyed by sales, leads, shopping and other. Empty when goals_unavailable is true.

goals_unavailableboolean required

true when the goal read failed, so goals is empty because the numbers are missing, not zero.

channels_unresolvednumber

Conversions Google reported with no resolved network, which includes every Performance Max conversion before 1 June 2025. Absent when channels_unavailable is true.

channels_unavailableboolean required

true when the channel read failed, so channels is empty because the numbers are missing, not zero.

countries_unresolvednumber

Conversions Base44 could not name a country for, so they are missing from countries. Absent when locations_unavailable is true.

locations_unresolvednumber

Conversions Base44 could not name a place for, so they are missing from locations. Absent when locations_unavailable is true.

locations_unavailableboolean required

true when the location read failed, so countries and locations are empty because the numbers are missing, not zero.

goals_configuredstring[] required

The goal families, sales and leads, that the app has an enabled conversion mapping for. Empty when Base44 can't tell, in which case treat both as possible.

Example response

{
  "goals": {
    "leads": {
      "conversions": 6,
      "conversions_value": 0
    },
    "other": {
      "conversions": 0,
      "conversions_value": 0
    },
    "sales": {
      "conversions": 24,
      "conversions_value": 1830
    },
    "shopping": {
      "conversions": 9,
      "conversions_value": 410
    }
  },
  "goal_actions": [
    {
      "category": "PURCHASE",
      "conversions": 12,
      "conversions_value": 960,
      "family": "sales"
    }
  ],
  "channels": [
    {
      "channel": "SEARCH",
      "conversions": 18
    }
  ],
  "channels_unresolved": 2,
  "countries": [
    {
      "code": "DE",
      "conversions": 20
    }
  ],
  "locations": [
    {
      "conversions": 11,
      "name": "Berlin"
    }
  ],
  "locations_unresolved": 1,
  "goals_configured": [
    "sales"
  ]
}

Changes