Contractor Leads Scraper — Verified Emails avatar

Contractor Leads Scraper — Verified Emails

Pricing

from $50.00 / 1,000 enriched contractor leads

Go to Apify Store
Contractor Leads Scraper — Verified Emails

Contractor Leads Scraper — Verified Emails

Find contractor leads across HVAC, plumbing, electrical, and other trades with verified emails, phones, websites, and business data.

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

5

Total users

3

Monthly active users

8 days ago

Last modified

Share

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.

What is Contractor Leads Scraper?

Contractor Leads Scraper turns the target data into structured, reusable results on Apify. Use it when you need repeatable collection for sales teams, agencies, recruiters, market researchers, and data-enrichment workflows without maintaining a custom scraper or one-off integration. Run it manually, schedule recurring jobs, call it through the Apify API, or connect it to an AI agent through the Apify MCP server.

The Actor stores results in an Apify dataset, where they can be previewed and exported as JSON, CSV, Excel, XML, or RSS. Availability and completeness depend on the source, supplied inputs, public visibility, authentication requirements, and upstream rate limits.

Use cases for Contractor Leads Scraper

  • Build structured datasets for research, reporting, enrichment, or monitoring.
  • Automate repetitive collection with schedules, webhooks, and API calls.
  • Feed clean records into spreadsheets, databases, CRMs, BI tools, AI agents, or RAG pipelines.
  • Track changes over time by running the same validated input on a schedule.
  • Replace fragile manual copy-and-paste work with a reproducible Apify workflow.

How to use Contractor Leads Scraper

  1. Open the Actor input page and choose a focused, valid target.
  2. Set a conservative result limit for the first run.
  3. Start the Actor and inspect the dataset for coverage and field availability.
  4. Export the results or connect the dataset to your downstream system.
  5. Scale gradually and use scheduling, pagination, or proxies when supported.

Important input options

  • businessType — Select the contractor trade to search on Google Maps. The actor builds the query automatically — e.g., 'HVAC Company' finds heating, cooling, and air conditioning contractors in your city; '
  • location — The city, state, or ZIP code to search for contractors in. Use 'City, ST' format for best results (e.g., 'Dallas, TX', 'Phoenix, AZ', 'Chicago, IL'). ZIP codes and neighborhoods also work. F
  • searchQuery — A raw Google Maps search query — only used when Business Type is set to 'Custom'. Use this to target trades not in the dropdown, such as 'concrete contractors in Denver, CO', 'pool builders
  • maxResults — Maximum number of contractor leads to return. The prefill is 3 for a quick quality test — increase to 50–200 for production prospecting. Google Maps caps at ~120 results per search; run mult
  • enrichEmails — When enabled, the actor visits each contractor's website and scans contact pages, footers, and about pages to extract email addresses. Disable if you only need phone numbers and addresses, o
  • verifyEmails — When enabled, each extracted email is checked via DNS/MX lookup and SMTP handshake to confirm the mailbox exists and can receive mail — without sending any actual message. Adds ~1 minute per
  • enrichSocials — When enabled, the actor scans each contractor website for social media profile links: Facebook, Instagram, LinkedIn, and Twitter/X. Useful for multi-channel outreach, ad targeting (Facebook
  • outputFormat — Controls the structure of the output dataset. 'Full' returns all fields for custom pipelines. 'HubSpot Import' maps columns to HubSpot Contact and Company import properties for direct CSV up

API and automation example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/contractor-lead-scraper').call({
// Add the same input fields you use in the Apify Console.
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Use these dedicated tools when a neighboring data source or workflow is a better match:

Frequently asked questions

How many results can I scrape with Contractor Leads Scraper?

The practical total depends on the source, input limits, pagination, available records, run timeout, and upstream restrictions. Start with a small run, verify the output, and increase the limit gradually.

Can I integrate Contractor Leads Scraper with other apps?

Yes. Use Apify integrations, webhooks, schedules, dataset exports, Make, Zapier, Google Sheets, cloud storage, or your own application.

Can I use Contractor Leads Scraper with the Apify API?

Yes. Start runs with the Apify REST API or an official Apify client, then retrieve records from the run's default dataset. Keep your API token in a secret or environment variable.

Can I use Contractor Leads Scraper through an MCP Server?

Yes. The Apify MCP server can expose the Actor to compatible AI clients and agents. Review the input and expected cost before allowing an autonomous workflow to run it at scale.

Do I need proxies?

It depends on the source and volume. Use the default configuration first. For larger or geographically sensitive jobs, select an appropriate proxy configuration only when the Actor supports it.

Scraping rules vary by source, jurisdiction, data type, and intended use. Collect only data you are authorized to access, respect applicable terms and privacy laws, and avoid restricted or personal data misuse. This documentation is not legal advice.

Your feedback

If a field is missing, a source layout has changed, or you need a supported use case documented, open an issue on the Actor page with a reproducible input and run ID.