Ads Presence Unified Lookup: Google/LinkedIn/Meta from $16/1k avatar

Ads Presence Unified Lookup: Google/LinkedIn/Meta from $16/1k

Pricing

from $12.16 / 1,000 ad presence checked (found on at least one platform)s

Go to Apify Store
Ads Presence Unified Lookup: Google/LinkedIn/Meta from $16/1k

Ads Presence Unified Lookup: Google/LinkedIn/Meta from $16/1k

Is this company running ads anywhere? One domain or name in, one row out: Google Ads Transparency Center, LinkedIn Ad Library and Meta's Ad Library API checked at once. Never charged for a company with no ads on any checked platform.

Pricing

from $12.16 / 1,000 ad presence checked (found on at least one platform)s

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Ads Presence Unified Lookup: Google, LinkedIn & Meta Ads for One Company

You give this actor a list of company domains or names. For each one, it checks the Google Ads Transparency Center, the LinkedIn Ad Library, and Meta's official Ad Library API at once, and returns a single row answering "is this company advertising, and where" — which platforms it's active on, roughly how many ads, how recently, and a handful of sample ad URLs to click through and verify by eye. It's a composite of this portfolio's own three single-platform actors (google-ads-presence-lookup, linkedin-ads-presence-lookup, meta-ads-presence-lookup), fanned out and billed as one flat charge per company instead of three separate ones.

Who it's for

You're building or cleaning an outbound list and want one column that answers "is this prospect already running paid ads anywhere" — a company that's actively buying ads on Google, LinkedIn or Meta is a company with an ad budget and (usually) a marketing team already running campaigns, which changes how you'd pitch a marketing, creative, or ad-tech tool to them. You're also useful to a media buyer or competitive-intelligence analyst who wants a fast triage pass across a competitor list before going deep on any one of them with the single-platform actors, and to an agency doing prospecting who wants to filter out companies that already have an agency or in-house team clearly running paid media. This isn't a bulk creative export — for that, see the three single-platform actors below, each of which returns the full sample-ad detail for its one platform. This is the fast, cheap "which of these 500 domains are worth a closer look" pass.

Why this one

  • Three ad platforms, one row, one price. Instead of running three actors and joining the results yourself, this fans out to all three ad libraries per company and folds them into one flat row — anyAds, platformsActive, and per-platform found/count fields — charged once, not three times. See "Price" below for exactly what "once" costs.
  • Never charged for a company that isn't advertising. If none of the checked platforms show an ad, the row still comes back (anyAds: false) explaining why on each platform, and costs nothing.
  • Degrades gracefully instead of failing. Meta's Ad Library API needs your own access token (see the FAQ) — without one, metaAdsFound comes back false with a plain-English reason, not an error, and Google and LinkedIn still run normally. Same for a rate limit or a blocked request on any platform: a per-platform miss never fails the row or the other two platforms.
  • Turn off any platform you don't need. "Check Google Ads" / "Check LinkedIn Ads" / "Check Meta Ads" in the Input tab are on by default; turning one off skips it entirely for every row in the run — useful if you only have a Meta token, or only care about B2B (LinkedIn) presence.
  • Sample ad URLs to verify by eye. Up to 3 URLs per active platform (Google Ads Transparency Center pages, LinkedIn Ad Library detail pages, Meta Ad Library snapshot URLs) so you're never taking the true/false on faith.

What you get

One row per company. The three platform blocks are independent — a null on any found/count/ reason field means that platform wasn't checked this run (see the checkboxes above), not that it returned zero.

