Skip to content

End-to-End Analytics for Meta Ads + Kommo

Business Case

A marketing director needs to see the full cycle: from a Meta Ads click to a closed deal in Kommo CRM. The key question is which campaigns, ad sets, and creatives actually generate paid deals, not just leads. This requires calculating CPL (cost per lead), CAC (customer acquisition cost), and ROAS (return on ad spend) based on CRM revenue data rather than ad account data.

Connections

This report requires two connections:

  1. Meta Ads — the meta-ads connector

    • Permissions: ads_read, read_insights
    • Status: active
  2. Kommo CRM — the kommo connector

    • Permissions: crm_read
    • Status: active

Critically important: both connections must be active. If Kommo is unavailable, you'll only see ad metrics without deal data — CPL and ROAS won't be calculable.

Matching scheme (matching preset):

Meta Ads and Kommo data are matched by UTM tags, which are passed from the ad into hidden CRM form fields when a lead is captured. LightLead automatically matches the campaign and ad from Meta Ads with the corresponding deal in Kommo using these fields:

  • meta_ads.ad_idkommo.lead.utm_content
  • meta_ads.campaign_idkommo.lead.utm_campaign
  • meta_ads.datekommo.lead.created_date

Report Settings

  • Name: End-to-End Analytics Meta Ads → Kommo
  • Report type: attribution report (end-to-end analytics) with a matching preset
  • Matching Preset: Meta Ads + Kommo (UTM) — a built-in LightLead preset for this connector pair
  • Data sources: all meta-ads and kommo connections
  • Date range: last_30_days
  • Attribution window: 30 days (click → lead) + 60 days (lead → deal) = up to 90 days for the full cycle
  • Grouping: by campaign (campaign_name), ad set (adset_name), ad (ad_name), and pipeline (pipeline_name)
  • Sorting: by ROAS descending
  • Timezone: Europe/Moscow

Parameters

json
{
  "date_range": "last_30_days",
  "matching_preset": "meta-ads-kommo-utm",
  "attribution_window": {
    "click_to_lead_days": 30,
    "lead_to_deal_days": 60
  },
  "group_by": ["campaign_name", "adset_name", "ad_name", "pipeline_name"],
  "sort": { "field": "roas", "direction": "desc" },
  "timezone": "Europe/Moscow",
  "limit": 1000
}

The meta-ads-kommo-utm matching preset is a pre-configured matching rule that requires no manual field-mapping setup. LightLead already knows that utm_content in Kommo corresponds to ad_id in Meta Ads.

Attribution window: click_to_lead_days: 30 means that if a click was more than 30 days ago, it isn't counted. lead_to_deal_days: 60 means that if a deal was created more than 60 days after the lead, it isn't attributed to that click. These are the standard recommended values, and you can adjust them to match your sales cycle.

Metrics

The Meta Ads + Kommo pairing provides end-to-end metrics:

MetricTypeSourceDescription
spendcurrencyMeta AdsAd budget spent
impressionsnumberMeta AdsAd impressions
clicksnumberMeta AdsClicks on ads
ctrpercentMeta AdsClick-through rate
leadsnumberKommoNumber of leads created
qualified_leadsnumberKommoQualified leads
deals_creatednumberKommoDeals created
deals_wonnumberKommoDeals won
revenuecurrencyKommoRevenue from won deals

Calculated metrics:

json
{
  "calculated_metrics": [
    {
      "name": "cpl",
      "formula": "IF([leads] > 0, [spend] / [leads], 0)",
      "type": "money",
      "description": "Cost per lead: how much it costs to acquire one lead"
    },
    {
      "name": "cac",
      "formula": "IF([deals_won] > 0, [spend] / [deals_won], 0)",
      "type": "money",
      "description": "CAC — cost of acquiring one customer"
    },
    {
      "name": "roas",
      "formula": "IF([spend] > 0, [revenue] / [spend] * 100, 0)",
      "type": "percent",
      "description": "ROAS: return on ad spend based on CRM revenue"
    },
    {
      "name": "lead_to_deal_cr",
      "formula": "IF([leads] > 0, ROUND([deals_created] / [leads] * 100, 1), 0)",
      "type": "percent",
      "description": "Lead-to-deal conversion rate"
    }
  ]
}

Key difference from standard ROAS: this metric uses actual revenue from the CRM (revenue) instead of purchase_value from Meta Ads. This is the only way to learn the true return on ad spend, cleaned of test orders, refunds, and cancellations.

Filters

json
{
  "logic": "AND",
  "conditions": [
    {
      "field": "spend",
      "operator": "GREATER_THAN",
      "value": 500
    },
    {
      "field": "leads",
      "operator": "GREATER_THAN",
      "value": 5
    }
  ]
}
  • spend > 500 — excludes campaigns with a minimal budget (not enough data)
  • leads > 5 — at least 5 leads for a statistically meaningful CPL and conversion rate

Write Mode

Mode: Replace

Pairing two sources requires full data consistency. If only Meta Ads is updated and Kommo isn't, ROAS will be calculated incorrectly. Replace guarantees that every run recalculates everything from scratch.

Schedule

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

A daily run at 8:00. Keep in mind that deals can close with up to a 60-day delay, so ROAS for the last 2 weeks will look understated — that's normal. To see the full ROAS, look at data over last_90_days.

Expected Result

After a successful run:

  • Status: completed (both sources available) or partial (one unavailable)
  • Row count: campaigns × ad sets × ads (typically 50-300 rows)
  • End-to-end metrics: a complete picture from spend to revenue — you can see that campaign X has a ROAS of 250%, while campaign Y has 80% (running at a loss)
  • Funnel conversion: out of 100 leads, 30 convert to a deal, and 10 of those are won — this is the actual CAC and ROAS
  • Decisions: campaigns with ROAS < 100% get paused; campaigns with ROAS > 300% get scaled up

Screenshot

[Screenshot]

[Screenshot]

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