Why Attribution Matters
Synter is the AI Agent Operator for Ads. It connects 14 ad platforms and your CRM (Salesforce, HubSpot, Attio, Pipedrive) via Direct API, ties ad spend to pipeline and revenue, and answers attribution questions in plain language.
You're running ads on Google, LinkedIn, Meta, Reddit, and X. Leads convert after multiple touchpoints. Which channel deserves credit?
Without clear attribution, you're flying blind: over-investing in low-ROI channels, under-funding winners, and guessing at budget allocation.
Synter's AttributionService uses last-touch attribution as a clear, deterministic default—and lets you query it with AI.

Last-Touch Attribution: Simple, Explainable
Last-touch gives 100% credit to the final click before conversion. Why this model?
- Deterministic: No black-box ML weighting; every conversion ties to a UTM
- Actionable: Pause low-ROAS campaigns immediately
- Platform-consistent: Matches how Google Ads and Meta report conversions
- Easy to explain: Finance and leadership understand it
We track UTM parameters (utm_source, utm_campaign, utm_medium) and platform click IDs (GCLID, FBCLID, li_fat_id) to tie conversions back to campaigns.
API: /api/attribution/dashboard
Fetch attribution metrics with filters:
GET /api/attribution/dashboard
Authorization: Bearer <token>
Query params: ?startDate=2025-10-01&endDate=2025-11-01&platform=google_ads
Response:
{
"summary": {
"totalConversions": 342,
"totalRevenue": 185400,
"totalSpend": 42100,
"roas": 4.4,
"cac": 123
},
"byPlatform": [
{
"platform": "google_ads",
"conversions": 145,
"revenue": 82500,
"spend": 18200,
"roas": 4.53,
"cac": 125
},
{
"platform": "linkedin_ads",
"conversions": 89,
"revenue": 58900,
"spend": 14800,
"roas": 3.98,
"cac": 166
}
// ...
],
"byCampaign": [
{
"campaignId": "camp_123",
"campaignName": "Enterprise SaaS - Search",
"platform": "google_ads",
"conversions": 67,
"revenue": 45200,
"spend": 8900,
"roas": 5.08
}
// ...
]
}AI Tools: Natural Language Queries
Instead of writing SQL or navigating dashboards, ask Synter directly:
Example Queries
- →"Which campaigns drive the most sales?"
- →"Show me ROAS by platform for Q4"
- →"What's my CAC on LinkedIn vs Google Ads?"
- →"Find campaigns with ROAS below 2.5"
Tool: queryCampaignPerformance
The AI calls queryCampaignPerformance() to fetch conversion, revenue, and spend metrics filtered by date range, platform, and campaign.
// AI tool call
queryCampaignPerformance({
startDate: "2025-10-01",
endDate: "2025-11-01",
platform: "linkedin_ads"
})
// Returns
[
{
campaignName: "Enterprise Outbound",
conversions: 23,
revenue: 18500,
spend: 4200,
roas: 4.4
}
// ...
]Tool: queryPlatformAttribution
For platform-level comparisons, the AI uses queryPlatformAttribution():
// AI tool call
queryPlatformAttribution({
startDate: "2025-11-01",
endDate: "2025-11-15"
})
// Returns
[
{ platform: "google_ads", conversions: 89, cac: 118, roas: 4.9 },
{ platform: "linkedin_ads", conversions: 45, cac: 172, roas: 3.8 },
{ platform: "meta_ads", conversions: 34, cac: 95, roas: 5.2 }
]UTM Consistency: The Foundation
Attribution only works if your UTMs are consistent. Synter enforces:
- Auto-tagging: Campaigns launched via Synter get standardized UTMs (
utm_source=google_ads,utm_campaign=camp_id) - Click ID tracking: GCLID, FBCLID, li_fat_id captured in session data
- Fallback logic: If UTM missing, use click ID → platform; else "direct"
Integration with Growth Dashboard
Attribution metrics power the Growth Dashboard:
- ROAS KPI: Calculated from attributed conversions / spend
- CAC by channel: Platform-level CAC in the ChannelPerformance table
- Conversion funnel: Last-touch platform shown in funnel drop-offs

View live attribution data: /blog/growth-dashboard
Ask Synter About Your Attribution
Connect your ad platforms and ask: "Which campaigns drive the most sales?"
