scraper · intent scoring · runs on Apify

b2b qualified lead finder

"give me 50 HVAC contractors in Tampa who already run ads, with a verified email, sorted by intent." that's the input. the output is a call-ready list — not a spreadsheet you still have to qualify by hand.

8 intent signals per lead $0.15 per qualified lead verified emails · 0-100 score
run on Apify → see how it works ↓
new to Apify? you get $5 in free credits — that's ~33 qualified leads, no card required.

a 2,000-row scraped list isn't a pipeline. it's homework.

Raw lead scrapers give you volume: names, phones, maybe emails. Then your team spends days figuring out which rows are worth a call — who actually spends money on marketing, who has a real operation behind the listing, whose email even works. The qualification is the expensive part, and raw scrapers don't do it.

This Actor inverts that. It visits every business's website with a real browser, reads the rendered DOM and the network beacons (ad pixels, analytics tags, booking widgets that never show up in raw HTML), verifies the email is deliverable, and scores every lead 0-100 with a transparent per-signal breakdown.

You set the bar — minScore, required signals — and you only pay for leads that clear it. $0.15 per qualified lead, discovery and verification included.

how to use it

how to get intent-scored b2b leads in 5 steps

point it at a vertical + city, or paste your own domain list. comes back with verified, scored, call-ready leads. runs on Apify, $0.15 per qualified lead.

1
define who you want — or paste your own list
Mode A (discovery): set a vertical (e.g. "HVAC contractors") plus one or more locations (e.g. "Tampa, FL", "Orlando, FL"). Mode B (qualify-only): pass an array of domains or URLs you already have — a purchased list, a CRM export, conference badges — and skip discovery entirely. optional: maxResults, minScore, requireSignals.
2
run the Actor on Apify
click Start. the Actor finds matching businesses on Google Maps (Mode A) or takes your list as-is (Mode B), then visits every business website with a real browser. email verification is on by default (verifyEmails: true).
3
intent signals detected from the live site
eight signals per lead, read from the rendered page and its network traffic: running_ads (with the platforms detected), online_booking, analytics, lead_form, chat_widget, payment_processor, stale_site, and the cms. ad pixels invisible in the HTML source still get caught — that's the point of instrumenting the network layer.
4
emails verified, every lead scored 0-100
extracted emails run deliverability checks (syntax, MX, disposable, mailbox confirmation where possible). each lead gets a transparent score with a per-signal breakdown:
"lead_score": 80, "score_breakdown": { "running_ads": 35, "online_booking": 20, "verified_email": 15, "lead_form": 10 }, "contact": { "email": "[email protected]", "email_verified": true, "email_mailbox_confirmed": true }
5
filter, export, start calling
only leads passing your minScore / requireSignals filters are delivered — and only delivered leads are charged. export JSON, CSV, or Excel, or push straight to your CRM via the Apify API, n8n, or Zapier, sorted by lead_score so your team calls the hottest leads first.
the scoring model

how the 0-100 score is built

no black box. seven weighted signals, fixed points, and a score_breakdown on every lead so you can audit any number it gives you.

seven signals, 100 points, fully transparent

running_ads (35 pts) · the business already pays for marketing — the strongest buying signal there is. includes which platforms (Google, Meta, …).

online_booking (20 pts) · operational maturity. they invest in tools and convert visitors into appointments.

verified_email (15 pts) · deliverable, actionable contact. only counts when the deliverability checks pass.

lead_form (10 pts) · the business understands what a lead is worth.

analytics (10 pts) · data-driven mindset — they measure.

chat_widget (5 pts) · investment in conversion.

payment_processor (5 pts) · a real transactional business, not a placeholder site.

plus two context fields that don't add points but sharpen the pitch: stale_site (outdated website — a web-services seller's favorite flag) and cms (what the site runs on).

three ways operators use it

where the qualified lead finder pays for itself

agency · outbound

sell marketing to businesses that already buy marketing

