The B2C brand's guide to proving marketing ROI without a data team

Your channels don't talk to each other. You're the one doing the reconciling.

Your budget is split across paid social, paid search, lifecycle email, app store listings, and organic content. Each one has its own dashboard, its own definition of a "conversion," and its own story about how well it's doing. None of them talk to each other, and nobody on a lean team has a spare afternoon every week to sit down and reconcile the four or five different truths on offer.

So the real answer to "what's actually working" often comes down to whoever tells the most confident story in Friday's meeting, not whoever has the evidence. That's not a knock on anyone's judgment. It's what happens when the tracking is scattered and there's no dedicated analyst to pull it together.

Here's the part that's easy to miss: there's no such thing as a perfectly correct attribution model. Not for a company with a full data team, and definitely not for a lean team stitching together five dashboards by hand. Every attribution method, first-touch, last-touch, a blended model, is directionally useful and technically wrong. That's not a flaw to fix. It's the nature of assigning credit for a decision a customer made across several touchpoints, days or weeks apart, using tracking that was never built to capture all of it.

Once you accept that, the real skill stops being "build a more precise model" and becomes something more useful: notice when a pattern shifts, and run a fast, cheap experiment to find out why before you make a budget call based on a guess. A channel's numbers moving is a signal, not a verdict, and chasing perfect precision on a number that's already directionally wrong wastes the little time a lean team has.

Worth saying plainly: this gets harder, not easier, as a brand grows. More channels, more concurrent campaigns, more seasonal noise, more variables stacking on top of each other, all of it compounds the confounds in your data right when you most need a reliable read and have the least of one. A five-channel spreadsheet that's genuinely useful this quarter will feel a lot noisier at twelve channels next year. The habit of testing a pattern instead of trusting it blindly only gets more valuable from here, not less.

This guide gives you a way out of that, without a data hire, without a BI project, and without waiting a quarter for an answer. Specifically, you'll get:

  • A short checklist for what needs to be tracked before any ROI claim holds up

  • A three-metric framework, signups, activation, retention, that maps results back to the channel that earned them

  • A template you can build in a spreadsheet this afternoon

  • A way to present the finding to leadership in three sentences, not a slide deck

None of this requires new tooling. It requires deciding, once, what you're going to measure and how, and then holding every channel to the same standard.

Part 1: The minimum tracking foundation

Before you can credit any channel with anything, three things need to be true. Keep this list short on purpose: the goal is a working foundation, not a full analytics build.

1. Spend, broken out by channel. Not "marketing spend" as one line. Paid social spend, paid search spend, and any other paid line need to sit separately, even if it's just a tab in a spreadsheet you update weekly.

