adlibrary.com Logoadlibrary.com
Share
Competitive Research,  Advertising Strategy

Tracking Competitor Seasonal Campaigns: BFCM, Q5, Prime Day

Competitors telegraph BFCM, Q5, and Prime Day plans weeks early. Track competitor seasonal campaigns with date-window queries, ramp signals, and teardowns.

Competitor seasonal campaigns dashboard: ad volume ramp chart over a holiday calendar

Your competitors will tell you their Black Friday plan. Not in a press release — in their ad accounts. Tracking competitor seasonal campaigns works because a seasonal push cannot launch quietly: offer tests, creative volume ramps, and format shifts all run on public ad inventory weeks before the sale goes live. An ecom marketer who reads those signals plans the season against reality. Everyone else plans against guesses.

TL;DR: Competitor seasonal campaigns become visible 3-6 weeks before the event. Watch three signals: creative volume (active ad count, week over week), offer testing (new ads carrying discount language), and format shifts (video and UGC share climbing). Compare this year against last year with dateFrom/dateTo queries, run a weekly early-warning poll per rival brand, and do a post-season teardown while the data is fresh. Put Q5 on the calendar too. The week after Christmas buys the cheapest reach of the year.

This guide walks the full workflow: a signal calendar that tells you when ramps start for each event, date-window queries for year-over-year comparison, an early-warning setup that catches offer testing in week one, a method for reading promo depth straight from creatives, the Q5 window most brands ignore, and the post-season teardown that turns this year's observations into next year's plan.

Why Competitors Telegraph Seasonal Strategy Weeks Early

Nobody launches a Black Friday campaign on Black Friday. Media plans lock in October. Creative production wraps in early November. And offer testing runs in public, on live traffic, because there is no private place to run it.

Two mechanics force the early reveal.

Learning phases punish late launches. Meta's delivery system needs conversion volume before it stabilizes, and an ad set stuck in the learning phase during a four-day sale never gets the chance to exit it. Brands that learned this the hard way now launch seasonal campaigns early and warm them up on modest budgets. Early launch means early visibility.

Ad transparency is mandatory. Every active Meta ad appears in the Meta Ad Library, and Google publishes advertiser creatives in its Ads Transparency Center. A competitor cannot test a Black Friday offer on Facebook traffic without that test being publicly listed the same day.

The result is a window of three to six weeks where competitor seasonal campaigns sit in plain sight before the event. Three signals matter most:

  • Creative volume ramps. A brand running 40 active ads through September that jumps to 90 by early November is staging for BFCM. The ramp size hints at the budget behind it.
  • Offer testing. Small batches of new ads carrying "early access", "VIP list", or a specific percent-off, run at low spend to find the discount depth that converts before the event budget commits.
  • Format shifts. Video share rising, UGC ads appearing, vertical 9:16 cuts showing up. Production investment like that only pays back at seasonal traffic volume.

The stakes justify the effort. The National Retail Federation's holiday research consistently puts the November-December stretch at roughly a fifth of annual retail sales for many categories. Whoever reads the market better during those weeks wins a disproportionate share of the year.

None of this requires scraping. It requires a calendar, a handful of queries, and the discipline to run them weekly. If structured competitor ad research is new territory, start there, then come back for the seasonal layer.

The Seasonal Signal Calendar: When Ramps Actually Start

Each event has its own lead time. The table below reflects typical ecommerce behavior. Treat it as a starting hypothesis to verify against your actual competitors, not as gospel.

EventWhen it runsOffer testing startsVolume rampWatch for
Prime DayMid-July, dates announced by Amazon weeks aheadEarly JuneLast week of JuneDTC counter-programming
Back-to-schoolLate July through AugustLate JuneMid-JulyBundles, parent-targeted creative
HalloweenOctober 31Mid-SeptemberEarly OctoberCostume, candy, decor verticals
BFCMFriday after US Thanksgiving through Cyber Monday (Nov 27-30 in 2026)Mid-OctoberFirst week of NovemberDiscount depth tests, early-access list building
Q5December 26 to mid-JanuaryNone — Q5 is itself a live test windowDecember 26BFCM winners recut with self-gifting angles
Valentine's DayFebruary 14Early JanuaryLate JanuaryGifting bundles, deadline countdowns

