Q. What is adstock?
Adstock (advertising carryover effect) is the idea that an ad exposure's effect doesn't fully show up on the day it runs, it decays and accumulates over several days instead. The larger the decay rate (λ), the longer the effect lingers. In one real-world measurement, an estimated 90% of the cumulative effect was realized within 7 days.
Three lines you can use today
- Don't conclude "no effect" just because exposure volume (views) alone shows a low correlation, that can be an underestimate that misses spend intensity and delay.
- Stack channel signal, brand search volume, and ad spend as three parallel date-level time series, that's the minimum unit for measuring effect without individual-level tracking.
- Don't jump from high correlation to causation. Suspect a confounder like ad spend first, and confirm it by removing channels one at a time.
A Correlation of 0.15, Does This Ad Really Not Work?
I once went back over 509 days, about a year and five months, of data for an online video content (product placement) campaign (internal analysis, unpublished). Lining up content views and brand search volume by date and running the correlation produced 0.15.
You don't need to know statistics to sense that number is low. If you'd been the one in charge, it wouldn't have been strange to conclude on the spot, "This ad isn't driving brand search, let's cut the budget."
But before reaching that conclusion, there was one question to ask first. In a situation where you can't track at the individual level who watched this video and later searched or made an inquiry, is it okay to declare "no effect" based on a single correlation coefficient?
This post tries to answer three questions: whether low correlation really means no effect, how to measure channel effect in an environment where individuals can't be tracked (the dark funnel), and whether it's safe to believe an ad run today shows its full effect today.
When Per-Channel Performance Won't Show Up, What's Left Is the Time Series
The reasons individual-level tracking gets blocked are the same ones covered in the dark funnel tracking guide. Paths a single cookie can't follow all the way, offline inquiries, logged-out views, journeys that hop to another device, account for a substantial share of actual conversions.
That's no reason to give up, though. You may not know who watched, but you do know when they watched and when the company's overall metrics moved. Flip the framing this way and a path appears: instead of chasing individuals, line up channel signal and performance metrics side by side on the shared axis of date.
The time series here isn't anything grand. It's just two rows of numbers lined up by date. Write one row for this channel's activity (views, clicks, ad spend) and another for company-wide performance (brand search volume, inquiries, revenue), both keyed to the same dates, and you start to see whether the two move together or move with a lag of a few days between them.
Image: you may not know who watched, but you know when. Lining up two curves by date is where it starts.
Baseline and Lift: Only What Rises Above the Usual Level Belongs to the Ad
Lining up two time series and immediately reading it as "this is the ad's effect" walks straight into another trap. On any given day, some amount of revenue or inquiries happens even with zero ads running, a share created by brand equity, organic search demand, repeat purchases from existing customers, distribution and pricing conditions, and the like.
That share is called baseline: sales or conversions estimated to have happened even with zero marketing intervention. The portion where actual measured results rise above that baseline, only that difference can be credited to the ad or campaign, and it's called incremental lift.
A bathtub makes this click. The tub already has some water in it (baseline). Turn on the faucet and more water comes in, raising the level (lift). If you look only at today's water level and say "all of this is thanks to the faucet," you end up crediting the ad for water that was already there.
Image: the water that was already there is the baseline, what the faucet newly fills is the lift.
Separating baseline from lift in actual measured data is the core output of marketing mix modeling (MMM). The goal is to statistically model historical sales data together with marketing investment, price, promotions, competition, and macroeconomic variables, splitting out the share driven by factors outside marketing (baseline) from the marketing contribution layered on top of it (lift).
The most common mistake in practice is not making this distinction at all. Put "this month's total revenue" straight into an ad performance report, and even the share that would have sold anyway gets credited to the ad. When next quarter's budget gets built, this illusion carries straight through into an overvalued channel budget.
Adstock: Today's Ad Doesn't Show Its Full Effect Today
There's one more gap that separating baseline from lift alone doesn't close: someone who sees an ad running today doesn't search or buy the same day. Far more people take days after seeing the ad before it turns into actual behavior.
This delay-and-carryover effect is called adstock. The concept is widely credited to Simon Broadbent, who first proposed it in his 1979 paper "One Way TV Advertisements Work." This research, though, only confirmed the account that multiple secondary sources cite consistently, it didn't cross-check the original 1979 paper directly.
The core formula looks intimidating, but in words it's simple: "the ad effect remaining today equals today's new exposure plus a portion of the effect still left over from yesterday." What decides how much of yesterday's effect carries over to today is the decay rate (λ), and without new exposure, this effect shrinks little by little over time.
How much delay shows up in practice varies case by case. In one real-world measurement (internal analysis, unpublished), the decay rate came out to λ=0.75, and based on that parameter, an estimated 90% of the cumulative effect was realized within 7 days.
Exposure lands once on day 0, but its effect decays and gets realized across many days (figures are estimates from one real-world measurement).
What actually happens when you ignore this delay is the real problem. Run a model on the same data binding only "same-day views → same-day results," and the unexplained baseline share balloons up to 60%. Most of the ad's effect leaks into the "it would have happened anyway" bucket.
Apply adstock, a model that accounts for the delay, to the same data, and that baseline share drops to 26%, while R² (the fit measure showing how well the model explains actual data) jumps from 0.30 to 0.74. Not accounting for the delay creates an underestimation illusion, where a channel's real contribution looks smaller than it actually is.
That said, memorizing these numbers, λ=0.75, 60%→26%, R² 0.30→0.74, as standard values would be a mistake. They're specific parameters from one real-world case, and decay rates come out differently by industry and channel. What to take from this isn't the numbers but the pattern, the structure where "same-day attribution alone makes the delayed effect vanish entirely."
Correlation Isn't Causation: The Confounder Called Ad Spend
Even after re-running the correlation with the delay accounted for, jumping straight from "high correlation" to "so this channel is the cause" walks into yet another trap. A third variable that moves both metrics at once might be hiding underneath.
The most widely used example is the relationship between ice cream sales and drowning incidents. In summer, ice cream sales rise and swimming accidents rise too, producing a high correlation between the two, but ice cream doesn't drown anyone. Both simply moved together because of a shared cause: hot weather.
Image: ice cream sales and drowning incidents rise together, but the cause behind both is the same hot sun.
In marketing, the role of this shared cause is most often played by ad spend itself. In the real-world measurement seen earlier (internal analysis, unpublished), the correlation between total ad spend and total conversions came out fairly high at 0.666, but digging in, it turned out the budget of other paid ad channels was strongly driving conversions on its own. Meanwhile, the direct correlation between content views and total conversions was nearly nonexistent at 0.06, and the correlation between brand search volume and total conversions was only 0.30.
When ad spend pushes both up together, an inflated correlation shows up between search volume and conversions too (figures are from one anonymized real-world measurement).
The most widely cited academic counterexample is eBay's brand search ad experiment (Blake, Nosko & Tadelis, Econometrica, 2015). eBay ran a large-scale field experiment turning brand keyword search ads off and on in parts of the US, and the result was unexpected. Brand keyword ads produced almost no measurable short-term gain. Most users were already arriving through organic search regardless of whether the ad ran.
Ad spend and sales moved together, making the correlation look high, but the real cause was a third variable: "people who already intended to buy." No amount of staring at observational data peeled back this illusion, it only surfaced through an on/off experiment. That said, the exact details of the experiment's design, like the number of regions or duration, were only confirmed at the level of secondary summaries, the original paper itself wasn't reviewed directly.
A common mistake in practice is reporting "this channel drove the results" for no reason other than a high correlation. With a strong confounder like ad spend in play, isolating cause from observational data alone is structurally difficult. Confirming real causation needs an experiment, or at minimum a change that approximates a natural experiment.
What Changing the Metric Reveals: Why Views' 0.15 Became Spend Intensity's 0.44
Let's return to the question posed earlier. Did the 0.15 correlation between views and brand search volume really mean "no effect"? Swapping out one metric in the same data gave a different answer.
Running the correlation between spend intensity (the ad spend actually burned over the same period) and brand search volume instead of views, the number climbed to 0.44. Views turned out to be a metric that only distinguished "seen or not seen," it couldn't capture how hard the push actually was.
In other words, the problem wasn't the ad itself, it was metric choice. Concluding "no effect" from a shallow metric like exposure volume alone would have nearly missed a real signal that was showing up from a different angle, spend intensity. Not giving up on one weak correlation and checking again with a different metric is the thread running through this entire case.
So Starting Tomorrow: Three Rows of Time Series and One Calendar
The reason for getting this far comes down to one thing: measuring channel effect without tracking individuals means you have to start stacking data now. A time series is something you can't build retroactively.
The minimum setup is three rows: channel signal (activity this channel generated, like views and clicks), brand search volume (trends in searches for the company or service name), and ad spend (spend intensity actually burned on this channel), stacked side by side at the date level. Add an event calendar marking things like campaign start and end dates, seasonal promotions, and major competitor events, and it becomes a clue for telling apart "is this thanks to the ad or thanks to the season" later, when you look at correlation or lag.
Image: channel signal, brand search volume, ad spend. Start stacking three rows side by side, together with a calendar.
Add conversions (inquiries, purchases) to these three rows and overlay all four, and it starts to reveal which metric moves first and which follows a few days later. Below is an example previewing what that looks like.
Overlay the four rows and you start to see which metric responds first and which follows a few days later (example figures, not real data).
The trap in practice is thinking "I'll start stacking it when I need it later." A time series can't be rewound and built from the past. Turning on these three rows and the calendar the moment you launch a new ad channel is, in itself, the only material that can answer the question "did this channel really work" next quarter.
If You Want to Go Further: Open-Source MMM and Free Natural Experiments
What we've covered here is at the level of concepts: baseline, lift, adstock, confounders. Actually running these time series through a model to estimate per-channel contribution needs tools, and several free, open-source MMM (marketing mix modeling) packages have come out recently.
Robyn, released by Meta, is an open-source package that combines Ridge regression with a multi-objective evolutionary algorithm to auto-search hyperparameters, bundling in time-series decomposition and budget allocation optimization. Meridian, which Google fully released in February 2025, is built on a Bayesian causal inference framework and states its goal as producing ROI confidence intervals and response curves. To be upfront, though, neither tool was actually run here to compare results, this research only confirmed their character and approach at the level of their official introduction pages.
There's one thing you can try right now without any tools: a sequential removal experiment. If you're running several channels, there's usually one you're already debating cutting because its effect looks ambiguous. Rather than turning off multiple channels at once, turn them off one at a time in sequence, spacing each off-period by roughly the adstock length, and comparing before-and-after metrics gets you evidence close to a natural experiment at almost no cost.
Image: if you're cutting a channel anyway, don't turn them all off at once, turn them off one at a time and watch before and after.
History Lesson Over, Time to Hold It Up to Your Own Data
That covers the concepts. What's left is holding this lens up to the data you have today.
- Re-check your metric: are you only looking at exposure volume (views)? Pull a spend-intensity metric like ad spend alongside it and re-check the correlation.
- Open a time series: are channel signal, brand search volume, and ad spend all being stacked at the date level? If not, start today.
- Keep an event calendar alongside it: are campaigns, seasonal promotions, and competitor events marked by date? Always keep it next to your correlation table.
- Account for delay: are you analyzing with same-day attribution only? Re-run the correlation with at least a few days' lag to strip out the baseline illusion.
- Suspect a confounder: if a channel shows a high correlation, suspect a shared cause like ad spend first and verify it with sequential removal.
If you take away just one thing, let it be this.
Low correlation doesn't mean no effect, it might just mean you haven't matched the right metric and lag yet.
This post is Part 9 of the Digital Marketing Analytics Basics series. Having covered how to measure effect with time series where individual tracking is blocked, next comes how to actually fill that time series with real GA4 and search data.
- Root of the idea: Dark Funnel Tracking Guide
- Building the basics: Getting Started with GA4
- Deep dive: Finding Who Owns Brand Search Conversions in GA4
Sources
- Origin of the adstock concept (common account, original not cross-checked): Advertising adstock, Wikipedia, Simon Broadbent, "One Way TV Advertisements Work", Journal of the Market Research Society, 1979
- Baseline and incremental definitions: Marketing Mix Modelling, Baseline and Incremental Volume, Ashok Charan
- MMM overview: Marketing Mix Modeling, Measured
- Incremental lift definition: Understanding Incremental Lift, Cassandra
- Correlation vs. causation, brand search ad field experiment: Consumer Heterogeneity and Paid Search Effectiveness: A Large-Scale Field Experiment, NBER Working Paper (Blake, Nosko & Tadelis)
- Formal publication of the above experiment: Econometrica, 2015
- Open-source MMM (Meta): Robyn official documentation
- Open-source MMM (Google): Meridian official introduction
The figures in this post, λ=0.75, baseline 60%→26%, R² 0.30→0.74, and correlation coefficients of 0.15, 0.44, 0.30, 0.06, and 0.666, all come from an anonymized real-world measurement kept internally, and the original project name and client are not disclosed (internal analysis, unpublished). These numbers are specific parameters from that one case, not a benchmark generalized across industries or channels. The origin of adstock (Broadbent, 1979) and the detailed design of the eBay experiment weren't reviewed in the original source directly, they were cross-checked through secondary sources. Robyn and Meridian were confirmed only at the level of their official introduction pages, they were not run directly for comparison.
Found this useful? Share it
Latest posts
Kakao Share Thumbnail Not Showing? Here's the Fix (JavaScript SDK 2025)
Learn why Kakao Share thumbnails don't appear even with a valid imageUrl, and fix it using scrapImage to convert your URL into a KAGE CDN URL. Step-by-step guide.
How to Generate CRM User Manuals in 20 Minutes with Claude Code Sub-Agents
Learn how Claude Code sub-agents can analyze your CRM codebase and auto-generate user manuals and visual guidebooks in just 20 minutes. See the real-world results.
GEO Generative Engine Optimization: The Complete 2025 AI Marketing Strategy Guide
Learn what GEO (Generative Engine Optimization) is, how it differs from traditional SEO, and discover 5 proven AI marketing strategies to get cited by AI search engines in 2025.
Related projects
Get new posts by email
Insights on marketing, analytics, and dev, delivered to your inbox.