2. Signups tagged with a source. This doesn't need to be perfect multi-touch attribution, and you shouldn't try to build that with a small team. A rough first-touch tag on each signup, "this person came from paid social," "this person came from an app store search," is enough to start drawing real conclusions. (DOJO tags signup source automatically from your connected ad platforms and app store data, so this doesn't depend on someone maintaining UTM discipline by hand.)

3. Lifecycle and app store performance sitting next to the rest. If email reactivates dormant users or your app store listing drives installs, those numbers need to live where you can see them alongside paid and organic, not buried in a separate tool nobody opens on a Friday.

If any of these three isn't in place yet, fix that first. Everything below assumes it is.

A few things that trip lean teams up at this stage, worth naming before you start:

Total revenue is not the same as channel-level revenue. Knowing the business made money this month tells you nothing about which channel to fund next month. You need the split, even a rough one, or every conversation defaults back to gut feel.

"Traffic" and "spend" are not interchangeable with "results." A channel can be cheap and produce nothing, or expensive and produce your best customers. You won't know which until spend and outcomes sit in the same view.

Perfect attribution is not the bar. Waiting for a flawless multi-touch model before you start is how teams end up tracking nothing for another year. A first-touch tag, applied consistently, beats a perfect system you never finish building.

Part 2: The three-metric proof framework

Most ROI arguments fall apart because they stop at traffic, or worse, at signups. Signup volume on its own proves almost nothing. A channel can hand you five hundred signups a month who never open the product again. Another channel might hand you a hundred who stick around for a year. Traffic tells you who showed up. Activation and retention tell you who mattered.

For every channel, track three numbers:

  • Signups. How many people the channel actually produced.

  • Activation. What share of those signups did the thing that matters for your product: finished onboarding, made a first purchase, opened the app a second time. Define this once, in plain language, and use the same definition for every channel. Consistency here matters more than precision.

  • Retention at 30, 60, and 90 days. What share are still active a month later, two months later, three months later.

Put these side by side in one place, as absolute counts, not rates. Rates get calculated on demand from the counts, they don't get their own column. Here's the structure, filled in with illustrative numbers so you can see the shape of it before you drop in your own:

Channel

Signups

Activated

Retained (30d)

Retained (60d)

Retained (90d)

Paid Social

500

150

90

70

55

Paid Search

300

135

60

45

35

Lifecycle Email

80

60

50

45

40

App Store / Organic Search

220

110

70

55

45

Referral / Organic Search

60

15

8

5

3

Calculate rates from these, don't store them separately. Percentages are cheap to compute on demand from two counts. But the moment "activation rate" gets saved as its own number instead of derived from the counts behind it, you lose the ability to reslice it later, by cohort, by a different time window, by a different denominator, and you risk two people in the same meeting quoting different "activation rates" that were calculated slightly differently without either of them realizing it. Store the counts. Calculate the rate every time you need it.

Two formulas do almost everything here:

  • Activation rate = Activated ÷ Signups

  • Retention rate (90-day) = Retained (90d) ÷ Activated, which measures whether the people who activated stuck around. There's also a second valid version, Retained (90d) ÷ Signups, which measures overall signup-to-long-term-active conversion. Which one you want depends on the question you're asking, and that's exactly the flexibility you lose the moment you only store one baked-in rate.

Using the illustrative numbers above: Paid Social converts 150 of its 500 signups into activated users, a 30% activation rate. Of those 150 activated users, 55 are still active at 90 days, 36.7% of activated users retained. Measured against the original 500 signups instead, that's 11% of everyone who ever signed up through Paid Social still active three months later, a much smaller number, and a good illustration of why the denominator matters. Lifecycle Email tells a different story: 60 of its 80 signups activate, a 75% activation rate, and 40 of those 60 are still active at 90 days, 66.7% of activated users retained, or 50% measured against the original signups. Small channel, but almost everyone who shows up sticks around. (DOJO computes both versions of a rate on demand from the same underlying counts, so nobody has to decide ahead of time which one to bake into a spreadsheet column.)

Update it monthly. That's it. No dashboard software, no engineering ticket, just one spreadsheet with five rows and five columns that never lie to you the way a raw traffic number can.

Once this is filled in for two or three months running, patterns show up fast. A channel with strong signups and weak activation is a targeting problem: you're bringing in the wrong people. A channel with strong activation and weak 90-day retention is a product or onboarding problem, not a marketing one. A channel that's quietly strong across all three, even at modest volume, is the one worth more budget, whether or not it's the one getting the most credit in the room today.

The pattern that actually tells you what to do next

This is where the table stops being a report and starts being a decision. Don't read the three numbers one at a time. Read them as a combination, because the combination tells you what kind of problem you actually have, and that determines what you do next.

Three numbers at once are hard to read as flat text, activation rate, 90-day retention, and signup volume don't fit neatly into one line of a sentence. Easier to picture than to read: a bubble chart called "Which Channel Needs What: A Diagnostic Quadrant." Activation rate sits on the x-axis, 90-day retention rate (of the people who activated) sits on the y-axis, and signup volume becomes the size of each channel's bubble. Two axes carry two dimensions and split the chart into four quadrants; the third dimension, volume, becomes bubble size, which conveniently doubles as urgency: a big bubble sitting in a bad quadrant is a much bigger problem than a small one in the same spot.

Bubble chart with activation rate on the x-axis and 90-day retention rate on the y-axis, divided into four quadrants (fix targeting, scale it, cut or prove it fast, fix onboarding), with five channel bubbles sized by signup volume.

Five channels, plotted by activation rate, retention rate, and signup volume, at once.

Plot the five illustrative channels from the table above and the picture sharpens fast. Paid Social lands as the biggest bubble in the "fix targeting" quadrant: high volume, low activation (30%), but decent retention among the people who do activate (36.7%), which is exactly why the fix is the audience or the creative, not the product. Lifecycle Email is a small bubble sitting in the best quadrant, high activation (75%) and high retention (66.7%), just underscaled at 80 signups, which is the case for investing more, not less. Referral is a small bubble in the worst quadrant, low activation (25%) and low retention (20%), which makes it low stakes to cut: even if the read is wrong, little volume is riding on it.

Look at the losses before you diagnose the cause

The quadrant chart tells you which channel has a problem. It doesn't tell you where in the funnel the problem actually happens, and that matters for what you do next. A second companion visual, "Where Each Channel Actually Loses People," helps here: each channel's own signup count is scaled to 100%, with activated and retained-at-90-days shown as shrinking bars inside it, so you can see at a glance where each channel loses the most people before you jump to a diagnosis.

Bubble chart with activation rate on the x-axis and 90-day retention rate on the y-axis, divided into four quadrants (fix targeting, scale it, cut or prove it fast, fix onboarding), with five channel bubbles sized by signup volume.

Where each channel actually loses people: lost before activation, lost after activation, or retained.

Paid Social and Referral both look bad on the quadrant chart, but they lose people at different stages. Paid Social loses 70% of its signups before activation ever happens (500 down to 150), then loses another 63% of the people who did activate by the 90-day mark, most of the damage happens at the front door. Referral loses people at both stages in roughly the same proportion, about 75% before activation and 80% after, there's no single stage doing most of the damage. That difference changes what experiment you'd run next: a targeting fix for Paid Social, versus a harder question for Referral about whether the channel is worth investigating at all given how little volume is riding on it.

Signups

Activation

Retention

What it means

Retained (60d)

High

Low

Any

Low

Low

High

High

Low

Any

Strong

Weak at 90 days

Weak

Targeting or creative mismatch. The channel is bringing in the wrong people

An underscaled channel. Small volume, but the people who do show up stick around

An onboarding or product problem, not a channel problem

Not earning its spend on any of the three numbers

Not earning its spend on any of the three numbers

Fix the audience or the creative. Moving budget won't fix a targeting problem

Put more budget behind it before you touch anything else

Fix the product experience. The channel isn't the thing that's broken

Cut it

The reason this matters: the same "underperforming" label on a dashboard can mean four completely different fixes. A channel that looks weak because of low signups needs a different response than one that looks weak because activation collapses after people arrive. Treating both as "this channel isn't working" and pulling budget evenly is how teams end up cutting the channel that just needed more spend, while leaving a genuine targeting problem untouched somewhere else.

A few notes on making this hold up under scrutiny:

Define activation once, in writing, and never redefine it channel by channel. If activation means "completed onboarding" for paid social, it has to mean the same thing for lifecycle email and app store installs. The moment the definition shifts depending on which channel you're trying to defend, the whole table stops being evidence and starts being a pitch.

Don't average retention across cohorts of very different sizes. A channel with twelve signups and one retained user is not "8% retention" in any meaningful sense. Note volume alongside the rate so nobody draws a conclusion from a sample too small to support one.

Revisit the table before the conversation, not during it. The value of this framework comes from having it ready before someone in the room asks "which channel is actually working," not from building it live while everyone waits.

The table gives you a hypothesis, not an answer

Say the quadrant chart and the loss chart both point somewhere, Paid Social looks like a targeting problem. That diagnosis is still a hypothesis, not a fact, until something has actually tested it. The table tells you where to look. It doesn't tell you you're right.

The fix isn't a bigger analytics project, it's a small, bounded experiment, run before any real budget moves. A lean team without a data team can still run these:

  • Split the audience or creative, not the whole budget. Put a portion of Paid Social spend into two creative or audience variants for two weeks and compare activation rate between them. This isn't a full incrementality study, it's a simple A/B, and it's enough to tell you whether the targeting hypothesis holds.

  • Hold out a small slice instead of guessing from the aggregate. Pause a campaign in one small geographic region or audience segment for a short window and compare its natural signup rate to a similar region still running the campaign. It's a rough, cheap, directional read, not a rigorous geo-lift study, but it's a real test instead of a guess.

  • Test the product change you suspect, on half the traffic. If the real issue looks like onboarding rather than targeting, ship a single onboarding change to half of new signups and compare 30-day retention between the two groups.

None of these need a data team, a testing platform, or a quarter of runway. They need someone willing to hold off on reallocating the budget for two weeks while a small, cheap test confirms or kills the hypothesis. This discipline, hypothesis first, small test second, budget decision third, is what actually holds up under scrutiny, not a fancier attribution model. It's also the habit that gets hardest to keep as a brand adds channels and runs more campaigns at once: every new variable in play is one more plausible explanation for a pattern shift, which means the test that isolates the real cause matters more, not less, the bigger the account gets. (DOJO can help stand up and monitor a holdout or split test like the ones above, without a data team building the tracking for it from scratch.)

Part 3: Presenting this to leadership without a dashboard team

You don't need a reporting tool to make this land. You need three sentences, one for each of these:

Progress. What changed since the last time you reported this. Organic signups grew. Paid held flat. Lifecycle reactivation dipped after the last send cadence change.

Performance. Which channel earned the strongest activation and retention this period, and which one underperformed, backed by the numbers from your template. Not "paid social feels like it's working," but "paid social produced 40% of signups and 22% of activated users this month," using your actual figures.

Priority. One recommended action. Not five. Shift ten percent of next month's budget from the underperforming channel to the one with strong retention. Fix the onboarding step where a specific channel's users drop off. Pause a listing test that isn't converting to activation.

That's a report leadership can act on in the meeting, not one they need a week to digest. It also protects you: when the numbers are laid out this way, the conversation moves from opinions about which channel "feels" strong to a shared set of facts nobody has to take on faith.

Here's roughly what that sounds like in practice, using placeholder numbers you'd swap for your own:

"Progress: total signups grew this month, mostly from organic search. Paid social spend held steady. Performance: app store listing traffic converted to activated users at a noticeably higher rate than paid social, even though paid social produced more raw signups. Lifecycle email retained users past 90 days better than any other channel, but volume through it is small. Priority: shift a portion of next month's paid social budget into the app store listing test that's driving stronger activation, and hold lifecycle spend flat while we grow its volume."

Notice what's missing from that: no jargon, no dashboard screenshot, no fifteen-slide deck. Just three sentences built from a table anyone on the team could have filled in. That's the whole point. The credibility doesn't come from the format. It comes from every number in it being real, defined consistently, and pulled from the same source every time you report it.

One more thing worth saying plainly: this report is more useful when it includes what didn't work, not just what did. A channel that underperformed this month, named specifically, with the number attached, builds more trust with leadership than a report that only ever finds good news. It also makes the "priority" line land harder, because it's clearly backed by a real trade-off, not a favorite channel getting protected.

Keeping it current is the actual hard part

Building this once, for one month, is a spreadsheet exercise. Doing it every month, across five channels, with new signups and shifting retention curves to track, is exactly the kind of ongoing reconciliation that eats the hours a lean team doesn't have. That's usually where the discipline quietly breaks down and "what's working" drifts back into a Friday-afternoon guess.

That's the specific problem DOJO is built to remove. DOJO cross-references your paid spend, lifecycle sends, and app store listings against your signup and activation data automatically, so the reconciliation this guide walks through updates on its own instead of depending on someone finding a spare afternoon each month. It goes a step further than reconciling the numbers, too: it's what makes it possible to run the diagnosis from Part 2 every month, across every channel, without someone manually re-deriving which channel is a targeting problem, which is underscaled, and which is a product issue disguised as a marketing one. Learn more

For now, the framework above works with nothing more than the spreadsheet you already have open. Start with the checklist, fill in the table for the last full month, and bring the three-sentence version to your next leadership update. You'll have a better answer than "it feels like paid is working" before the meeting starts.

Join the 100+ brands already growing with us.