adstock nico rubino

Advertising Adstock: A Practical Guide with Excel Template & Python Code

Introduction

If you’re a CMO, founder, or performance marketer, you’ve likely heard of Adstock, but maybe you’ve never had the time or tools to really apply it. I’ve been there too.

After 12 years working in growth marketing, across agencies, startups and corporations, I’ve seen how often Adstock is overlooked, even though it can completely change how we measure campaign impact.

In a perfect world, we’d be able to track every conversion back to the right channel, perfectly and instantly. But in the real world, attribution is messy. People don’t see an ad and convert right away. Ads build familiarity, trust, and intent—that takes time. Adstock helps model that delay so you can get a more realistic view of performance.

I created this guide to help marketers like you make sense of it with practical tools. Inside, you’ll find both a free Excel template and a ready-to-use Python (Pandas) script, so you can apply Adstock whether you work in spreadsheets or code.

Let’s dive in. ☺️

What is Adstock in advertising?

Adstock (sometimes referred to as “carryover” or “decay”) is a concept first introduced by Simon Broadbent in 1979. And while it may sound academic, it’s deeply relevant to any growth marketer working across paid media, especially when you’re asked a familiar but tricky question:

“What’s the long-term impact of our campaign after we’ve stopped spending?”

Let’s say you’ve launched a new campaign on Meta or Google Ads. The early KPIs look promising—CTR is strong, traffic is up, conversions are rolling in. But what if your client or CEO asks for more?

  • “What about long-term ROI?”
  • “Did the campaign keep influencing people after it paused?”

This is where Adstock steps in.

Adstock acknowledges that the effect of advertising doesn’t stop when the campaign ends. Its impact fades gradually over time, but doesn’t disappear immediately. The consumer might not act right away, but the exposure lingers: in memory, in brand perception, in future intent.

Understanding this effect is key to measuring true ROI, especially for channels that influence awareness, consideration, or delayed purchases.

Why Adstock Happens: Key Drivers

As marketers, we know that not all impressions are equal. Here are some of the elements that fuel the Adstock effect (Willshire, 2022):

  1. Ad Memorability: the higher the emotional resonance in the ad, the more captivating the format, the increased probability individuals will remember it.
  2. Purchase Cycle: if you come across an advertisement for a product that you only purchase on a monthly basis, it might take a few weeks before you take any action.
  3. Channel Mechanism: there’s the channel mechanism to consider. Email campaigns may require a few days for delivery and opening; PPC have a shorter life cycle.
  4. Repeat Purchases: consider new vs. frequent customers. A customer may continue making purchases for several months and theoretically, could still be linked to that initial advertising effort.

 

What May Reduce Advertising Adstock?

It is worth mentioning there will also be factors which effectively reduce the adstock such as competitor advertising pressure, promotions, or low customer experience. Also, as you can see in the chart below, some marketing channels tend to have longer effects than others.

  • Not every campaign benefits from strong Adstock. Its effect can fade faster due to:
  • Competitor ad pressure
  • Poor customer experience
  • Lack of reinforcement or remarketing
  • Promotions ending
  • Weak creative

 

Advertising Adstock

Fig 1, Advertising adstock theory, M. Mikes, 2016

How Does Adstock Work?

At its core, Adstock is a formula that models how advertising fades over time. Instead of assuming the impact of your campaign ends when your budget runs out, Adstock helps you visualize how each day of media spend continues to influence results in the days or weeks that follow.

 

Adstock Formula

The basic formula looks like this:

Advertising Adstock

In this formula, λ is the decay rate, representing the speed at which the ad’s effect diminishes over time. Let’s break it down:

  • Adstock t, it is the cumulative effect of advertising at that specific time (week1, 2, 3, or month1, month 2, month 3, etc.)
  • Ad(t):
    • Advertising exposure at time x, which is the impact of the advertising campaign in the current period.
  • λ: Adstock rate:
    • A constant factor representing how quickly the impact of advertising diminishes over time. It is critical to forecast this value for a reliable outcome.
  • AdStock(t-1):
    • Advertising spend and impact in the previous period