a marketing agency prospecting cold has a brutal hit rate because most small businesses don't spend on ads — and never will. running the Actor with requireSignals: ["running_ads"] flips the funnel: every lead delivered already pays Google or Meta. the pitch changes from "you should advertise" to "here's what your current ads are missing." 50 ad-running HVAC contractors in Tampa with verified emails costs $7.50 — less than one hour of an SDR's time.

run frequency: per campaign · cost: $7.50 per 50 qualified leads

saas · niche targeting

find businesses missing exactly what you sell

a booking-software company wants trades businesses that are clearly real (ads running, payment processor live) but have online_booking: false — the precise gap their product fills. the signals object makes that query trivial: filter delivered leads on the two flags downstream, or set requireSignals: ["running_ads"] and segment by booking in your sheet. same playbook works for chat-widget vendors, web designers hunting stale_site: true, and analytics consultancies.

run frequency: monthly · cost: scales with maxResults, pay only for delivered leads

mode B · list rescue

re-score a stale list before burning calling hours on it

a sales team inherits a 500-domain list from a conference two years ago. instead of calling blind, they run Mode B (domains: [...]): the Actor visits each site, detects today's signals, re-verifies every email, and scores the lot. 140 leads come back above 70 — those get called first. pairs naturally with an AI calling agent that works the ranked list and books the appointments for you.

run frequency: per list · cost: 500 domains qualified ≈ $75 max, less after filters

how it compares

qualified leads vs raw scrapers vs B2B databases

honest comparison against raw Google Maps scrapers (including our own) and subscription B2B contact databases.

data-runner.dev raw GMaps scrapers B2B databases (Apollo etc.)
Buying-intent signals✓ 8 per lead, live from the sitenoneenterprise tiers only
Lead scoring✓ 0-100, transparent breakdownnoneproprietary black box
Email verification✓ included, mailbox-levelrarelycredit-based add-on
Local SMB coverage (trades)✓ Google Maps, scraped freshweak — stale SMB records
Qualify your own list✓ Mode Bpartial (enrichment credits)
Pricing model$0.15 per qualified lead only$0.003-0.05 per raw row$49-99+/mo subscription
Pay for unqualified leadsnever — filters are freeevery row costscredits burn either way
honest read · if you want raw volume at pennies per row and you're happy qualifying by hand, our own Google Maps Lead Generator is 50x cheaper per row. if you live inside Apollo or ZoomInfo for mid-market and enterprise contacts, this won't replace it — its edge is local SMBs (trades, clinics, restaurants) where databases go stale. this Actor is for the use case in between: when calling time costs more than lead data, and you'd rather pay $0.15 for a lead worth calling than $0.003 for a row you still have to qualify.
pricing

$0.15 per qualified lead. unqualified leads are free.

no subscription. no minimum. discovery, signal detection, and email verification all included in the per-lead price.

$0.15 / qualified lead delivered

you pay only for leads that pass your minScore and requireSignals filters — never per attempt. example: 50 ad-running contractors with verified emails ≈ $7.50. a $0.10 Actor-start fee applies per run.

new to Apify? you get $5 in free credits on signup — that's ~33 qualified leads before you spend a cent.

run on Apify →
got questions

FAQ

how the scoring works, what it costs, what's legal, and how it handles edge cases.

How does the 0-100 lead scoring work?+

Every lead is scored from seven buying-intent signals, each worth a fixed number of points: running ads (35 pts — the business already pays for marketing), online booking (20 pts — operational maturity), verified email (15 pts — actionable contact), lead form (10 pts — understands lead value), analytics installed (10 pts — data-driven), chat widget (5 pts) and payment processor (5 pts). The scoring is fully transparent: each lead carries a score_breakdown object showing exactly which signals contributed which points, so you can audit any score and tune your minScore threshold with confidence.

