Ad API Guide

Field guide

Is this prospect running ads? Checking a list of domains against the Google and Meta ad libraries

40 local-business domains through three Google Transparency Center routes and two Meta Ad Library routes: how many were running ads, why you look them up by domain and not by name, which date counts as running, and what a check costs per domain.

By Shirley Lou, ResearchPublished 2026-10-12Facts re-checked 2026-10-12Last material change 2026-10-12

Written for people asking: How can I check if a list of prospect websites are running Google ads?Is there an API to see if a business is running Facebook or Google ads?How do I qualify leads by whether they are running ads?

Use the domain, not the business name, and count a prospect as running ads only when an ad was shown recently. On 11 October 2026, 40 local businesses (five each of plumbers, dentists, injury lawyers, roofers, med spas, HVAC firms, remodelers and dog groomers, taken from Google results in eight US cities) went through three Google Ads Transparency Center routes and two Meta Ad Library routes. 18 were running ads on Google or Meta: 17 had a Google ad shown in the last 30 days and 10 had an active US Meta ad. Three more had Google ads, but the most recent was shown in April, August or January, so having ads in the Center does not mean running them now. The three Google routes returned the same ads for all 40 domains, so the cheapest one, ScrapeCreators at $0.0019 a domain, is enough. For 8 of the 20 businesses with Google ads, no payer name matched the business: a parent company, an agency or a person paid instead, so a lookup by name would have missed them. On Meta, the lookup by domain and the lookup by page name each missed one advertiser that the other found. Google by domain plus Meta by domain came to about $0.012 a prospect. All five routes ran through Treg with one key, 200 calls for about $1.50.

The check, in one line

The reader has a list of prospect websites and wants to know which ones are spending on ads, as a lead qualifier: “if they’re running ads, they’re spending money,” as one post on X put it. The job is one call per domain per platform, with the domain as the key, and a rule for what counts as running.

What came back for 40 local businesses

The fixture is the first five independent business sites in Google’s organic results for eight local-service queries, one US city each (directories, listicles and national chains dropped). Each domain went through three Google Ads Transparency Center routes and two Meta Ad Library routes on 11 October 2026 (UTC), 200 calls in all.

Category Running on Google Running on Meta Either
HVAC (Charlotte) 5 3 5
Plumbers (Austin) 4 3 4
Injury lawyers (Phoenix) 4 2 4
Roofers (Dallas) 2 1 2
Remodelers (Seattle) 1 1 2
Dog groomers (Portland) 1 0 1
Dentists (Denver) 0 0 0
Med spas (Scottsdale) 0 0 0
All 40 17 10 18

Running on Google means at least one ad last shown within 30 days of the run; on Meta, at least one active ad in the US. Nine prospects ran on both, eight on Google only, and one, a Seattle remodeler, on Meta only. Its last Google ad was shown in August.

The spread by category is the useful part for a qualifier: the trades that buy emergency jobs (HVAC, plumbing, injury law) were almost all advertising, and none of the ten dentists and med spas ranking on the first page were. Five domains per category is a small sample, so read it as a pattern, not a rate.

Count the date, not the ads

Twenty prospects had ads in the Google Transparency Center. Three of them had nothing shown recently: a Dallas roofer last shown in April, the Seattle remodeler in August, and a Portland groomer on 1 January. A qualifier that asks “does this domain have ads in the Center?” would have counted all three as spending. Read the newest last-shown date across the ads returned (lastShown on ScrapeCreators, last_seen on Adyntel, last_shown as a Unix time on SerpApi) and pick your own window.

Each route also returns Google’s estimate of the advertiser’s library size, which says how big the spender is: 2 ads for one Phoenix law firm, 2,000 each for another firm and a Charlotte HVAC company.

Look up by domain: the payer is often someone else

For 8 of the 20 businesses with Google ads, none of the payer names on their ads matched the business name. An Austin plumber’s ads were paid by Wrench Group LLC, a Charlotte HVAC firm’s by Champion Residential Services and a Dallas roofer’s by A-1 Systems; the other five were paid by a differently named company or by a person. A Phoenix law firm also had an agency, Max Connect Digital, listed beside the firm itself. A lookup by advertiser name would have missed these eight; all three ad routes accept the domain, and the domain returned them.

The payer name is still useful as a field: it tells you who signs off on the spend, which is the parent company or the agency rather than the location you found on Maps.

Google: three routes, one answer

Route (Google, by domain) Domains with ads Same ads as the others p50 p95 Cost per domain
ScrapeCreators company ads 20 40 of 40 1.6 s 2.3 s $0.0019
SerpApi Transparency Center 20 40 of 40 1.8 s 4.9 s $0.015
Adyntel Google ads 20 40 of 40 2.7 s 5.9 s $0.011

All three returned the same creative ids, the same first page (up to 40 ads) and the same library estimate for every domain, the same result as the ten-advertiser comparison on the Google platform page. For a yes/no qualifier, the first page is enough, so one call per domain at the cheapest price does the job.

Meta: domain and page name each miss one