Two adjustments sharpen the calendar. Higher-AOV brands ramp earlier, because considered purchases need more touchpoints before the buying window. And brands with strong email lists ramp paid later, since they warm their own audience first and use cold traffic only for the event itself.

The calendar also shifts by vertical. Beauty and apparel brands run the longest BFCM ramps because creative variety is their main lever, while supplements and consumables ramp late and lean on discount depth instead. Competitor seasonal campaigns in gifting-adjacent niches compress everything into the final two weeks, since their buyers do not shop early no matter what the ads say. Whatever your category, the first year of tracking builds the calendar. Every year after that refines it.

Verifying the calendar per competitor is cheap. Run one volume snapshot per brand per month: a single search, read the total count in the response, log it. Chart those numbers in a spreadsheet and the ramp draws itself. A Google Sheets competitor dashboard handles the logging with one Apps Script function. For individual ads, ad timeline analysis shows first-seen and last-seen dates, which is how you confirm a ramp rather than infer it.

Date-Window Queries: Compare Competitor Seasonal Campaigns Year Over Year

The strongest predictor of a competitor's next BFCM is their last BFCM. Brands repeat what worked, and a year-over-year ad comparison shows you exactly what they decided was worth repeating.

The AdLibrary API search endpoint accepts dateFrom and dateTo parameters that override the rolling daysBack presets, so you can pull a precise historical window:

python
import requests

API = "https://adlibrary.com/api/search"
HEADERS = {"Authorization": "Bearer adl_your_api_key"}

def window_snapshot(keyword: str, date_from: str, date_to: str) -> dict:
    r = requests.post(API, headers=HEADERS, json={
        "keyword": keyword,
        "appType": "3",          # e-commerce vertical
        "dateFrom": date_from,   # YYYY-MM-DD, overrides daysBack
        "dateTo": date_to,
        "sortField": "-impression",
        "pageSize": 100,
    })
    data = r.json()
    ads = data["results"]
    video = sum(1 for a in ads if a.get("ads_type") == 2)
    return {
        "total": data["total"],   # full match count for the window
        "video_share": round(video / max(len(ads), 1), 2),
        "top_ads": [
            {"title": a.get("title"), "impressions": a.get("impression")}
            for a in ads[:5]
        ],
    }

this_year = window_snapshot("gymshark", "2025-10-15", "2025-12-01")
last_year = window_snapshot("gymshark", "2024-10-15", "2024-12-01")
print(this_year["total"], "ads vs", last_year["total"], "a year earlier")

Two searches, two credits, and you hold both BFCM run-ups side by side. The total field in the response is the headline metric: it tells you whether the brand scaled seasonal volume up or down without paging through every result.

Four comparisons carry most of the insight:

  1. Volume. More ads than last year usually means more budget or more aggressive testing. A 2x jump is a statement.
  2. Format mix. Video share climbing year over year tells you where their production money went.
  3. Launch timing. If first_seen dates cluster earlier than last year, they moved the whole ramp forward and you should too.
  4. Returning creative. An ad concept from last November that reappears this November converted. A returning creative is the closest thing to a leaked performance report you will get from competitive intelligence.

Mind the limits while you batch these: the API allows 10 requests per minute and 10,000 per day per key, and a 429 response carries a Retry-After header your script should honor. Each search costs 1 credit, and failed searches refund automatically. The Python cookbook has ready-made pagination and backoff patterns if you would rather not write them yourself.

Early-Warning Setup: Catch Offer Testing Before the Sale

A year-over-year comparison tells you what they did. The early-warning poll tells you what they are doing this week, which is the part that changes your decisions in October.

The setup is one scheduled query per competitor, filtered to the last seven days and sorted by newest first:

