Marketing analytics Which channel actually pays back
Import spend, let TapCub read UTM parameters and 14 ad click IDs on arrival, and see return per channel next to the conversions it produced. In the sample, Newsletter returns 6.2× and TikTok 0.8× — the budget conversation writes itself.
- ROI per channel, with imported spend
- First touch and last touch
- 14 ad click IDs, global and China
- AI search as a channel
Channels · return on spend
Spend imported| Channel | Spend | Conversions | Revenue | ROI |
|---|---|---|---|---|
| Newsletter | $1,200 | 186 | $7,440 | 6.2× |
| $4,800 | 408 | $16,320 | 3.4× | |
| Meta | $3,600 | 189 | $7,560 | 2.1× |
| Microsoft | $1,500 | 68 | $2,700 | 1.8× |
| TikTok | $2,400 | 48 | $1,920 | 0.8× |
Blended ROI · daily
All paid channelsBreak-evenClicks are not customers
Three gaps between what the ad platform reports and what actually happened, and how TapCub closes them.
"Every platform claims the same sale"
Each ad platform counts the conversion for itself. Add up their dashboards and you sold three times more than you did.
One source of truth: the order on your site, attributed once. First and last touch both visible, with the full path per person.
"Half our traffic is (direct) or (other)"
Untagged links, stripped parameters and app traffic pile into buckets no one can act on.
14 ad click IDs and UTM parameters are read on arrival and kept on the person, so a later purchase is still attributed to the campaign.
"ROI is a spreadsheet we update monthly"
Spend lives in five ad accounts; revenue lives in analytics. Someone merges them by hand, late.
Import spend per channel — CSV or API — and ROI is a column in the report, daily, next to the conversions.
14 ad platforms recognized on arrival
When a landing URL carries a known click ID, the visit — and the person — is tied to that platform even if no UTM was set. Ten global platforms and four in China, read automatically.
Global · 10 platforms
Google Ads
gclid · wbraid
Meta
fbclid
TikTok
ttclid
Microsoft Ads
msclkid
X Ads
twclid
li_fat_id
Snapchat
ScCid
epik
Reddit Ads
rdt_cid
Yandex Direct
yclid
China · 4 platforms
Ocean Engine
clickid
Baidu Marketing
bd_vid
Tencent Ads
gdt_vid · qz_gdt
Kuaishou Magnetic
callback
-
1
Read
The script reads the click ID from the landing URL on the first page view — nothing to configure.
-
2
Keep
The ID and the platform stay on the profile, so a purchase three weeks later still credits the ad.
-
3
Report
Platform appears as a source alongside UTM channels; conversions can be posted back to the platform.
Campaign reports that add up
UTM parameters are normalized on arrival — case, spacing and known aliases — so "Google", "google" and "Google Ads" are one row. Campaign, source, medium and content each get their own breakdown with sessions, conversions and rate.
- Normalization: case, whitespace, common aliases
- Breakdown by campaign, source, medium, term, content
- Export any table or schedule it by email
Example scenario: The spring sale ran in email, paid search and a partner post with one campaign name. The report shows the email with the hero_cta link converting at 9.1% and the footer link at 2.4% — the next email has one button.
Campaign · spring_sale
Export| Content | Source | Sessions | Conversions | Rate |
|---|---|---|---|---|
| hero_cta | newsletter | 2,040 | 186 | 9.1% |
| footer_link | newsletter | 1,120 | 27 | 2.4% |
| ad_group_a | 3,860 | 214 | 5.5% | |
| post_1 | partner_acme | 640 | 9 | 1.4% |
https://shop.example/spring?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale&utm_content=hero_ctaFirst touch and last touch, on the same person
A customer sees a Newsletter, clicks a Google ad two weeks later and pays. First touch credits the Newsletter; last touch credits the ad. TapCub shows both columns — and the full path — so the team stops arguing about which one is "right".
- First, last and linear models on the same table
- The path per person: every touch, in order, with dates
- Switch model without re-running anything
Example scenario: Under last touch, Google gets 408 conversions and Newsletter 186. Under first touch, Newsletter rises to 302 — it introduces customers that search later closes. Both channels stay in the budget.
Conversions by model
First vs lastLinear| Channel | First touch | Last touch | Difference |
|---|---|---|---|
| Newsletter | 302 | 186 | +116 |
| 318 | 408 | −90 | |
| Meta | 171 | 189 | −18 |
| Microsoft | 54 | 68 | −14 |
| TikTok | 54 | 48 | +6 |
One customer’s path
3 touches · 18 daysThe page after the click
A channel can be fine and the page it lands on broken. Landing page reports show visits, bounce and conversion per entry page with the channel beside it, so a weak page does not get blamed on a good campaign.
- Visits, bounce rate and conversion per entry page
- Filter by channel to see the page for one campaign
- Page speed and errors on the same row from website analytics
Example scenario: Paid search sends 3,860 sessions to /landing/spring; it bounces at 71% and converts at 2.1%. The same traffic to /pricing converts at 5.8%. The ad destination changes, the channel does not.
Landing pages · last 30 days
Channel: Google| Page | Visits | Bounce | Conversion | Top source |
|---|---|---|---|---|
| /pricing | 6,420 | 38% | 5.8% | |
| /landing/spring | 3,860 | 71% | 2.1% | |
| /blog/linen-care | 2,910 | 62% | 1.9% | newsletter |
| /product/linen-shirt | 2,240 | 44% | 7.4% | newsletter |
Entry pages
142
Avg. bounce
48%
Best converting
/product/linen-shirt
Spend share against return
Import what you spent per channel and ROI becomes a column, not a spreadsheet. The quadrant shows where to move budget: Newsletter sits top-left — small spend, 6.2× return. TikTok sits bottom-right — the largest share of spend after Google, 0.8× back.
- Spend by CSV upload or ad platform API
- Return = attributed revenue in the same window
- Channels with clicks but no spend are listed, not ranked
Example scenario: Moving $1,000 from TikTok to Newsletter production — more issues, better segments — is the recommendation the quadrant makes without anyone building a slide.
Channels · spend share × ROI
Last 30 daysROI by channel
Total spend $13,500 · attributed revenue $35,940 · blended 2.7×
Visits from AI assistants, as a channel
When ChatGPT, Perplexity, Gemini or Claude link to your page, the visit arrives with a recognizable referrer. TapCub groups them as an "AI search" channel next to search and social, and shows which pages get cited.
- Referrers from AI assistants grouped as one channel, split by assistant
- Pages cited most often, with their conversion
- Pairs with the AI crawler report in website analytics
Example scenario: AI search is 3,152 sessions this month, up 4× since spring, and converts at 4.9% — above organic search. The pricing comparison page is cited most; it gets a clearer first screen.
AI assistants · sessions
AI searchAI search sessions · monthly
Sessions
3,152
Conversion
4.9%
Most cited pages
| Page | Sessions | Conversion |
|---|---|---|
| /compare/web-analytics | 1,204 | 5.6% |
| /pricing | 886 | 6.1% |
| /blog/ai-crawler-ledger | 612 | 2.3% |
Are you paying for traffic you would get anyway?
Organic and paid search on the same chart, by month and by landing page. When a page ranks and still gets paid clicks for the same query, the overlap is the cheapest budget cut you will find.
- Organic and paid sessions per month and per page
- Overlap flag when both land on the same URL
- Conversion per source, so the cut is informed
Example scenario: /pricing gets 2,100 organic and 1,860 paid sessions a month for brand terms. Pausing brand bidding for two weeks: organic rises to 3,400, total conversions unchanged, $1,100 saved.
Search sessions · organic vs paid
| Month | Organic | Paid |
|---|---|---|
| June | 5,420 | 3,860 |
| July | 5,980 | 4,120 |
| August | 6,610 | 4,480 |
| September | 7,240 | 4,310 |
Search sessions · monthly
OrganicPaidThree teams, three budget decisions
Example scenarios built on the sample data above.
Stop double-counting sales
Three ad platforms each reported the same 500 orders as their own.
- Orders attributed once from the site
- First and last touch side by side
- Spend imported from all three
Result: Blended ROI 2.7× instead of a claimed 8×; TikTok cut, Newsletter production doubled.
Credit the newsletter
Last-touch reporting made the newsletter look like a cost center.
- First-touch column: Newsletter 302 vs 186
- Path view: Newsletter → Google → paid
- Segment compare: Newsletter first-touch pays at 25%
Result: The newsletter keeps its budget and gets a dedicated landing page.
Measure AI search
Traffic from AI assistants was landing in "referral" and being ignored.
- AI search as its own channel
- Most-cited pages with conversion
- robots.txt checked for AI search crawlers
Result: AI search is the fourth-largest channel at 4.9% conversion; the two most-cited pages get rewritten first.
Marketing analytics questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How is ROI calculated?
Attributed revenue divided by imported spend, in the same date range. Newsletter in the sample is $7,440 ÷ $1,200 = 6.2×. Spend comes from a CSV upload or an ad platform connection.
Which attribution models are available?
First touch, last touch and linear, switchable on every table. The per-person path shows every touch with dates, so you can see why the models disagree.
Which ad click IDs are recognized?
14 platforms: Google Ads, Meta, TikTok, Microsoft Ads, X Ads, LinkedIn, Snapchat, Pinterest, Reddit Ads and Yandex Direct globally; Ocean Engine, Baidu Marketing, Tencent Ads and Kuaishou Magnetic in China.
Do I still need UTM parameters if click IDs are read?
Yes. Click IDs identify the platform; UTM parameters carry your campaign, content and term names. Use both. The UTM builder keeps the naming consistent.
Can conversions be sent back to ad platforms?
Yes. Server-side postbacks for the supported platforms send attributed conversions without a browser pixel. See integrations.
How is AI search traffic detected?
By referrer. Visits arriving from ChatGPT, Perplexity, Gemini, Claude and Copilot domains are grouped as "AI search" and split by assistant. AI crawler visits — bots, not people — are reported separately in website analytics.