Meta & Facebook Ad Library Lead Finder + Website Audit avatar

Meta & Facebook Ad Library Lead Finder + Website Audit

Pricing

from $30.00 / 1,000 website auditeds

Go to Apify Store
Meta & Facebook Ad Library Lead Finder + Website Audit

Meta & Facebook Ad Library Lead Finder + Website Audit

Find businesses paying for Facebook and Instagram ads, then audit the landing page they pay to send traffic to. Returns e-mail, phone, CMS, SSL, mobile, site age and a lead score per advertiser. Budget already proven - not a cold list. Large brands filtered out automatically.

Pricing

from $30.00 / 1,000 website auditeds

Rating

0.0

(0)

Developer

Gezgin Data

Gezgin Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Meta Ad Library Lead Finder

Find businesses that are paying for ads and sending that traffic to a website working against them.

Every other Ad Library scraper answers the same question: what are my competitors advertising? This one answers a different one: which advertisers have a problem I can fix?

The difference is the second half. Search the Meta Ad Library for what you sell into — zahnarzt, roofing, fitness studio — and for every business currently running ads, this Actor opens the landing page they are paying to send traffic to and reads it: contact e-mail, phone, CMS, SSL, mobile layout, how old the footer is, whether any analytics are installed. Then it scores the lead.

Why an advertiser is a better lead

The hardest part of qualifying a small business is finding out whether they have money and whether they are willing to spend it on getting customers. An advertiser has already answered both. They are paying Meta today.

What they often have not done is look at where that traffic lands. A dental practice buying ads into a site with no SSL, or a salon pointing paid clicks at a page last touched in 2019, is not a cold lead — it is a business with budget and a visible, checkable problem.

What comes back

One row per advertiser:

FieldMeaning
adDomain, rootDomainThe advertiser's host, and the registrable domain used to keep one row per business
landingUrl, website, finalUrlThe URL the ad pointed to, the page that was audited, and where it ended after redirects
foundVia, countriesWhich of your search terms and countries surfaced them
adsFromThisDomainHow many separate ads this domain ran — a rough spend signal
email, emailSource, emailType, emailConfidenceAddress, where it was found, who is behind it, how much to trust it
phone, phoneSource, contactPageUrl, contactPageCheckedContact details, where the number came from, and what was actually opened
emailDomainMatchesSitefalse when the address sits on someone else's domain — a privacy vendor, an agency, a parent brand. Those still appear, at reduced confidence, with email_domain_differs_from_site in consistencyFlags
likelyJsRenderedThe page turned out to be an empty shell. Findings that depend on having seen it are suppressed
trackingTools, opportunityCount, scrapedAtWhich analytics were detected, how many opportunity tags fired, and when the row was produced
cms, hasSsl, mobileFriendly, copyrightYear, hasTracking, socialLinks, hasContactFormThe technical state of the landing page
contactabilityScore, opportunityScore, opportunityTags, leadPriority, scoreBreakdownCan you reach them, do they visibly need help, and how each number was reached
siteGradeA to F for the landing page, in the usual direction: A is a healthy site, F is a broken one — so F is the best prospect. Empty when the page could not be read, because a grade for a page nobody saw is a guess
outreachHook, outreachBasisOne sentence you can open with, built only from what was verified — "Your ads currently point at a page that does not respond." — and which finding produced it. German for DE, AT and CH, English elsewhere
emailDomainHasMxWhether the address's domain publishes a mail server, checked by DNS. false means almost certainly undeliverable and lowers the confidence; empty means the lookup itself failed, which is not the same as a negative answer
statusNotePlain sentence explaining any row that looks empty
siteReachable, fetchStatusok, http_403, timeout, dns_error. A 403 means the host refused us — it is never scored as a fault of the business

Large advertisers are dropped automatically. A domain running many separate ads is a brand with a media budget, not a local business you can sell a website to. Counting ads per domain filters them far more reliably than any list of brand names, and the threshold is yours to set.

Input

