Skip to content

Google Ads Lead Cost Control

Business Case

A head of marketing needs to monitor lead acquisition cost (CPL) and conversion cost (CPA) from Google Ads daily. The key goal is to keep CPL from drifting outside an acceptable range. When the threshold of 500 rubles per lead is exceeded, budgets need to be quickly reallocated between campaigns, or underperforming ones paused. The report should automatically flag problem campaigns.

Connections

This report requires a Google Ads connection.

  • Connector: google-ads
  • Required permissions: google_ads_read (access to the Google Ads API)
  • Connection status: active
  • Special requirement: the Google Ads API requires a developer token and Client ID — make sure they're entered correctly in the connection settings
  • Settings: select the Google Ads accounts (MCC or individual) that should be included in the report

Lead and conversion data in Google Ads depends on the conversion tracking settings in the ad account itself. If conversion goals aren't configured in Google Ads, the conversions and conversion_value metrics will be empty. Set up conversion tracking in Google Ads before creating the report.

Report Settings

  • Name: Google Ads CPL Control
  • Report type: analytical report with threshold monitoring
  • Data source: all google-ads connections
  • Date range: last_30_days — a month gives a sufficient sample for a stable CPL
  • Grouping: by campaign (campaign_name) and ad group (ad_group_name)
  • Sorting: by CPL ascending — cheapest leads first
  • Timezone: Europe/Moscow

Parameters

json
{
  "date_range": "last_30_days",
  "group_by": ["campaign_name", "ad_group_name"],
  "sort": { "field": "cpl", "direction": "asc" },
  "timezone": "Europe/Moscow",
  "limit": 500
}

For more granular control, you can add a breakdown by keyword (keyword_name) — this reveals which search queries lead to the most expensive leads.

Metrics

MetricTypeDescription
impressionsnumberGoogle Ads ad impressions
clicksnumberClicks on ads
ctrpercentClick-through rate
cpccurrencyAverage cost per click
costcurrencyBudget spent
conversionsnumberNumber of conversions
conversion_valuecurrencyConversion value
conversion_ratepercentCR = Conversions / Clicks * 100%

Calculated metrics:

json
{
  "calculated_metrics": [
    {
      "name": "cpa",
      "formula": "IF([conversions] > 0, [cost] / [conversions], 0)",
      "type": "money",
      "description": "Cost per conversion"
    },
    {
      "name": "cpl_alert",
      "formula": "IF([cpa] > 500, 1, 0)",
      "type": "integer",
      "description": "CPL threshold flag: 1 = the 500-ruble threshold was exceeded"
    }
  ]
}

The cpl_alert metric works as a flag: 1 means CPL exceeded the 500-ruble threshold, 0 means it's within the normal range. In the LightLead interface, such rows can be highlighted in red using conditional formatting.

Filters

json
{
  "logic": "AND",
  "conditions": [
    {
      "field": "cost",
      "operator": "GREATER_THAN",
      "value": 100
    },
    {
      "field": "clicks",
      "operator": "GREATER_THAN",
      "value": 10
    }
  ]
}
  • cost > 100 — excludes campaigns with a minimal budget, where CPL isn't statistically reliable
  • clicks > 10 — at least 10 clicks for any meaningful conversion metrics

To focus on problem campaigns, add an additional filter after the calculation — for example, filter rows with cpl_alert = 1 in the interface.

Write Mode

Mode: Replace

Google Ads conversion data can be updated retroactively (attribution window of up to 30 days), so Replace mode guarantees that every morning you get a complete, up-to-date picture of the last month, including any conversions credited after the fact.

Important: the Google Ads API has a data update delay — conversions from the last 24-48 hours may be incomplete. Keep this in mind when analyzing recent data.

Schedule

json
{
  "schedule": {
    "enabled": true,
    "interval": "daily",
    "time": "06:30",
    "timezone": "Europe/Moscow",
    "retry_on_failure": true,
    "max_retries": 3
  }
}

A daily run at 6:30 AM gets fresh data before the workday starts. If more frequent monitoring is needed (for example, during an active ad campaign), switch to hourly — on the Solo plan, the minimum interval is 1 hour.

Expected Result

  • Status: completed or partial (if some Google Ads accounts are unavailable)
  • Row count: number of campaigns × number of ad groups (typically 20-100 rows)
  • Key insights: you can see which campaigns deliver cheap leads (CPL < 300 rubles) and which are expensive (CPL > 500 rubles); you can compare the performance of different ad groups within the same campaign
  • Alerts: rows with cpl_alert = 1 require immediate attention — you may need to lower the bid, change audiences, or pause the ad group

Screenshot

[Screenshot]

[Screenshot]

Maintained by the LightLead Documentation Team · Last verified: 2026-07-26