How the Decay Rate (λ) Works

The decay rate (λ) is a number between 0 and 1 that controls how “sticky” your ads are over time.

  • If λ = 0.0 → the impact ends immediately (no Adstock effect)
  • If λ = 0.5 → the effect halves each day
  • If λ = 0.9 → the effect fades slowly and lingers for days

As a rule of thumb, we get a 0.3–0.5 for fast-response channels (Search, retargeting) and 0.6–0.8 for memory-building channels (YouTube, Meta, TV).

 

An Example: YouTube Ads

Let’s say a brand runs a YouTube ad campaign, which typically has a slower decay due to its high visual and emotional impact. We assume a decay rate (λ) of 0.6.

  • This week’s ad spend: €80,000
  • Last week’s Adstock (carryover effect): €40,000

Using the formula:

Adstock t​=80,000+(0.6×40,000)=80,000+24,000=104,000

Even though the brand spent only €80,000 this week, the effective advertising pressure on the market is €104,000, because 60% of last week’s YouTube exposure still influences the audience.

What are Diminishing Returns?

In Marketing Mix Modeling, diminishing returns describe the effect where each additional euro or dollar spent on advertising generates less incremental impact than the one before. While Adstock accounts for how advertising influence fades over time, diminishing returns show that more spend doesn’t always mean more results—especially as you reach audience fatigue or media saturation.

This ties directly into the concept of saturation in advertising, which occurs when a particular market or audience segment has already been exposed to a campaign enough times that further exposure no longer moves the needle. At this point, your ad spend becomes less efficient, and the marginal gain in awareness or sales starts to flatten or even decline.

Econometrically, this is often modeled using the Hill function, a non-linear curve that shapes the media response based on spend levels.

In the image below see the difference between memory decay and spend saturation. On the right, Diminishing returns usually get a flatten as media spend increases.

Advertising Adstock

Calculate AdStock in Excel. Free Template

With just Excel, you can calculate Adstock and uncover insights that go beyond immediate campaign performance. Feel free to download the file and edit my Adstock Google Sheet template.

 

As shown above, in the columns C, D, E I included the actual media spend by weeks. In the columns F, G, H I transformed the costs in Adstock which shows the long lasting effect of media advertisting.

As can be seen in the following chart more clearly for Facebook Ads: by setting a λ of 50%, the positive effect of advertising would lasts for about 12 weeks, while the campaign was running for only 5 weeks.

Advertising Adstock

 

Python Code: Calculate Advertising Adstock in Pandas

This code has been inspired by Niall Oulton’s approach which used a smoother and recursive formula.


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def adstock_transform(spend, decay=0.5, max_lag=30):
    adstocked = np.zeros(len(spend))
    for i in range(len(spend)):
        for j in range(max_lag):
            if i - j >= 0:
                adstocked[i] += spend.iloc[i - j] * (decay ** j)
    return adstocked / adstocked.max()  # normalize peak to 1

# Sample daily data
df = pd.DataFrame({
    'day': pd.date_range('2024-01-01', periods=120, freq='D'),
    'spend': np.random.randint(500, 2000, size=120)
})

df['adstock_norm'] = adstock_transform(df['spend'], decay=0.5, max_lag=30)

plt.figure(figsize=(12, 6))
plt.plot(df['day'], df['spend'], label='Original Spend', alpha=0.6)
plt.plot(df['day'], df['adstock_norm'], label='Normalized Adstock', color='green')
plt.title('Original Spend vs Normalized Adstock (decay=0.5, 30-day lag)')
plt.xlabel('Date')
plt.ylabel('Value (peak=1)')
plt.legend()
plt.tight_layout()
plt.show()

How Does Adstock Compare to Other Marketing Models?

While Adstock is a powerful way to model the lingering impact of advertising, it’s not the only approach used to understand marketing effectiveness. Below is a comparison of similar methods that marketers and data scientists

