Ads overview
3x reads cost and performance data of your ad accounts through Composio and joins it to the sessions those ads produced on your site. Platform dashboards tell you clicks and CPC; 3x tells you cost per relevant session, cost per lead and ROAS measured on your own site – per platform, campaign, ad set and ad. The concept page Ad costs explains the model; this section is the operating manual.
| Step | Who | Guide |
|---|---|---|
| 1. Configure Composio for the deployment (API key, auth configs, webhook) | operator, once | Composio setup |
| 2. Connect an ad platform (organization or project level) | org admin | Google, Meta, LinkedIn, TikTok |
| 3. Select the ad accounts of the project – a 90-day backfill starts | project admin | platform guides |
| 4. Put the UTM templates on your ads (exact matches) | marketer | UTM templates |
| 5. Fix unmatched UTMs with mapping rules | marketer | Matching sessions to ads |
| 6. Read the KPIs | everyone | Cost KPIs |
Read-only by design
3x only calls read tools: account discovery, entity lists, daily reports, Google's click view and
conversion-configuration reads. It never creates, edits, pauses or deletes campaigns, budgets,
bids or audiences. The only write operation that can go through Composio is a conversion upload,
and only when you explicitly choose the composio transport on a conversion destination
(Conversions).
Where the numbers appear
- Dashboard → Ads: platform → campaign → ad set → ad table with spend, impressions, clicks, CPC, CTR, matched sessions, relevant sessions, leads, conversions, cost per session / relevant session / lead / conversion and ROAS; a daily spend-vs-sessions chart; the Unmatched UTMs view; the sync log.
- REST API:
GET /v1/projects/{project}/ads/report,…/ads/timeseries,…/ads/unmatched,…/ads/entities,…/ads/sync-runs(scopeads:read);POST …/ads/syncand mapping rules (scopeads:write). See the API reference. - MCP:
ads_performance,ads_timeseries,ads_unmatched,ads_accounts_list,ads_sync_status,ads_sync_run,ads_utm_templates,ads_mapping_rules_*.
All reports accept the complete analytics filter on the session side – for example cost per relevant session of mobile visitors from Germany who reached the pricing page.
Sync schedule
| Job | Interval | What it does |
|---|---|---|
ads.entities | every 6 h and right after connecting | campaigns, ad sets, ads and their URL parameters |
ads.metrics | hourly for today (optional), daily for D-1…D-7 (platforms restate), weekly for D-8…D-30 | daily spend, impressions, clicks, platform conversions |
ads.clicks | daily | Google click view of yesterday (gclid → ad and keyword) |
ads.backfill | every scheduler tick while queued | 90 days in chunks (30 days, LinkedIn one month), resumes after errors |
ads.match | every 15 min | assigns new sessions of the last 90 days to ads |
ads.health | daily | connection status (expired tokens show Reconnect) |
ads.fx | daily | ECB reference rates for currency conversion |
Report calls take 10–30 seconds each. On serverless deployments the scheduler continues long backfills in follow-up invocations; what to expect per hosting plan is described in Cron and background jobs.