The quadrant settled a two-month argument in one meeting. TikTok was costing 23% of budget for 7% of orders. Nobody needed a second slide.
A. P.
Performance marketer · agency
Spend you import, orders from the ledger and the ad click that started it all sit on one board. Rank channels by return, not by what each platform claims.
Questions you answer every day
Spend
$12,400
▲ 4.2%
Attributed orders
508
▲ 9.1%
Blended return
2.9×
▲ 0.3×
Cost per order
$24.41
▼ 6.0%
Sessions × conversion rate · bubble = revenue
Cut by the mean on each axis. Newsletter converts best; TikTok brings sessions that do not convert.
Return by channel
After costEvery marketer has met these. None of them is a spreadsheet problem; they are a measurement problem.
Add up platform-reported conversions and you get more orders than you shipped. Each platform credits its own last click and nobody subtracts the overlap.
Orders are in analytics, cost is in five ad accounts. Return is computed by hand once a week, after the budget has already been spent.
Forty spellings of “facebook”, campaigns without a source, redirects that drop the click ID. The source report ends up 30% “direct”.
The same shared sample is used across the site, so a channel reads the same on every page.
Sample data. Return = order revenue ÷ imported spend for the same period.
Each block is one report. Each report links to the product page that explains it in full.
Import spend by day and channel. Cost per click, cost per order and return appear next to the sessions and orders TapCub already has.
Example scenario: TikTok takes 23% of spend and brings 7% of orders. The quadrant puts it bottom-right. You cut it before the next flight, not at quarter end.
Channel quadrant
Return by channel
After costgclid, fbclid, ttclid, msclkid and ten more are read from the landing URL and written to the person. The order three days later still knows which ad it came from.
| Platform | Parameter | Stored as |
|---|---|---|
| Google Ads | gclid | Ad click ID · first touch |
| Meta | fbclid | Ad click ID · first touch |
| TikTok | ttclid | Ad click ID · first touch |
| Microsoft Ads | msclkid | Ad click ID · first touch |
| X Ads | twclid | Ad click ID · first touch |
li_fat_id | Ad click ID · first touch | |
| + 8 more | UTM source / medium / campaign | Channel class on the session |
First touch, last touch and the models in between, on the same conversions. Pick the touch (channel, UTM source, campaign, landing page) and a lookback from 1 to 90 days.
| Channel | First touch | Last touch | Linear |
|---|---|---|---|
| Newsletter | 182 | 214 | 198 |
| Google Ads | 164 | 142 | 151 |
| Meta | 96 | 78 | 88 |
| Organic search | 48 | 60 | 52 |
| Direct | 18 | 14 | 19 |
Sources, landing pages and the funnel that starts on them. See which campaign URL reaches signup and which one bounces at the form.
Example scenario: A new landing page lost 46% between view and signup. It had a required phone field the old page did not. Fixed the same morning.
Campaign to order
7-day windowCampaign click
2,400
Landing page
1,248
Signup
674
Paid
508
Put a monitor on any saved metric. When a channel moves 30% against last week, a message lands in WeCom, DingTalk, Feishu, email or your webhook before the budget does.
Monitors · marketing
Channels: webhook, WeCom, DingTalk, Feishu and email.
The same five steps, every day. Each one is a report you open, not a spreadsheet you build.
Open Channel ROI for yesterday. Spend, orders and return by channel, with the newsletter next to paid.
Channel ROI · yesterday
A monitor fired overnight: Meta cost per order up 38% against last week with flat spend.
Monitors
Break Meta down by campaign and landing page. One ad set points at a page where the form lost 46% of people.
Funnel · campaign → signup
Pause the ad set, fix the redirect that dropped the click ID, and rename the stray “Facebook” source.
Ads console + UTM rules
Share the quadrant with growth and finance. Decide next week’s split with return, not platform-reported conversions.
Shared dashboard
Every step above is a saved report or a monitor. The only tool outside TapCub is the ad platform itself.
Marketing owns spend. Growth owns activation. Finance owns the number that goes in the deck. They can all read the same dashboard, with the right level of access.
Sees the same funnel from campaign click to activation and tells you which channel’s users stick.
OpenGets the landing-page funnel and heatmap when the form is the problem, not the ad.
OpenSees the campaign and landing page on every chat, so a confusing promo is reported the same day.
OpenShare “Channel ROI · weekly”
Copy linkRead-only link, optional password, last 90 days, filters limited to the share allowlist.
Owner and Admin manage members and costs. Analyst builds reports and imports spend. Viewer reads. Agency partners get a read-only link that expires with the contract.
Industry packs install the events, metrics and dashboards. Solutions explain how the pieces fit for one kind of business.
Templates that fit this role
Solutions worth reading next
Two scenes from the job, written as the person doing it might tell them.
The quadrant settled a two-month argument in one meeting. TikTok was costing 23% of budget for 7% of orders. Nobody needed a second slide.
A. P.
Performance marketer · agency
I used to export five CSVs on Friday. Now I import one cost sheet on Monday and the return column is just there, with the newsletter beside paid.
L. W.
Marketing lead · DTC brand
Illustrative scenarios written from the perspective of people who do this job. Not real reviews.
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
Add a row or import a CSV on the Costs tab of Channel ROI. Columns are day, channel, source, campaign, cost, currency, clicks and impressions; day and cost are required. The same day and dimensions overwrite the row.
14. Google Ads, Meta, TikTok, Microsoft Ads, X Ads, LinkedIn, Snapchat, Pinterest, Reddit Ads and Yandex Direct, plus Ocean Engine, Baidu, Tencent Ads and Kuaishou. The click ID is read from the landing URL.
No. Channel ROI is a spend table next to sessions, orders and revenue. The attribution analysis credits conversions to touches under first-touch, last-touch and other models. Use both.
From the order ledger, which means purchase events sent from your server. Without orders, revenue is zero and return is not estimated.
Yes. Share the dashboard as a read-only link with an optional password. It shows the last 90 days and the filters you allow.
Import one week of spend and read the return tomorrow
Free plan, no credit card. The snippet is the same one your site may already run for analytics.