ConceptDescriptionUse Case
AdstockMeasures carryover effects of advertising over timeMarketing mix modeling, ROI analysis
Lag VariablesAccounts for time delay between ad exposure and conversionTime series modeling, attribution
Diminishing ReturnsModels the reduced incremental impact of additional spendBudget allocation and media saturation analysis
Brand Equity ModelingCaptures long-term brand asset accumulationStrategic branding, valuation

How Does the Adstock Effect Relate to Other Metrics?

The Adstock Effect is closely connected to how we interpret core marketing performance indicators like ROI, Brand Awareness, and Customer Lifetime Value. Since Adstock models the lingering effect of advertising over time, it gives a more realistic view of ROI by including conversions and brand influence that happen after the campaign has ended. It also aligns naturally with Brand Awareness, as both depend on memory, repetition, and exposure buildup—especially for emotional or video-based campaigns. When it comes to Customer Lifetime Value, Adstock can help attribute a portion of long-term customer behavior back to the original campaign that sparked the relationship. In essence, it helps you move from short-term thinking to a broader view of marketing impact across the funnel.

Conclusion

In a world where third-party cookies are disappearing and mobile tracking is increasingly limited, Adstock has become more relevant than ever. As a practical econometric tool, it helps marketers understand the real impact of advertising over time—well beyond immediate clicks or last-touch attribution.

Often used within Marketing Mix Modeling (MMM), Adstock provides a more accurate, human-centered view of how media shapes awareness, influences behavior, and drives long-term value. It helps connect spend with sustained outcomes—especially when working across multiple channels and longer decision cycles.

From my own experience running campaigns for international brands and beyond, Adstock is still underused. Too many teams focus only on short-term KPIs, missing out on insights that could drive better budget decisions, especially for awareness and brand-building channels.
It deserves a more central role in how we evaluate media performance.

Did you find this blog post useful? Do you have any questions? I am happy to schedule a 15 mins of virtual coffee with you 🙂

 



Bibliography

Danaher, P. (2017). Advertising effectiveness and media exposure. In Wierenga, B. & van der Lans, R. (2017) Handbook of marketing decision models. International Series in Operations Research & Management Science 254. NY: Springer.

Firstdigital, (2020, September, 21). Using the Adstock Approach for Modeling Advertising Effectiveness.

Govindan, G., Baig, M. R., & Shrimali, V. R. (2021). Data Science for Marketing Analytics: A Practical Guide to Forming a Killer Marketing Strategy Through Data Analysis with Python. Packt

Mikes, M. (2016, August 27). Advertising adstock theory.

Van Heerde, Harald (2018), Block 2: Measuring Advertising Effectiveness [PowerPoint slides]. Massey University, Return on Marketing Investment. Stream.massey.ac.nz

Willshire, A. (2022). Adstocks: Accounting for the Lagged Effect of Advertising. Recast

FAQs

1.Can I use Adstock without running a full MMM model?

Yes. You can calculate Adstock in Excel or Python to gain insights into how past media spend might still be influencing today’s conversions

2. I dont use MMM, I use DataDriven Attribution can I use Adstock effect?

No, you cannot directly apply AdStock, because DDA is a black-box algorithm. However, Google DDA already uses its own machine learning to assign credit based on probabilistic user paths.

3. What’s a good decay rate (λ) to start with for my campaigns?

There’s no universal answer, but a common starting point is 0.3–0.5 for direct response on Search or Retargeting. 0.6–0.8 for awareness TOFU.

4. Does Google or Meta already apply Adstock in their reporting?

No. Platforms like Google Ads or Meta Ads do not apply Adstock. I can help you to implement Adstock with Paid Media campaigns.

5. Should I apply Adstock before or after modeling diminishing returns?

Typically, Adstock is applied first. Then you model diminishing returns on top

2560 1707 Nicola Rubino
2 Comments

Leave a Reply