FieldTypeDescription
querytextThe domain or company name you submitted
foundbooleanSame as anyAds below — true if at least one checked platform found ads. This is what's billed.
statustextOK if any platform found ads; NOT_FOUND if none did
messagetextPlain-English summary of what each checked platform reported — only present when found is false
advertiserNametextBest-matching advertiser/page name, from whichever platform matched first (Google, then LinkedIn, then Meta)
googleAdsFoundboolean/nulltrue/false if Google was checked; null if "Check Google Ads" was off
googleAdsCountnumber/nullEstimated total ads in the Google Ads Transparency Center for the matched advertiser
googleAdsLast30Daysnumber/nullEstimated Google ads shown in the last 30 days
googleAdsReasontext/nullWhy Google came back not-found or unchecked; null when found
linkedinAdsFoundboolean/nulltrue/false if LinkedIn was checked; null if "Check LinkedIn Ads" was off
linkedinAdsCountnumber/nullAds currently in the LinkedIn Ad Library for the matched advertiser
linkedinAdsReasontext/nullWhy LinkedIn came back not-found or unchecked; null when found
metaAdsFoundboolean/nulltrue/false if Meta was checked; null if "Check Meta Ads" was off
metaAdsCountnumber/nullActive Meta ads found, capped at 50 (Meta's own per-request sample size)
metaAdsReasontext/nullWhy Meta came back not-found or unchecked — most commonly "no access token supplied"
anyAdsbooleantrue if at least one checked platform found ads for this company
platformsActivearrayWhich of google, linkedin, meta actually had ads (subset of what was checked)
sampleAdUrlsarrayUp to 3 sample ad/library URLs per active platform, combined into one list
scrapedAtISO 8601 datetimeWhen the check ran

Deselect any field in the Input tab's "Which columns do you want?" picker to drop it from every row — this changes what's returned, not what's billed, since the price is flat per company either way.

Price

  • Ad presence checked (found on at least one platform): $16 per 1,000 company domains or names

Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.

1,000 companies through this actor: ~$16 if every one is found running ads somewhere ($0.016 per found row, plus a $0.00005 actor-start charge), less if some aren't. That's roughly the sum of what the three single-platform actors would charge separately for the same company (google-ads-presence-lookup $0.003, linkedin-ads-presence-lookup $0.012, meta-ads-presence-lookup $0.003 — $0.018 combined) minus a 10% bundle discount for buying all three at once, and it's a single flat charge regardless of how many of the three platforms actually had ads — a company running ads on all three costs exactly the same as one running ads on only one. A company with no ads on any checked platform is never billed at all.

How to use

  1. In the Apify Console. Open the actor page and click Start — the domains field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~ads-presence-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"domains":["hubspot.com","notion.com","a-company-that-almost-certainly-runs-no-ads.example"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
  1. If you have your own Meta Ad Library API access token, paste it into "Your Meta Ad Library API access token" at the top of the Input tab — without it, Meta is skipped gracefully on every row (see the FAQ).
  2. Leave "Try it first" on for your first run to see the output shape on 5 companies before spending on the full list.
  3. Turn off "Check Google Ads" / "Check LinkedIn Ads" / "Check Meta Ads" for any platform you don't need — this doesn't change the price of a found row, but it does mean one less request per company (faster, and one fewer thing that can come back BLOCKED).

Input

{
"domains": [
"hubspot.com",
"notion.com",
"a-company-that-almost-certainly-runs-no-ads.example"
]
}

One domain or company name per line. Each is checked against Google Ads Transparency Center, the LinkedIn Ad Library and Meta's Ad Library API, and comes back as one row. Accepted formats: nike.com, https://www.nike.com/gb/, Nike, Inc..

A bare domain works best for Google (which has a real domain filter); LinkedIn and Meta have no domain filter at all, so a domain input is turned into a best-effort brand-name guess for those two (stripping www. and the TLD — "nike.com" becomes the search term "nike"). A company name ("Nike, Inc.") works for all three and is generally more reliable for LinkedIn and Meta.

Sample output

queryfoundstatusadvertiserNamegoogleAdsFoundgoogleAdsCountgoogleAdsLast30DaysgoogleAdsReasonlinkedinAdsFoundlinkedinAdsCountlinkedinAdsReasonmetaAdsFoundmetaAdsCountmetaAdsReasonanyAdsplatformsActivesampleAdUrlsscrapedAt
hubspot.comtrueOKHubspot, Inc.true40002000true2568falseNo Meta Ad Library API access token supplied — provide your own to check Meta.true["google","linkedin"]["https://adstransparency.google.com/advertiser/AR10072600183532683265/creative/CR02771141177443876865?region=anywhere","https://adstransparency.google.com/advertiser/AR10072600183532683265/creativ...2026-09-21T06:10:16.874Z

A company with no ads found on any checked platform gets a row with found: false,

anyAds: false
, and a message summarizing what each platform reported — and is never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~ads-presence-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"domains":["hubspot.com","notion.com","a-company-that-almost-certainly-runs-no-ads.example"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~ads-presence-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"domains":["hubspot.com","notion.com","a-company-that-almost-certainly-runs-no-ads.example"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~ads-presence-unified-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"domains":["{{company domain or name}}"]}, mapping the row's company domain or name into the domains array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Ad Library Checker: Google, Meta & LinkedIn by Domain" — the agent will find and run this actor.

Typical uses: adding an "already running ads?" column to a Clay prospect table before a marketing- or ad-tech-tool outreach sequence, a weekly n8n workflow that re-checks a target-account list and flags newly-active advertisers, or an AI agent qualifying a lead list by ad spend signal before handing it to a sales rep.

Tips

  • Leave all three platforms on for the first pass over a new list — you can always narrow to one platform later once you know which one matters for your use case.
  • If you only care about B2B accounts, "Check LinkedIn Ads" alone (with Google and Meta off) is the fastest and cheapest way to run this actor, since it skips the Google RPC and Meta API requests entirely.
  • Without a Meta access token, metaAdsFound is always null (not checked) rather than false — that's expected, not a bug; see the FAQ for how to add one.
  • sampleAdUrls links straight to each platform's own ad library page — worth a quick manual click-through before you act on a true, especially for a brand-name (not domain) input where the match is a best-effort text search rather than a verified identity.
  • Domains match Google reliably; for LinkedIn and Meta, a company name ("Nike, Inc.") is more reliable than a bare domain, since neither has a real domain filter.

vs. alternatives

What it costsWhat you getTrade-off
This actor (ads-presence-unified-lookup)$0.016 per found row (~10% off the three single-platform prices combined), $0.00005 actor start, nothing for a missOne row per company: Google, LinkedIn and Meta ad presence, counts, recency, and sample URLs, checked live on every runPresence and rough volume, not a full creative export — for that, run the single-platform actor for the one you care about
google-ads-presence-lookup + linkedin-ads-presence-lookup + meta-ads-presence-lookup (this portfolio, run separately)$0.003 + $0.012 + $0.003 = $0.018 per company found on all three, billed as three separate eventsThe same three platforms' full single-platform detail (image/text/video breakdown, verified/legal name, ad-type mix) — more depth per platformThree actors to run and join yourself, and no bundle discount
PowerAdSpy (checked 2026-09)$69–$399/month subscription, tiered by networkFacebook, Instagram, Google PPC and YouTube on every tier; LinkedIn only unlocks on the $399/mo Palladium tierA real ad-creative library across many networks, but LinkedIn coverage costs 6x the entry price, and it's a seat-based monthly tool, not a pay-per-row API you can call from a workflow
Doing it yourselfYour time + reverse-engineering three different transports (Google's internal RPC, LinkedIn's Cloudflare-fronted HTML behind a residential-grade proxy requirement, Meta's official API auth flow), then joining three result sets per companyThe same dataThe per-platform quirks (LinkedIn needs Apify's UNBLOCKER proxy group specifically — see that actor's own notes — Google's RPC needs an undocumented client-context blob, Meta needs your own app token) are exactly what this actor absorbs

Prices for third-party tools are their published list prices as of September 2026 and are not tracked here — check the vendor before relying on the comparison.

FAQ

Do I need a Meta Ad Library API access token? Only if you want Meta results. Apply for one at developers.facebook.com/docs/graph-api/reference/ads_archive and paste it into the Input tab — it's never shipped, stored, or logged by this actor, only sent as a request parameter on your own runs. Without one, metaAdsFound comes back null for every row (not checked), and Google and LinkedIn still run normally.

Why is metaAdsFound false even outside the EU/UK when I know a company runs Facebook ads? Meta's official Ad Library API only covers ordinary commercial ads inside the EU/UK; everywhere else, it's restricted to political and issue ads. This is Meta's own API restriction, not a bug here — see meta-ads-presence-lookup's README for the full explanation. If you specifically need Meta commercial-ad coverage outside the EU/UK, this actor can't provide it (no actor legitimately can without violating Meta's terms).

Am I charged for a company with no ads found? No. found/anyAds is false and the row explains why on each checked platform, and Actor.charge() is never called for that row.

What's the difference between null and false on googleAdsFound (or linkedin/meta)? false means that platform was checked and found nothing. null means that platform wasn't checked this run at all — either because you turned its checkbox off, or (Meta only) because no access token was supplied. Check the matching ...Reason field for the specific explanation either way.

Does turning off a platform change the price? No — the price is one flat charge per company with anyAds: true, regardless of how many platforms were checked or how many came back positive. Turning off a platform you don't need saves time (fewer requests per company) and reduces what can come back BLOCKED, not money.

Do I need to configure proxies? No. Google and LinkedIn each use a specific Apify proxy group internally (RESIDENTIAL and UNBLOCKER respectively — LinkedIn requires UNBLOCKER specifically, see linkedin-ads-presence-lookup's own notes on why), baked in and not buyer-configurable. Meta calls its official API directly with no proxy at all.

Is this a live check or a stored database? Live, on every run — there's no cached snapshot behind any of the three platforms. A company that starts or stops running ads shows up differently the next time you check it.

Should I use this instead of the three single-platform actors? Use this one for a fast "which of these companies are advertising anywhere" triage pass across a list. Once you've narrowed to a handful of companies you want the full picture on — every sample ad, image/text/video breakdown, verified advertiser identity — run the matching single-platform actor(s) for the depth this one deliberately leaves out.

Can I schedule this to re-check the same list on a cadence? Yes — set up an Apify Task with a schedule (daily, weekly, whatever cadence fits) and point it at this actor with a saved input.

Can an AI agent call this directly? Yes. It's registered on the Apify MCP server — an agent in Claude, Cursor, or another MCP client can find and run it by name, or call the REST endpoint shown above from any script or workflow tool.

  • Google Ads Presence Lookup — the full single-platform Google Ads Transparency Center detail: image/text/video ad breakdown, verified advertiser identity, legal name, and monitoring mode.
  • LinkedIn Ads Presence Lookup — the full single-platform LinkedIn Ad Library detail, plus monitoring mode.
  • Meta Ads Presence Lookup — the full single-platform Meta Ad Library API detail, including EU reach data.
  • Company Domain Enrichment — broader firmographic and technical enrichment (registration, DNS, tech stack, hiring signal) for the same domain.