bash
curl -s "https://adlibrary.com/api/search" \
  -H "Authorization: Bearer adl_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "ridge wallet",
    "appType": "3",
    "daysBack": 7,
    "sortField": "-first_seen",
    "pageSize": 100
  }' | jq '{new_this_week: .total,
           sample: [.results[:5][] | {title, body, first_seen}]}'

Wire two alert conditions on top of the output:

  1. Volume spike. This week's new-ad count exceeds twice the brand's trailing eight-week baseline. That is the ramp starting, usually 3-4 weeks out from the event.
  2. Offer language. Any new ad matching a promo pattern like (\d{1,2})% off|early access|VIP|sitewide. That is offer testing, and it tends to precede the volume spike by another week or two.

Route the hits into a channel your team actually reads. The Slack alert build takes about 30 minutes, and GitHub Actions runs the schedule without a server. For the broader architecture behind launch detection, see how to detect competitor campaign launches and the end-to-end monitoring guide.

One refinement matters for seasonal work: competitor seasonal campaigns rarely test on a single network. A rival might stage BFCM creative on Meta while testing Google demand-gen placements for the same offer. Resolving a brand across platforms is a free call (GET /api/advertisers/search), and saving it once lets a single curate request pull its recent ads from Meta, Google, and LinkedIn together, deduplicated, for 1 credit per 30-minute session. The cross-platform tracking pipeline covers that pattern, and saved ads keep the keepers organized as you go.

The math stays small. Ten competitors polled weekly is roughly 40 searches a month — 40 credits — for a continuously updated read on every rival's seasonal posture.

Reading promo depth in competitor seasonal campaigns: discount tags across ad creatives

Reading Promo Depth From Creatives

Promo depth is the actual discount a competitor commits to, and it leaks early. Most brands run a discount ladder: shallow tests first, the real event depth later. If a rival tests 25% off in mid-October and ran 40% sitewide last Black Friday, plan against 40% or deeper, because nobody walks their headline offer backward once customers remember it.

Depth hides in plain text fields. Pull it with a regex over each new ad's copy:

python
import re

PROMO = re.compile(r"(\d{1,2})\s?%\s?off", re.I)

def promo_depths(ads: list[dict]) -> list[int]:
    depths = []
    for ad in ads:
        text = " ".join(
            str(ad.get(k, "")) for k in ("title", "body", "message", "button_text")
        )
        depths += [int(m.group(1)) for m in PROMO.finditer(text)]
    return sorted(depths)

Run it weekly against the early-warning results and log two numbers per competitor: maximum depth seen and median depth. The max creeping upward across October is the ladder climbing toward the event offer.

Depth tracking is also where competitor seasonal campaigns reveal margin structure. A brand that sustains 50% sitewide either carries very high gross margins or treats BFCM as a loss-leading list builder. Either read changes how seriously you should treat their depth as a benchmark for yours.

Copy patterns reveal commitment level too. A button_text shift from "Shop Now" to "Get 40% Off" means the offer moved from test to headline. Watch for urgency and scarcity framing entering the copy ("ends Monday", "while stocks last"), which typically lands only when the event creative is final.

Then defend your margin before you match anything. A 40% sitewide discount that looks scary in a competitor's ad may be unprofitable in your own unit economics. Run the matching scenario through the break-even ROAS calculator first, and size the event spend with the ad budget planner. Matching depth blindly is how seasonal pushes hit record revenue and lose money in the same week.

Q5: The Underrated Window After Christmas

Q5 is the stretch from December 26 to mid-January, the "fifth quarter" that TikTok for Business spent years evangelizing. The mechanics are simple: big-box holiday budgets exhaust themselves by Christmas Day, auction pressure collapses, and ad costs drop hard while shoppers keep buying. Gift cards want spending. Returns become store credit. Resolutions create demand from nothing.

How a competitor behaves in Q5 is one of the most honest reads of their sophistication you can get from tracking competitor seasonal campaigns:

  • Leftovers. Their BFCM ads simply keep running with stale "Black Friday" copy into January. No plan. Their cheap-reach window is yours for the taking.
  • A planned window. Fresh creative appears on December 26 with self-gifting angles, "new year, new you" framing, or gift-card landing pages. This brand plans Q5 deliberately, and their angle choices are worth studying.

