GTM engineering
Ad library changes are outbound signals, if you keep the scope
Which public ad changes say an account has budget or a new message, how to pipe them into Clay or a CRM with an agent, and where they mislead.
Coverage checked . Platform libraries change their scope without notice, so verify anything load-bearing against the source.
Outbound teams already trigger on funding rounds, hiring and tech installs. The public ad libraries add one more signal: what a company is paying to say, and where. An account that starts advertising in a new country, launches twenty ads in a week, or points its ads at a new offer has budget and attention moving. Meta and Google publish those ads worldwide, and five more platforms publish the ones delivered in the EU and UK.
Which ad changes are worth a signal
- First ads seen. An account with no ads in a library that now has some has started paid acquisition in that channel. Record the date of the first observation, not the date you looked.
- A launch burst. Many new ads in a short window usually means a launch, a new campaign or a new agency. Compare the weekly launch count with the account's own history, not with other companies.
- A new market. Ads appearing in a country the account did not target before. Read it against the library's scope: in the EU-only libraries, a new country can only be a European one.
- A new offer or destination. The page an ad points at changes more often than the ad. A move from a demo form to a free trial, or to a new product page, says what the team is pushing this quarter.
- A competitor ramping. When your prospect's main competitor triples its ads, that is a reason to contact the prospect, not the competitor.
Where these signals mislead
- Geography. TikTok, Microsoft, Snapchat, Pinterest and X only publish ads delivered in the EU and UK. No ads there means no ads in Europe, not no ads at all. The coverage map lists each library's scope.
- Retention. Meta shows commercial ads while they run and drops them after they stop, so a quiet account may have run a large campaign last quarter. LinkedIn keeps about a year.
- Partial runs. A collection that hit a cap or a rate limit cannot tell you an ad stopped. Mark stops only from a complete run, or you will email companies about campaigns they never paused.
- No spend. Commercial ads carry no budget figure on any platform. An ad count measures activity, and anyone quoting a competitor's spend is quoting a model.
Wiring it: an agent, an MCP server and your table
This needs no scraper of your own. AdLemur exposes its collection as an MCP server, so an agent in Claude Code or any other MCP client does the reading and writes the results wherever your outbound runs.
- Put the accounts on a watchlist. Create a separate project for prospects and add each account with
add_competitor. The tool is named for competitors, but a watchlist brand is only a name and a domain. Confirm each account's ad library identities withfind_advertiser_identitiesandconfirm_advertiser_identity, because ads often run under a different page name than the company. - Collect on a schedule.
sync_public_adscollects an account's public ad pages without a provider charge.set_competitor_monitoringturns on weekly syncs, which is a recurring paid charge, so enable it per account on purpose. - Read the changes.
list_ad_changesreturns recent ad and paid-keyword changes with the observation each came from.get_competitor_lifecyclesays how fast an account launches and stops ads.get_competitor_dossierrolls one account up across platforms, with a coverage statement on every row. - Write rows, keep the scope. Have the agent post one row per signal to a Clay table through its webhook source, or to your CRM through its API: domain, signal type, platform, geography, first-seen date, and whether the run was complete. The scope columns are what stop a European count from reading as a global one.
- Route it like any other trigger. Join signals to contacts, score them, and use the ad as context for the opening line rather than as the whole reason for the email.
A weekly prompt to start from: for each account in the Prospects project, call list_ad_changes for the last 7 days. For any account with five or more new ads, a new country or a new landing page, post domain, signal, platform, geography, first_seen, complete to the Clay webhook. Skip anything that came from an incomplete run.
Build it or hire it
If you already run Clay and Claude Code, the steps above are enough to start. If you would rather have the pipeline built and maintained with the rest of your outbound, a GTM engineering agency does this work every day. OneGTM is a founder-led GTM engineering and AI transformation agency. It builds custom outbound, signal, CRM and AI systems for seed to Series C teams using Clay, Claude Code and Attio, and is a Clay Artisan Solutions Partner.
- Which ad libraries can I read without an account?
- Meta's Ad Library, Google's Ads Transparency Center and LinkedIn's Ad Library are open in a browser without logging in. TikTok, Microsoft, Snapchat, Pinterest and X publish libraries for ads delivered in the EU and UK.
- Is an ad count a proxy for spend?
- No. Commercial ads carry no spend or impressions on any platform, and one ad can run on a tiny or a large budget. Use counts and launch dates as activity signals, and label any spend figure as a model.
- How often should ad signals refresh?
- Weekly. That is the cadence AdLemur's monitoring runs at, and ad launches cluster around campaigns, so a weekly diff catches the burst without paying for daily collection.
- Can I track prospects instead of competitors?
- Yes. A watchlist brand is a name and a domain with its confirmed ad library identities. Keep prospects in their own project so their signals do not mix with your competitor research.
AdLemur is open source under the MIT license. Get started free or read how agents read the same evidence over MCP.