Roofing Contractor Lead Scraper — Emails & Phones
Pricing
from $30.00 / 1,000 roofing contractor leads
Roofing Contractor Lead Scraper — Emails & Phones
Find roofing contractor leads in any US city: phone, website, address, rating, public email with a mail check and roofing services. USD 35 per 1,000 leads.
Pricing
from $30.00 / 1,000 roofing contractor leads
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Roofing Contractor Lead Scraper builds roofing contractor leads from Google Maps: it finds roofing companies in any US city or niche and returns each company's name, phone, website, address, rating, review count, public email with a mail-record (MX) check, detected roofing services and social links. It is built for teams that sell to roofers, such as roofing software, material suppliers, insurers and marketing agencies, and it costs USD 35 per 1,000 leads on the FREE tier (USD 30 per 1,000 on GOLD).
What data does the roofing contractor lead scraper return?
Each dataset row is one roofing business:
| Field | What it contains |
|---|---|
business_name, business_type, category | Company name, the niche you searched and the Google Maps category |
phone, website, address | Contact details as shown on Google Maps |
rating, review_count, hours | Google Maps star rating, number of reviews and opening hours when shown |
email, email_source_url | Best public email found on the company website and the page it came from |
email_verified, email_verification_status, email_verification_note | Result of the email check (statuses below) |
all_emails | Up to 5 public emails, each with its own check result and source page |
services | Roofing services detected on the website, for example Roof Repair, Metal Roofing, Storm Damage, Gutter Installation |
facebook, instagram, linkedin, twitter | Public social profile links found on the website |
google_maps_url, place_id, latitude, longitude | Map link, place identifier and coordinates |
scraped_at, source_url | Collection time and the Maps search used |
Missing values are null or empty lists. The run summary is saved as OUTPUT: outcome (DATA, EMPTY, BLOCKED, REJECTED or FAILED), the search query, leads delivered, lead events charged, emails found and warnings.
How do I get a list of roofing companies with emails and phone numbers?
Pick a roofing niche and a location, then set how many leads you want. The Actor searches Google Maps for "<niche> in <location>", opens each business, then visits its website (home page plus up to three contact, about or service pages, contact pages first) to find emails, including addresses hidden by email-protection scripts, services and social links.
| Input | Example | Notes |
|---|---|---|
businessType | Storm Damage Roofer | Roofing Contractor, Residential Roofer, Commercial Roofer, Roof Repair Service, Metal, Flat or Shingle Roofing Contractor, Storm Damage Roofer, Gutter Installer, or Custom |
location | Denver, CO | City, state, ZIP code or region |
searchQuery | solar roof installers in Austin, TX | Used only when businessType is Custom |
maxResults | 50 | 1 to 200 leads (default 25; the Console prefill asks for 3) |
enrichEmails, verifyEmails, enrichSocials | true | Website emails, mail-record check and social links (all on by default) |
emailRequirement | found | any keeps every company, found keeps leads with a public email; smtp_verified is rejected on the cloud (see below) |
Commercial roofers in Houston, keeping only leads with an email:
{"businessType": "Commercial Roofer","location": "Houston, TX","maxResults": 50,"emailRequirement": "found"}
A custom niche:
{"businessType": "Custom","searchQuery": "tile roofing contractors in Phoenix, AZ","maxResults": 25}
How reliable are the emails?
Emails are only as available as contractors make them. In a 10-lead Phoenix cloud run on 2026-10-27 the Actor found a public website email for 8 companies, after it started reading contact pages first and decoding protected addresses (earlier builds found one in five). The Actor never sends email. It checks syntax and the domain's mail (MX) records. Where the run can open SMTP connections, it also asks the mail server whether it would accept the address and a random one, without sending anything:
smtp_verified: the server accepted this mailbox and rejected a random onecatch_all: the domain accepts any address, so this one cannot be confirmedmx_only: mail records exist, but the mailbox itself was not confirmedsmtp_rejected,invalid_domain: the mailbox or domain does not accept mailnot_checked: verification was turned off
Cloud runs cannot open SMTP connections (outbound mail port 25 timed out in every 2026-10-27 test run), so on Apify every found email ends as mx_only and no lead reaches smtp_verified. The Actor tests this once at the start instead of waiting on each address, records it as smtpCheckAvailable in OUTPUT, and rejects emailRequirement: "smtp_verified" before any search, with no lead charges. Use emailRequirement: "found" for email-only lists.
Does it give me homeowner roofing leads?
No. It returns roofing businesses, not homeowners who need a roof. Use it to prospect roofing companies (B2B leads). If you are a roofer looking for customer jobs, this is the wrong tool.
When should I use it, and when not?
Use it when you need a fresh list of roofing contractors in a market, with phone, website and any public email, for outreach, territory planning or supplier research.
Use another Actor when:
- You need licensed roofers in Illinois from the state register: Illinois Roofing Contractor Directory & Leads Scraper.
- You want several trades at once: Contractor Leads Scraper, or by trade HVAC Leads Scraper, Electrician Leads Scraper and USA Plumbers Scraper.
- You need any business type without email enrichment: Google Maps 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/roofing-contractor-lead-scraper').call({businessType: 'Residential Roofer',location: 'Tampa, FL',maxResults: 40,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const lead of items) console.log(lead.business_name, lead.phone, lead.email);
Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("muhammadafzal/roofing-contractor-lead-scraper").call(run_input={"businessType": "Metal Roofing Contractor","location": "Nashville, TN","maxResults": 25,"emailRequirement": "found",})for lead in client.dataset(run.default_dataset_id).iterate_items():print(lead["business_name"], lead["email"], lead["email_verification_status"])
Use it from an AI assistant
Roofing Contractor Lead 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/roofing-contractor-lead-scraper to your client and ask, for example: "Find 30 commercial roofing contractors in Atlanta with phone numbers, websites and any public email." Each lead is charged at the prices below, so include a result limit in your request.
What does the output look like?
Two records from a cloud run on 2026-10-26 (shortened):
[{"business_name": "T Rock Roofing & Contracting","business_type": "Roofing Contractor","category": "Roofing contractor","services": ["Roof Repair", "Roof Replacement", "Commercial Roofing", "Metal Roofing", "Storm Damage", "Gutter Installation"],"phone": "+1 469-931-9867","email": "info@dallasroofer.com","email_verified": null,"email_verification_status": "mx_only","email_verification_note": "MX records exist; SMTP result was inconclusive","email_source_url": "https://dallasroofer.com/","website": "https://www.dallasroofer.com/","address": "9330 Lyndon B Johnson Fwy #900, Dallas, TX 75243, United States","rating": 4.9,"review_count": 818,"facebook": "https://www.facebook.com/trockroofers","linkedin": "https://www.linkedin.com/company/t-rock-roofing-and-contracting","place_id": "0x864c1ff1d7ea3cd3:0xfc3e94e948dced49","latitude": 32.91215,"longitude": -96.73876,"scraped_at": "2026-10-26T07:26:00.283Z"},{"business_name": "New View Roofing","category": "Roofing contractor","services": [],"phone": "+1 469-966-1196","email": null,"all_emails": [],"website": "https://newviewroofing.com/?utm_source=google&utm_medium=organic&utm_campaign=gmb","address": "4722 Gaston Ave, Dallas, TX 75246, United States","rating": 4.9,"review_count": 703}]
How much do roofing contractor leads cost?
The Actor uses pay-per-event pricing, and platform usage is included in the event prices. One lead event is charged after each record is saved; companies filtered out by emailRequirement are not charged.
| Event | FREE | BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|---|
| Roofing contractor lead (one dataset row) | USD 0.035 | USD 0.035 | USD 0.035 | USD 0.03 |
| Actor start (per started GB of allocated memory) | USD 0.005 | USD 0.005 | USD 0.005 | USD 0.005 |
Worked totals on the FREE tier at the default 1 GB memory (one start event, USD 0.005):
- 3 leads (Console prefill): 3 × USD 0.035 + USD 0.005 = USD 0.110
- 100 leads: 100 × USD 0.035 + USD 0.005 = USD 3.505
A search with no matches charges only the start events. If you set a maximum cost per run, the Actor stops after the last lead the budget covers.
Limits and reliability
- Speed: on 2026-10-27, 3 leads with website, email and social checks took 56 seconds and 10 leads took about 5.5 minutes in cloud runs; slow Maps pages are retried. The default 600-second timeout fits roughly 15 to 20 leads. The run stops opening Maps listings in time to save and charge what it collected, and says so in
OUTPUT; raise the timeout for larger lists. - Scale: 1 to 200 leads per run, deduplicated by name and address.
- Coverage: some company websites cannot be read (1 of 10 in the 2026-10-27 run), which leaves email, services and socials empty for that lead.
hourslists the weekly opening hours shown on Maps, for exampleMonday: 8 AM to 5 PM; .... - Errors: a Google Maps access challenge ends the run as failed with outcome
BLOCKEDand 0 lead events; invalid input combinations end asREJECTEDwith a message.
FAQ
Is there a free roofing leads tool?
You can run this Actor on Apify's free plan with no subscription. Each delivered lead is charged at the FREE-tier price above.
Does it find the owner's personal email?
No. It only collects emails published on the company website, usually addresses like info@ or office@, ranked first.
Can I search several cities in one run?
One run covers one search. Run it once per city, or use Custom with a regional query such as roofing contractors in Dallas-Fort Worth.
What roofing services can it detect?
Sixteen: roof repair, replacement, new installation, residential, commercial, asphalt shingles, metal, flat (TPO/EPDM), tile, slate, storm damage, emergency repair, inspection, gutters, skylights and waterproofing.
Can I import the leads into a CRM?
Yes. Export the dataset as CSV or Excel, or pull it through the Apify API into HubSpot, Salesforce or a sheet.
Why is smtp_verified rejected?
Apify cloud runs cannot open SMTP connections, so no mailbox can be confirmed individually and emails end as mx_only. The run stops before searching rather than charge for leads it would filter out. Use found instead.
Related Actors
- USA Plumbers Scraper: plumber leads with phones from Google Maps
- Thumbtack Scraper: home-service professionals by service and ZIP code
- Illinois Roofing Contractor Directory & Leads Scraper: state-licensed roofing contractors
- Contractor Leads Scraper: multi-trade contractor leads
- Practo Doctors Scraper and Tripadvisor Scraper — Hotel & Hospitality Leads: leads in other service sectors
Legal and compliance
The Actor reads public Google Maps listings and public company websites. It does not log in, send email or bypass access controls. Business contacts can include personal data: 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