The query is one date-window search per competitor, dateFrom December 26 to dateTo January 15. Compare what comes back against their BFCM set. Same assets recut with new hooks means they amortize production across both windows, which is itself a tactic worth stealing. Entirely new creative angles mean they treat Q5 as a first-class campaign.

For your own plan, the asymmetry is the point. Q5 is the one seasonal window where showing up at all beats most of the field, because half your competitors go dark on December 24 and stay dark until February.

Prime Day: Track the Halo Beyond Amazon

Prime Day is Amazon's invention, a mid-July event running since 2015 that has since grown a second edition in October, per Amazon's own announcements. The mistake is treating it as Amazon-only intelligence. Prime Day inflates buying intent across the entire ecommerce market for a week, and every DTC brand in your category has to make a decision about it. That makes Prime week the most information-dense stretch of the year for anyone watching competitor seasonal campaigns outside Q4.

Three responses show up in the ad data, and a single date-window search over the Prime Day week reveals which one each competitor picked:

  1. Ride the wave. Volume holds or climbs, and promo language appears the same week. They run matching deals to capture spillover intent, even with no Amazon presence at all.
  2. Counter-program. New creative with positioning against the event: "no membership required", "deals without the subscription". Distinctive, easy to spot in copy, and a strong signal that they see Amazon as their main competitor.
  3. Sit out. New-ad volume drops versus baseline. They pause to dodge the inflated auctions and bank budget for Q4. Also useful to know: their Prime week silence is your cheaper-than-usual share of voice.

Filter the same searches with ecommercePlatform set to shopify to isolate how DTC stores specifically behave around the event. The winning Shopify store ads guide shows what those filters surface. And since Prime Day dates differ by country, scope each query with geo filters to the markets you actually compete in.

The Post-Season Teardown Workflow

The teardown is where seasonal tracking compounds. Done within two weeks of the event, it takes about 90 minutes per competitor and produces the document your October planning will start from.

  1. Pull the full event window. One search per competitor with the event's dateFrom/dateTo. Store the raw JSON, because ad libraries are snapshots and this data gets harder to reconstruct later. A proper competitor ad database makes this a one-line insert.
  2. Separate survivors from casualties. Sort by -days. Ads with long runtimes earned continued spend through the event, which is the cleanest performance proxy public ad data offers. Ads that vanished within their first week tested and failed. The programmatic winner-detection guide explains why runtime beats engagement counts as a signal.
  3. Group variants into concepts. Eight cuts of the same hook are one concept, not eight winners. Concept-level grouping keeps the teardown honest about what actually carried the season.
  4. Enrich the top survivors. Run each through the enrichment endpoint for a structured teardown: full transcript, hook analysis, offer architecture, and a 1:1 replication brief tuned to the detected format. One credit per ad, refunded on failure, so a five-ad teardown costs five credits. AI ad analysis at scale covers the endpoint in depth, and the ad-to-brief workflow turns the output into production-ready briefs.
bash
curl -s "https://adlibrary.com/api/enrichment" \
  -H "Authorization: Bearer adl_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"ad": {"ad_key": "meta_1234567890",
              "platform": "facebook",
              "video_url": "https://..."}}'
  1. File everything with event tags. Survivor concepts go into the swipe file tagged bfcm-2026, observed promo depths and ramp dates go into your signal calendar. Watch your own filed creatives for creative fatigue signals next season before reusing them wholesale.

Resist the urge to skip the teardown in years when your own season went well. Winning seasons produce the laziest analysis, and the rival who quietly doubled their Q5 spend while you celebrated will surprise you in twelve months. The teardown takes 90 minutes. Being surprised costs a quarter.

The output is a one-page seasonal playbook per competitor: when they ramped, how deep they went, which concepts survived, what they recut for Q5. Written in January, it reads like a head start in October.

Tracking Competitor Seasonal Campaigns Without the Manual Grind

