DEV Community

Cover image for Black Friday 2026: Build a Competitor Ad Watchlist Before November
Agnes Maina
Agnes Maina

Posted on

Black Friday 2026: Build a Competitor Ad Watchlist Before November

MEASURED: AI-generated editorial illustration, not a product screenshot or collected ad data.

I am Agnes Maina, and I built the Meta Ad Library actor linked here. MEASURED means read in documentation or cited sources, not a new live test. INFERRED marks recommendations and example reasoning.

Why start in October

MEASURED: Adobe's September 28 forecast puts US online holiday sales for November and December at $275.1 billion and discusses a preseason spike in October. This is a forecast, not a realized figure. Adobe forecast.

INFERRED: If shopping starts early, offers can start early too. A watchlist begun in October gives you a dated record of what competitors were saying before the busiest weeks, so later changes stand out. I can't put a number on that advantage. Observing now saves you from trying to reconstruct the sequence in December.

The worksheet

INFERRED: Use one row per ad. The first six columns hold what you saw. The last holds what you think.

Advertiser Observation date Library link Offer text Format Destination Hypothesis
Example Brand Oct 12 2026 Paste libraryUrl Early access to holiday bundles Video Bundle landing page Leading with bundles before a sitewide discount

INFERRED: This row is illustrative, not a real advertiser. Keep the original offer wording rather than replacing it with your interpretation. If the destination changes, preserve the previous row and add another observation. Otherwise you lose the sequence you wanted to study.

Steps

INFERRED: A routine you can set up in one sitting:

  1. List five to ten advertisers that compete with you on the offer itself, not only on category.
  2. Open the Meta Ad Library by hand for two or three of them and fill in a few rows manually. Understand each column before automating anything.
  3. Open the Meta Ad Library actor. Enter names under advertisers, or phrases under searchTerms. Set country to US, activeStatus to active and maxAdsPerSearch to 20.
  4. Run it and export the dataset as CSV.
  5. Map the output to the worksheet. Available copy goes to offer text, creative informs format, and libraryUrl is your library link.
  6. Fill in destination and hypothesis yourself. Open the ad and check where it leads.
  7. If the list earns its keep, save an Apify task and schedule it. Set onlyNewSinceLastRun to true to use stored monitor history.

What the output can tell you

MEASURED: The actor's input schema accepts advertisers or search terms, a country, an active status filter and a cap per search. Its documented output includes available copy, creative, libraryUrl and daysRunning. Monitor mode tracks previously observed ads and can deliver new ads plus milestone and stopped-status rows. See the actor documentation.

INFERRED: Treat this as a capped sample. A long daysRunning value does not prove profitability, ROAS or spend. An ad missing from a later limited sample does not prove the advertiser stopped its campaign, even if a monitor row flags it as stopped. Daily monitoring can also miss ads that appeared and disappeared between checks.

MEASURED: I have not rechecked this actor's live prices for this draft. Review the current Store pricing and set a spending limit before running a larger watchlist.

Observed offers versus performance guesses

INFERRED: Keep these statements apart:

Observed, record as evidence Guessed, record under hypothesis
Offer wording on the date you saw it That the offer is converting
Format and destination page How much is being spent
Ad appeared in your capped sample It is the advertiser's best ad

INFERRED: A hypothesis like “they are leading with bundles before a sitewide discount” is useful because you can check it next week against new observations. “This ad is winning” cannot be checked from this workflow. An interesting pattern gives you an idea to test in your own account, using your own results.

INFERRED: If copying rows by hand gets tedious, the Meta Ad Library Scraper handles the collection part. The judgment columns stay with you.

Top comments (0)