FieldDefaultWhat it does
queriesWhat they advertise: zahnarzt, dentist, roofing. Required.
countries["DE"]Two-letter codes. Ads are indexed per country, so each one is a separate search and adds advertisers
activeOnlytrueOnly businesses running ads right now
relevanceFilterstrictstrict keeps an advertiser only if the trade appears in their domain, page title or H1, and drops obvious retailers. loose also accepts a mention anywhere on the page. off returns everything
skipBigAdvertiserstrueDrop domains running many separate ads: those are brands with a media budget
bigAdvertiserThreshold4How many ads count as "large"
auditWebsitetrueOpen and profile the landing page. This is the point of the Actor
maxContactPages5How hard to look for contact details when the landing page yields none
maxAdvertisersPerSearch, maxConcurrency, maxRunTimeSecs, proxyConfigurationOrdinary controls

Use it when, and don't when

Use it to build a list of local businesses that are already spending on ads and whose website you could improve — web design, hosting, SEO, CRO, marketing services.

Do not use it for competitor ad research. It returns advertisers and their websites, not ad creatives, copy, spend or reach. Several Ad Library scrapers do that far better and cheaper.

Honest limits

Read this before you buy.

One search yields roughly 20 advertisers. This is measured, not estimated: across three search terms the page stopped producing new advertisers after about twenty, and two different scrolling strategies changed nothing. Breadth therefore comes from running several search terms and several countries, not from depth in one. If you need thousands of raw ads rather than a short list of qualified leads with audited websites, a plain Ad Library scraper will serve you better and cost less.

The search matches ad wording, not industry — the filter fixes most of that, not all. Unfiltered, physiotherapie in Germany and Austria returned 31 advertisers of which about seven were physiotherapists; the rest were a pet-supply shop, a pet insurer, an insole brand, a hotel and a school, each of whom mentions the word in their ads. relevanceFilter: strict judges an advertiser by what it calls itself — domain, page title, H1 — rather than by anything it happens to mention, and drops obvious retailers.

Measured after that change: zahnarzt returned six advertisers and all six were dental practices. physiotherapie returned ten, of which seven were physiotherapists. Across both, roughly four rows in five are on target, against roughly one in four unfiltered.

What still slips through are suppliers to the trade — an anatomy-poster shop, a practice-equipment site — because they name the trade as prominently as its members do. Telling "I am one" from "I sell to them" is a question of meaning, not of words, and this Actor does not attempt it. Prefer narrow search terms, and expect to discard the occasional supplier.

Precision costs volume. Strict filtering takes a search from roughly twenty or thirty rows down to six or ten. That is the intended trade: a short right list beats a long mixed one. If you would rather sort it yourself, set relevanceFilter to loose or off.

Placeholder addresses are filtered, including the German ones. max@mustermann.de and email@adresse.de appeared as contacts on a live run before that was fixed. If you see one, report it — handing a salesperson a placeholder is worse than handing them an empty cell.

The Ad Library is public, and that is the whole basis of this Actor. EU and US ad-transparency rules require it. No login, no cookies, no proxy — but it also means only what Meta publishes is available, and Meta decides that.

No browser for the landing pages. They are read over plain HTTP, which is what makes this fast and cheap. A site that builds itself in the browser hands us a shell; those rows are flagged likelyJsRendered and the "no contact form" and "no social presence" findings are suppressed, because we never actually saw the page.

The scoring weights are reasoned, not calibrated. Nobody has measured which lead converts. Every row carries a scoreBreakdown so you can see each contribution and disagree with it.

This Actor is new. The extraction and scoring engine behind the audit is the same one used by our Website Contact Scraper, where it finds e-mail addresses on roughly three quarters of the sites in German and US test batches. The Ad Library half has no track record yet. Treat your first run as a sample, not a promise.

Pricing

You are billed only for rows you actually receive. An advertiser dropped by the relevance filter, a search the Ad Library refused to load, and a landing page that refused us all cost nothing — charging for our own misses is the fastest way to lose the trust this Actor needs to be picked at all.

Pay per event: advertiser-found when a business is returned, website-audited when its landing page was actually fetched and profiled. A search that finds nothing, and a landing page that refuses us, cost you nothing.

Only public data is collected — the Ad Library is published by Meta under advertising-transparency law, and landing pages are read as any visitor reads them. Under GDPR, contacting businesses whose details you obtain this way needs a lawful basis; for B2B outreach in the EU that is usually legitimate interest, and in Germany §7 UWG additionally restricts unsolicited advertising. Every row records where its address came from. This is not legal advice.