You can run a lighter version of everything above by hand. Open the Meta Ad Library each Friday, count a competitor's active ads, screenshot anything with a percent sign. It works for one rival on one platform, and it stops working the moment the roster grows or the season actually starts. Manual competitor analysis breaks down at exactly the wrong time, because the weeks when tracking matters most are the weeks you are busiest shipping your own campaigns.

The programmatic baseline is Meta's free Ad Library API. Meta originated public ad transparency, and if you need programmatic access to political and social-issue ads, their API is the canonical free source. For seasonal commercial tracking it gets restrictive: full commercial-ad coverage applies to the EU and UK with a 12-month lookback, access requires app review, and tokens expire on a 60-day cycle.

The AdLibrary API is the paid power-user route built for this exact loop: commercial ads across Facebook, Instagram, TikTok, YouTube, Google, LinkedIn, Twitter, Pinterest and more, one adl_ key with no app review, dateFrom/dateTo windows for the YoY work, and runtime, impressions, and estimated-spend signals on every result. The full seasonal stack from this guide costs roughly 85-100 credits per cycle: weekly polls on ten competitors, year-over-year snapshots, and post-season enrichment. The Business plan (€329/mo, 1000+ credits monthly, API access included) covers it with most of the balance left for everyday creative research. Compare tiers on the pricing page, and if you want alerting without writing the pipeline yourself, the automated competitor ad monitoring use case shows the hosted route.

Frequently Asked Questions

How early do competitors start testing Black Friday ads?

Most ecommerce brands begin offer testing 4-6 weeks before BFCM, around mid-October, with the full creative volume ramp landing in the first week of November. Higher-AOV brands start earlier because considered purchases need more touchpoints. A weekly poll of each competitor's new ads from mid-September onward catches the ramp reliably.

What is Q5 in advertising?

Q5 is the stretch from December 26 to mid-January, often called the fifth quarter. Ad costs drop sharply after Christmas because large advertisers have exhausted holiday budgets, while shoppers keep spending gift cards and store credit. Brands that prepare dedicated Q5 creative around self-gifting and new-year angles buy unusually cheap reach in a high-intent window.

How do I compare a competitor's seasonal ads year over year?

Use date-window queries. The AdLibrary API search endpoint accepts dateFrom and dateTo parameters, so you can pull October 15 to December 1 for this year and the identical window last year, then compare total ad volume, video share, launch timing, and discount depth. The comparison costs two API credits, one per search.

Can I track competitor Prime Day campaigns if I don't sell on Amazon?

Yes, and you probably should. Prime Day inflates buying intent across the whole ecommerce market for a week, so competitors either match deals that week, counter-program against Amazon, or pause spend to avoid inflated auctions. A date-window search over the Prime Day week against your category shows which path each rival took.

How many API credits does seasonal competitor tracking cost?

A realistic setup runs about 85-100 credits per seasonal cycle: weekly early-warning polls on ten competitors (roughly 40 credits a month), year-over-year window snapshots (about 20 per season), and post-season enrichment of the top surviving ads (about 25). The Business plan at €329 per month includes 1000+ monthly credits plus API access.

Steal the Timing, Not the Creative

The temptation in seasonal research is copying ads. Resist it. By the time you clone a competitor's Black Friday creative, it has already burned through your shared audience. The durable value of tracking competitor seasonal campaigns is the metadata: when each rival ramps, how deep their offers go, which formats they invest in, and which concepts they trusted enough to keep funding through the event.

Their tests are market research they paid for and you read for free. Start the baseline polls now, whatever the calendar says, because a volume spike only means something against eight quiet weeks of data. Six weeks before your next event, you will know the ramp dates, the likely depth, and the angles to expect. That is the difference between planning a seasonal push and reacting to one.

Related Articles

Slack competitor ad alerts dashboard showing competitor ad notifications flowing into a Slack channel with creative thumbnails
Platforms & Tools,  Competitive Research

Slack Competitor Ad Alerts: A 30-Minute Build

Build Slack competitor ad alerts in 30 minutes: an incoming webhook, a Node poll script with first_seen filtering, dedup on ad_key, and cron scheduling.