Contractor Lead Scraper — Verified Emails (HVAC, Plumbing)
Pricing
from $50.00 / 1,000 enriched contractor leads
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
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
- 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.
- Extract listing data — For each listing, it captures business name, category, address, phone, website, rating, review count, hours, coordinates, and the Google Maps URL.
- 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.
- 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. - Format and export — Results are deduplicated, normalized, and pushed to the dataset in your chosen format (Full, HubSpot Import, or Salesforce Import).
Input parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
businessType | string | "HVAC Company" | Yes | Contractor trade to search for. Options: HVAC Company, Plumber, Roofer, Electrician, General Contractor, Landscaper, Painter, Pest Control, Custom. |
location | string | "Dallas, TX" | Yes | City, state, ZIP, or metro area to search within. |
searchQuery | string | "HVAC companies in Dallas, TX" | No | Raw Google Maps query — only used when businessType is Custom. |
maxResults | integer | 50 | No | Maximum leads to collect. Prefill is 3 for a quick test; 50–200 for production. |
enrichEmails | boolean | true | No | Visit each contractor website to extract email addresses from contact/about pages. |
verifyEmails | boolean | true | No | Verify email deliverability via DNS MX + SMTP handshake. Only applies when enrichEmails is enabled. |
enrichSocials | boolean | true | No | Scan contractor websites for Facebook, Instagram, LinkedIn, and Twitter/X links. |
outputFormat | string | "full" | No | Output structure: full (all fields), hubspot (HubSpot CSV import columns), salesforce (Salesforce import columns). |
proxyUrl | string | "" | No | Custom 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:
| Field | Type | Description |
|---|---|---|
business_name | string | Contractor business name |
business_type | string | The search business type used |
category | string|null | Google Maps business category (e.g., "HVAC contractor") |
phone | string|null | Phone number from Google Maps |
email | string|null | Primary verified email extracted from contractor website |
email_verified | boolean|null | Whether email passed DNS MX + SMTP verification |
email_verification_status | string|null | smtp_verified, dns_only, unverified, or unknown |
email_verification_note | string|null | Human-readable verification result |
all_emails | array|null | All emails found on the site, each with verification status |
website | string|null | Contractor website URL |
address | string|null | Full street address |
rating | number|null | Google Maps star rating (0–5) |
review_count | integer|null | Total Google reviews |
hours | string|null | Operating hours summary |
facebook | string|null | Facebook page URL |
instagram | string|null | Instagram profile URL |
linkedin | string|null | LinkedIn company page URL |
twitter | string|null | Twitter/X profile URL |
google_maps_url | string|null | Direct Google Maps listing link |
place_id | string|null | Google Place ID |
latitude | number|null | GPS latitude |
longitude | number|null | GPS longitude |
scraped_at | string | ISO 8601 timestamp of extraction |
source_url | string | Google 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
| Leads | Cost |
|---|---|
| 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
LeadSourcepre-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
unknownstatus 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.