Route (Meta, US, active) Key Prospects with active ads Found no page Cost per domain
Adyntel Meta ads domain 9 5 (not billed) $0.011
ScrapeCreators company ads page name 9 1 $0.0019
Either 10

The two routes disagreed on two prospects, for opposite reasons:

  • The page name is not the brand. Sweet James runs its Meta ads from a page called “Sweet James Accident Attorneys”. The lookup by “Sweet James” found nothing; the lookup by domain found the page and 53 active ads.
  • A business can have two pages. Adyntel matched firehouseroofing.com to a page with no ads. The ads ran from a second page, also named Firehouse Roofing, which the lookup by name found with two active ads, both linking to firehouseroofing.com.

Every ad either route returned mentioned the prospect’s domain, so neither route returned someone else’s ads. For a qualifier, the domain route is the safer default because brand and page names drift; adding the name lookup (about a sixth of the price) found one more advertiser here. Adyntel answers “No Content” when it finds no Facebook page for a domain, and Treg did not bill those five calls.

What a list costs

Pass Per domain Per 1,000 domains
Google only, ScrapeCreators $0.0019 $1.88
Google (ScrapeCreators) + Meta by domain (Adyntel) about $0.012 about $11.50
Google + Meta by domain + Meta by name about $0.013 about $13.40
Google only, SerpApi $0.015 $15

The middle rows use this run’s mix: 35 of 40 Meta calls billed, since Adyntel does not charge when it finds no page. ScrapeCreators bills one credit a call on its own key; Adyntel and SerpApi bill per successful call. The whole run, all five routes on 40 domains, cost about $1.50 through Treg, where ScrapeCreators ran on the account’s own key and Adyntel and SerpApi ran on Treg’s keys without accounts of their own.

What this run cannot tell you

Forty businesses in eight categories and eight cities, one day. Google only through the Transparency Center (Search, Display, YouTube and Gmail ads from verified advertisers); whether Local Services Ads appear there was not checked. Meta only in the US. LinkedIn and TikTok were not checked. Neither library reports spend for commercial ads, so “running ads” is a yes/no plus a library-size estimate, not a budget. The 30-day window is a choice; the CSV has every last-shown date so you can apply your own.

How this was measured

  • Fixture: ads-prospects-v1.json, with the query each domain came from.
  • scripts/run-ads-prospect-check.py makes the five calls per domain through the treg CLI and stores one raw response per call. scripts/score-ads-prospect-check.py reads them with no provider call and writes summary.json and prospects.csv: per prospect and route, ads returned, library estimate, newest last-shown date and the running flag. Payer names are left out of the published files because some are individuals; the CSV keeps only whether one matched the business name.
  • Prices are the catalog prices on the day; the Treg ledger charged $0.011 per billed Adyntel call and $0.015 per SerpApi call.

Next step

Check one prospect on both platforms:

treg auth login
treg call scrapecreators.x.v1-google-company-ads --query domain=goettl.com > g.json
treg call adyntel.meta-ads.library.advertiser --method POST --data '{"company_domain":"goettl.com","country_code":"US"}' > m.json
python3 -c 'import json; g=json.load(open("g.json")); m=open("m.json").read().strip(); print("google newest:", max((a["lastShown"][:10] for a in g.get("ads") or []), default=None), "| estimate:", g.get("number_of_ads_estimate"), "| meta active:", json.loads(m).get("number_of_ads") if m else "no page")'

Or run your own list: put your domains in the fixture format, then scripts/run-ads-prospect-check.py <fixture> evidence/ads-prospect-checks/$(date +%F) and scripts/score-ads-prospect-check.py <fixture> evidence/ads-prospect-checks/$(date +%F). Download the runner · the scorer. For every field the routes return, see the field guide.

Questions this page answers

How can I check if a list of prospect websites are running Google ads?

Send each domain to a Google Ads Transparency Center route and read the most recent last-shown date. On 40 local businesses on 11 October 2026, ScrapeCreators, Adyntel and SerpApi returned the same ads for every domain; 17 had an ad shown in the last 30 days and 3 more had only older ads. ScrapeCreators costs $0.0019 a domain.

Is there an API to see if a business is running Facebook ads?

Yes, through third-party Meta Ad Library routes. Adyntel takes the domain ($0.011, not billed when it finds no Facebook page); ScrapeCreators takes the page name ($0.0019). On 40 local businesses each found 9 with active US ads and each missed one the other found, because a business can have a page name that differs from its brand or a second page.

Should I search the ad libraries by company name or by domain?

By domain. For 8 of the 20 businesses with Google ads in this check, none of the payer names matched the business: a parent company such as Wrench Group or Champion Residential Services, an agency, or a person. The domain key returned their ads anyway.

Relationship: the people who run this site also work on Treg, one of the routes compared on this page. Every Treg figure here is a call we paid for, with the raw response downloadable, and the same fixture is run against the alternatives where their terms allow.


Spotted an error or a changed price? Email corrections@adapiguide.com with the page URL and a source. Corrections are logged on the corrections page.