Contractor Lead Scraper — Verified Emails (HVAC, Plumbing) avatar

Contractor Lead Scraper — Verified Emails (HVAC, Plumbing)

Pricing

from $50.00 / 1,000 enriched contractor leads

Go to Apify Store
Contractor Lead Scraper — Verified Emails (HVAC, Plumbing)

Contractor Lead Scraper — Verified Emails (HVAC, Plumbing)

Scrape HVAC, plumber, roofer & electrician contacts from Google Maps with verified emails & phones. Real-time data from contractor websites. Export to HubSpot, Salesforce, or CSV. Built for home services marketing & SaaS sales.

Pricing

from $50.00 / 1,000 enriched contractor leads

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Contractor Lead Scraper — Verified Emails (HVAC, Plumbing, Roofing, Electricians)

Generate a targeted HVAC contractor email list, plumber leads database, roofer contact list, or electrician leads directory — scraped live from Google Maps with verified contact details. This actor covers the full home services trades: HVAC companies, plumbers, roofers, electricians, general contractors, landscapers, painters, and pest control businesses, returning verified emails, phone numbers, addresses, ratings, and social links ready to import into your CRM.

Built for construction suppliers, home service SaaS companies, insurance brokers, subcontractor networks, and anyone who needs a contractor email list at scale — without paying for an overpriced, stale data subscription.

Key Features

  • Google Maps search — Find contractor businesses by trade type and location, powered by Playwright
  • Email extraction — Automatically crawls contractor websites to find contact emails
  • DNS + SMTP verification — Confirms email deliverability before export to minimize bounces
  • Social media links — Extracts Facebook, Instagram, LinkedIn, and Twitter/X profiles
  • CRM-ready export — Output in Full, HubSpot Import, or Salesforce Import format
  • Real-time data — Fresh results scraped on demand, not a stale broker database
  • Deduplication — Automatically removes duplicate listings from overlapping search results
  • No coding required — Configure via form, click Start, download your contractor leads

Use cases

  • HVAC leads and contractor prospecting: Build an HVAC contractor email list or plumber leads database for any city or region in minutes — ideal for equipment suppliers, parts distributors, and refrigerant wholesalers targeting buying managers by territory.
  • Electrician and roofer lead generation: Source electrician leads and roofing contractor contacts for product sales, subcontractor recruitment, or regional outreach. Filter by review count to prioritize high-volume, established businesses.
  • Home service SaaS prospecting: Find home service leads for field service management, scheduling, invoicing, or estimating software by targeting active contractors in your region.
  • Commercial insurance outreach: Build targeted contractor email lists for commercial liability, bonding, and workers' comp campaigns.
  • Subcontractor sourcing: Identify qualified subcontractors by trade, city, and rating. Contact owners directly via verified email.
  • Construction supply and material sales: Reach plumbing supply buyers, HVAC equipment purchasers, roofing material buyers, and electrical supply contacts by scraping contractors in your distribution territory.

How it works

  1. Search Google Maps — The actor navigates to Google Maps, searches for the specified contractor trade in the target location, and scrolls through results to collect all listings.
  2. Extract listing data — For each listing, it captures business name, category, address, phone, website, rating, review count, hours, coordinates, and the Google Maps URL.
  3. Enrich from website — The actor visits each contractor's website (homepage + contact/about pages) to extract email addresses and social media links using pattern matching and DOM analysis.
  4. Verify email deliverability — Every email candidate is checked via DNS/MX lookup and SMTP handshake to confirm deliverability before being marked email_verified: true. No actual emails are sent.
  5. Format and export — Results are deduplicated, normalized, and pushed to the dataset in your chosen format (Full, HubSpot Import, or Salesforce Import).

Input parameters

