Contractor Leads Scraper — Contractor List from Google Maps
Pricing
from $35.00 / 1,000 enriched contractor leads
Contractor Leads Scraper — Contractor List from Google Maps
Build contractor leads from Google Maps by trade and city: HVAC, plumbers, roofers, electricians. Name, phone, website, rating. USD 50 per 1,000 leads.
Pricing
from $35.00 / 1,000 enriched contractor leads
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
15
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Contractor Leads Scraper builds contractor leads from Google Maps: pick a trade such as HVAC, plumbing, roofing or electrical, enter a city, and it returns each business with its name, category, phone, website, full address, rating, review count, weekly hours, coordinates and Maps link, then checks the contractor's website for emails and social profiles. It is built for suppliers, software vendors, insurers and agencies that sell to contractors, and it costs USD 50 per 1,000 leads on the FREE tier (USD 35 per 1,000 on GOLD).
These are leads of contractors for B2B outreach. If you are a contractor looking for homeowner jobs, this Actor is not that kind of lead source.
What data does Contractor Leads Scraper return?
Each lead is one dataset row. With the default full output format:
| Field | What it contains |
|---|---|
business_name | Business name from the Google Maps result |
business_type | The trade you searched, for example HVAC Company |
category | Google Maps primary category, for example HVAC contractor |
phone, website, address | From the Google Maps result; address is the full address, such as 9201 Forest Ln, Dallas, TX 75243 |
rating, review_count, hours | Star rating, number of Google reviews, and weekly hours such as Monday: 7 AM–7 PM; … |
email, all_emails | First email found on the contractor's website, and up to 5 emails with a check result each |
email_verified, email_verification_status, email_verification_note | Mail-server check of the first email: smtp_verified, dns_only, unverified or unknown |
facebook, instagram, linkedin, twitter | Social profile links found on the website |
google_maps_url, place_id | Maps place link and the Google place ID |
latitude, longitude | Coordinates of the place |
scraped_at, source_url | Collection time and the Maps search URL |
Every field except business_name, scraped_at and source_url can be null.
Current coverage, measured on 2026-10-27. The Console example (HVAC companies in Dallas, TX, 3 leads) returned 3 leads in the cloud, all with phone, website, full address, rating, review count and hours; one had an email and two had a Facebook page. In a 40-lead local check for handymen in Lubbock, TX, 39 leads had a phone or website. Emails depend on each contractor's website, so check a small run before you buy a large one.
How do I build a contractor list for a trade and city?
Choose a trade, type one location, and set a small Max Results first.
- Business Type: HVAC Company, Plumber, Roofer, Electrician, General Contractor, Landscaper, Painter, Pest Control, or
Custom. - Location: one city, state or ZIP code, for example
Dallas, TX. The search becomes "HVAC company in Dallas, TX". - Max Results: 1 to 500 (default 50). One Google Maps search shows about 120 places at most, so run once per city for wider coverage.
- Output Format:
full,hubspotorsalesforce.
Plumbers in Phoenix, ready for HubSpot import:
{"businessType": "Plumber","location": "Phoenix, AZ","maxResults": 25,"outputFormat": "hubspot"}
A trade that is not in the list. With Custom, the query is used exactly as written and Location is ignored:
{"businessType": "Custom","searchQuery": "concrete contractors in Denver, CO","maxResults": 10,"enrichSocials": false}
Does it find contractor emails?
It tries, but only when the Maps result has a website. The Actor reads the home page plus up to two contact, about or service pages, collects email addresses, mailto: links and protected addresses written into the page, and keeps up to 5 per lead. With Verify Email Deliverability on, it looks up the domain's mail servers and asks the first server whether the mailbox exists, without sending mail. Many servers refuse these checks; that result is unknown, not invalid. Many contractors publish only a contact form or a phone number, and those leads have no email.
When should I use it, and when not?
Use it when you need a fresh list of contractor businesses in one city and trade, with phones and websites where Maps shows them, for calls, CRM import or territory research.
Use another Actor when:
- You need license numbers, license status or the license holder: Contractor License Leads for Washington, California and Texas, or TDLR License Scraper for Texas.
- You only target HVAC companies: HVAC Leads Scraper.
- You need any business type, not only trades: Google Maps Scraper.
- You want contractors tied to new construction projects: Building Permits Scraper.
How do I run it from code?
JavaScript with apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/contractor-lead-scraper').call({businessType: 'Roofer',location: 'Tampa, FL',maxResults: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const lead of items) console.log(lead.business_name, lead.phone, lead.website);
Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("muhammadafzal/contractor-lead-scraper").call(run_input={"businessType": "Electrician","location": "Columbus, OH","maxResults": 20,})for lead in client.dataset(run.default_dataset_id).iterate_items():print(lead["business_name"], lead.get("phone"), lead.get("email"))
Use it from an AI assistant
Contractor Leads Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/contractor-lead-scraper and ask, for example: "Find 10 roofing companies in Tampa, Florida with their phone numbers and websites." Each lead is charged at the prices below, so include a result limit in your request.
What does the output look like?
A lead from a cloud run of the Console example on 2026-10-27 (full format):
{"business_name": "The Chill Brothers","business_type": "HVAC Company","category": "HVAC contractor","phone": "(844) 512-4455","email": "hello@thechillbrothers.com","email_verified": null,"email_verification_status": "unknown","all_emails": [{"address": "hello@thechillbrothers.com","verified": null,"status": "unknown","verificationNote": "SMTP verification timed out"}],"website": "https://thechillbrothers.com/hvac-services-in-dallas-tx/","address": "8131 Lyndon B Johnson Fwy Ste 790, Dallas, TX 75251","rating": 4.6,"review_count": 535,"hours": "Tuesday: 7 AM–9 PM; Wednesday: 7 AM–9 PM; Thursday: 7 AM–9 PM; Friday: 7 AM–9 PM; Saturday: 8 AM–9 PM; Sunday: 8 AM–9 PM; Monday: 7 AM–9 PM","facebook": "https://facebook.com/thechillbrothers","instagram": "https://instagram.com/thechillbrothers/","linkedin": "https://linkedin.com/company/thechillbrothers/","twitter": null,"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJ601XadIhTIYRvO4eGG9HB84","place_id": "ChIJ601XadIhTIYRvO4eGG9HB84","latitude": 32.925714899999996,"longitude": -96.7656291,"scraped_at": "2026-10-27T08:39:01.736Z","source_url": "https://www.google.com/maps/search/HVAC%20company%20in%20Dallas%2C%20TX"}
hubspot returns Company Name, Industry, Phone Number, Email, Website, Street Address, City, State/Region, Zip Code, Google Maps URL, Rating, Business Category, social columns and Email Verified. salesforce returns Account Name, Phone, Website, billing address columns, Email__c, Rating__c, Place_ID__c, social columns and LeadSource set to Google Maps Scraper. City, state and ZIP are split from the full address.
Pricing: how much do contractor leads cost?
The Actor uses pay-per-event pricing, and platform usage is included in the event prices.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| Enriched contractor lead (one dataset row) | USD 0.05 | USD 0.045 | USD 0.04 | USD 0.035 | USD 0.035 |
| Actor start (per started GB of allocated memory) | USD 0.00005 | USD 0.00005 | USD 0.00005 | USD 0.00005 | USD 0.00005 |
Worked totals on the FREE tier at the default 512 MB memory (one start event):
- 3 leads: 3 × USD 0.05 + USD 0.00005 = USD 0.15005
- 50 leads: 50 × USD 0.05 + USD 0.00005 = USD 2.50005
A lead is charged only when it has a phone, website or email. A lead with only a name and Maps link is saved but not charged, and each lead is saved before it is charged. A search that finds nothing charges only the start events. Apify requires a maximum cost per run of at least USD 1.00 for this Actor; a lower limit is rejected before the run starts.
Limits and reliability
- One search per run: one trade and one location, up to about 120 Maps places; duplicates are removed by Google place ID.
- Speed: the 3-lead Console example took about 14 seconds in the cloud on 2026-10-27, website checks included.
- Fields come from Google Maps' own search results data, which carries phone, website, address, rating, review count, hours and coordinates for each place. A few places publish no phone or website.
- No results: the run ends without data and without lead charges.
FAQ
Why does a lead have no phone or website?
The business did not publish one on Google Maps. Such leads are rare (1 of 40 in the 2026-10-27 check) and are not charged when they also have no email.
Am I charged for a lead without an email?
Yes, when it has a phone or website. A lead with no phone, website or email is saved but not charged.
Is there a free contractor leads list?
No. Each lead costs USD 0.05 on the FREE tier, and USD 0.035 on GOLD.
Can I search several cities in one run?
No. Run the Actor once per city or ZIP code and merge the datasets.
How reliable is smtp_verified?
It means the recipient's mail server accepted the mailbox during the check. Servers that refuse checks return unknown, and a domain with only an A record returns dns_only.
Does it work outside the United States?
The location and custom query accept any text Google Maps understands. Runs on record use US cities.
Related Actors
- Contractor License Leads: licensed contractor records from Washington, California and Texas
- Dumpster Rental Prices Scraper: local dumpster prices and sizes for construction and cleanup jobs
- Roofing Contractor Lead Scraper, USA Plumbers Scraper and Electrician Leads Scraper: single-trade lead lists
- Yellow Pages Scraper USA: business listings from a second directory
Legal and compliance
The Actor reads public Google Maps results and public pages of contractor websites. It does not log in or bypass access controls. Business contacts can include personal data such as owner names and direct emails: use them lawfully and follow CAN-SPAM, TCPA, Do Not Call and anti-spam rules for outreach. This tool is not affiliated with Google, and this is not legal advice.
Last verified: 2026-10-27