How is this different from a regular Google Maps scraper?+
A raw Google Maps scraper gives you a spreadsheet of names, phones, and maybe emails — every row weighted the same, whether it's a thriving business mid-growth or a half-dead listing. The Qualified Lead Finder visits each business's actual website, detects buying-intent signals from the rendered DOM and network beacons (ad pixels, analytics tags, booking widgets), verifies the email is deliverable, and scores each lead 0-100 — so your call list starts with the businesses most likely to buy. If you just want raw volume at pennies per row, the catalog also has a lightweight Google Maps Lead Generator from $0.003/lead.
What intent signals does it detect, and how?+

Eight signals per lead: running_ads (with the ad platforms detected — Google, Meta, etc.), online_booking, analytics, lead_form, chat_widget, payment_processor, stale_site, and the CMS powering the site. Detection runs on the fully rendered page plus its network traffic — so ad pixels and analytics beacons that never appear in the raw HTML still get caught. That's the difference between guessing from a homepage screenshot and actually instrumenting the site.

Can I qualify a lead list I already have?+

Yes — that's Mode B (qualify-only). Instead of a vertical + location, pass an array of domains or URLs you already collected (from a conference, a purchased list, an old CRM export) and the Actor skips discovery entirely: it visits each site, detects the intent signals, verifies the email, and scores every lead 0-100. Typical workflow: re-score a stale 500-domain list before a calling campaign and start with everything above 70.

How does the email verification work?+

When verifyEmails is on (the default), every extracted email runs through deliverability checks: valid syntax, the domain accepts mail, not a disposable address, not rejected. Leads carry three fields — email_verified (passed deliverability), email_mailbox_confirmed (the stricter check: the individual mailbox was confirmed to exist), and email_verification_status. A verified email also adds 15 points to the lead score, so deliverability is baked into the ranking, not bolted on.

What does $0.15 per qualified lead include? Do I pay for leads that fail my filters?+

You pay only for leads actually delivered to your dataset — leads that pass your minScore and requireSignals filters. Discovery, website visits, signal detection, and email verification are all absorbed into that price; there are no separate charges per attempt. If the Actor crawls 200 businesses and only 50 pass your filters, you pay for 50. A small Actor-start fee ($0.10) applies per run.

What minScore threshold should I use?+

Depends on what you're selling. If you sell marketing services, filter with requireSignals: ['running_ads'] — that signal alone is 35 points and means the business already spends on marketing. For general outbound, 60+ is a strong call list (usually means ads or booking plus a verified email). For high-volume SDR teams that want breadth, 40+ keeps anything with at least one meaningful signal. Start strict, check the score_breakdown on a sample, and loosen from there — you only pay for what passes.

Is scraping business data from Google Maps legal?+
Business listings on Google Maps are public commercial data — names, categories, websites, phones that the businesses themselves publish to be found. Scraping publicly accessible data is generally legal in most jurisdictions and has been upheld in court (notably hiQ v. LinkedIn in the US). What matters is how you use the output: comply with CAN-SPAM / GDPR for outreach, don't resell raw data, and respect do-not-call lists for phone outreach. See the data-runner.dev disclaimer for the full policy.
What happens when a business hides its email behind a contact form?+

Many small businesses do — that's expected. The Actor still delivers the lead with everything else it found: phone number, social profiles, all eight intent signals, and the score (minus the 15 verified-email points). The lead_form signal is actually flagged, so you know a form exists. For phone-first outreach (the norm in trades like HVAC, roofing, plumbing), a high-intent lead with a phone and no email is still a call-ready lead.

Can I pipe the output into my CRM or automation stack?+
Yes. Apify exports JSON, CSV, and Excel out of the box and exposes a REST API plus webhooks. Common patterns: push qualified leads to Google Sheets via n8n or Zapier, sync to HubSpot / GoHighLevel with the score as a custom field, or trigger an outbound calling campaign directly — the lead_score field makes prioritization trivial. We also build custom n8n workflows if you want the integration done for you.
ready to run it

run the qualified lead finder

$0.15 per qualified lead. intent signals, verified emails, transparent scoring. pay only for leads worth calling.