ParameterTypeDefaultRequiredDescription
businessTypestring"HVAC Company"YesContractor trade to search for. Options: HVAC Company, Plumber, Roofer, Electrician, General Contractor, Landscaper, Painter, Pest Control, Custom.
locationstring"Dallas, TX"YesCity, state, ZIP, or metro area to search within.
searchQuerystring"HVAC companies in Dallas, TX"NoRaw Google Maps query — only used when businessType is Custom.
maxResultsinteger50NoMaximum leads to collect. Prefill is 3 for a quick test; 50–200 for production.
enrichEmailsbooleantrueNoVisit each contractor website to extract email addresses from contact/about pages.
verifyEmailsbooleantrueNoVerify email deliverability via DNS MX + SMTP handshake. Only applies when enrichEmails is enabled.
enrichSocialsbooleantrueNoScan contractor websites for Facebook, Instagram, LinkedIn, and Twitter/X links.
outputFormatstring"full"NoOutput structure: full (all fields), hubspot (HubSpot CSV import columns), salesforce (Salesforce import columns).
proxyUrlstring""NoCustom HTTP proxy URL (format: http://user:pass@host:port). Leave empty to use Apify's residential proxies.

Output data

Each record in the dataset contains:

FieldTypeDescription
business_namestringContractor business name
business_typestringThe search business type used
categorystring|nullGoogle Maps business category (e.g., "HVAC contractor")
phonestring|nullPhone number from Google Maps
emailstring|nullPrimary verified email extracted from contractor website
email_verifiedboolean|nullWhether email passed DNS MX + SMTP verification
email_verification_statusstring|nullsmtp_verified, dns_only, unverified, or unknown
email_verification_notestring|nullHuman-readable verification result
all_emailsarray|nullAll emails found on the site, each with verification status
websitestring|nullContractor website URL
addressstring|nullFull street address
ratingnumber|nullGoogle Maps star rating (0–5)
review_countinteger|nullTotal Google reviews
hoursstring|nullOperating hours summary
facebookstring|nullFacebook page URL
instagramstring|nullInstagram profile URL
linkedinstring|nullLinkedIn company page URL
twitterstring|nullTwitter/X profile URL
google_maps_urlstring|nullDirect Google Maps listing link
place_idstring|nullGoogle Place ID
latitudenumber|nullGPS latitude
longitudenumber|nullGPS longitude
scraped_atstringISO 8601 timestamp of extraction
source_urlstringGoogle Maps search URL used

Sample output

{
"business_name": "Comfort Air Solutions",
"business_type": "HVAC Company",
"category": "HVAC contractor",
"phone": "(214) 555-0192",
"email": "service@comfortairsolutions.com",
"email_verified": true,
"email_verification_status": "smtp_verified",
"email_verification_note": "Verified via SMTP",
"all_emails": [
{
"address": "service@comfortairsolutions.com",
"verified": true,
"status": "smtp_verified",
"verificationNote": "Verified via SMTP"
}
],
"website": "https://comfortairsolutions.com",
"address": "4521 Maple Ave, Dallas, TX 75219",
"rating": 4.7,
"review_count": 312,
"hours": "Mon-Fri 7:00 AM - 6:00 PM",
"facebook": "https://facebook.com/comfortairsolutions",
"instagram": null,
"linkedin": null,
"twitter": null,
"google_maps_url": "https://www.google.com/maps/place/Comfort+Air+Solutions/@32.8032,-96.8067,17z",
"place_id": "ChIJb5xK7wLQIYURxjM",
"latitude": 32.8032,
"longitude": -96.8067,
"scraped_at": "2026-06-24T12:00:00.000Z",
"source_url": "https://www.google.com/maps/search/HVAC%20Company%20in%20Dallas"
}

Pricing

This actor uses pay-per-event pricing: $0.05 per enriched contractor lead.

Cost examples

LeadsCost
10 leads$0.50
50 leads$2.50
100 leads$5.00
200 leads$10.00

You only pay for successfully enriched leads. If the actor fails to collect a lead, you are not charged.

Code examples

Run the actor via API

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('USERNAME/contractor-lead-scraper').call({
businessType: 'HVAC Company',
location: 'Dallas, TX',
maxResults: 50,
enrichEmails: true,
verifyEmails: true,
enrichSocials: true,
outputFormat: 'hubspot',
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${dataset.items.length} contractor leads`);

Run via Apify CLI

$apify run --input='{"businessType":"Plumber","location":"Miami, FL","maxResults":25}'

Schedule a daily run

apify schedule create --actor USERNAME/contractor-lead-scraper \
--cron "0 8 * * 1" \
--input '{"businessType":"HVAC Company","location":"Dallas, TX","maxResults":50}'

FAQ

Why do some leads have no email?

Not all contractors list an email on their website. Some use contact forms or only list a phone number. The actor scans the homepage, contact page, and about page — if no email is found, the email field will be null. You are not charged for leads without enrichment data beyond the Google Maps listing.

How accurate is email verification?

The actor performs a two-step check: (1) DNS MX record lookup to confirm the domain accepts email, and (2) an SMTP handshake to verify the specific mailbox exists. This catches most invalid emails, but some mail servers reject SMTP probes for security reasons — those will show email_verification_status: "unknown" rather than confirmed valid.

What does the email_verification_status field mean?

  • smtp_verified — Email passed both DNS MX lookup and SMTP mailbox check. Safe to send.
  • dns_only — Domain has an A record accepting mail but SMTP probe was skipped or unavailable.
  • unverified — Email failed verification (invalid domain or rejected mailbox).
  • unknown — Verification could not complete (timeout or connection error).

Can I search multiple locations?

Run the actor once per location. For territory-wide prospecting, run sequential searches for each city or ZIP code in your target area and merge the datasets. Each run deduplicates internally by business name.

What's the difference between output formats?

  • Full — All fields in the actor's native schema. Best for API integrations and custom processing.
  • HubSpot Import — Column names mapped to HubSpot's CSV import format. Download the dataset as CSV and upload directly to HubSpot.
  • Salesforce Import — Column names mapped to Salesforce's data import format, with LeadSource pre-filled as "Google Maps Scraper". Download as CSV and use Salesforce Data Import.

Does it work outside the US?

Yes. Google Maps returns results globally. The search query is built from the business type and location you provide. For non-US locations or niche trades not in the dropdown, use the Custom business type and write your own query.

Technical details

  • Crawler: PlaywrightCrawler with stealth mode and randomized viewports for anti-bot evasion
  • Proxy: Apify residential proxies by default, or custom proxy URL supported
  • Email verification: DNS MX lookup + SMTP RCPT TO handshake (8-second timeout per email)
  • Deduplication: Results are deduplicated by business name within each run
  • Resource blocking: Images, fonts, media, and tracking scripts are blocked for faster crawling
  • Session pool: Up to 5 browser sessions with rotation to avoid rate limiting

Limitations

  • Google Maps typically returns up to ~120 results per search query. Use multiple locations for larger datasets.
  • Email extraction depends on the business having a website with publicly visible contact info. Businesses using only contact forms will not have emails extracted.
  • SMTP verification may be blocked by some mail servers, resulting in unknown status rather than confirmed valid or invalid.
  • Google Maps CSS selectors change occasionally — the actor uses multiple fallback selectors to handle this.

Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools using the Apify platform.