Construction Lead Intelligence Scraper
Pricing
Pay per usage
Construction Lead Intelligence Scraper
Scrape verified leads for contractors, interior designers & builders from Google Maps. Get emails, SEO/security grades, and ready-to-use sales pitches.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Techforce Global
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Construction Lead Intelligence Scraper
Find construction-industry leads on Google Maps — general contractors, architecture firms, interior designers, roofing contractors, construction companies, and real estate agencies — complete with verified contact emails, working hours, and reviews. No manual Google Maps searching, no copy-pasting contact details, no guessing which leads are worth a pitch.
Built for agencies, freelancers, and sales teams selling web design, SEO, or digital services to the construction trade, who need a ready-to-call lead list with a sales angle already attached — not an afternoon of scrolling Google Maps and guessing who needs help.
Pick a business type and city → get every matching company with contact info → know exactly who to pitch and why.
⭐ Why This Actor?
- ✅ Just pick a business type and city — or drop in a full Google Maps search/URL — no manual scrolling through Maps results.
- ✅ Construction-only, on purpose — the Actor validates every search against the construction trade (general contractors, architects, interior designers, roofing, construction companies, real estate); anything else is rejected before it burns a run.
- ✅ Finds a real contact email — visits each business's website and checks the homepage/footer plus high-probability contact/about pages for the best email, not just a scrape of whatever's on the homepage.
- ✅ Optional lead-intelligence report — turn on Advanced Web Analysis to get a website health scorecard, SEO/SSL/technical grades, a recommended sales pitch, and estimated revenue potential for each lead.
- ✅ Fast, concurrent scraping — a pool of parallel browser pages processes multiple businesses at once instead of one at a time.
- ✅ Deliver anywhere via MCP connectors — push scraped leads straight into Notion, Slack, Airtable, or any other MCP-compatible tool.
- ✅ Export-ready — JSON and CSV are saved automatically, and new runs merge with previous results instead of overwriting them.
📝 Use Cases & ROI
| Use Case | Time Saved | What You Get |
|---|---|---|
| Agency lead prospecting | 3–6 hrs/city | A contactable shortlist of construction businesses with emails and pitch angles |
| Web/SEO service sales | 2–4 hrs/list | Website health grades and pain points to open the conversation with |
| Local market mapping | 2–5 hrs/report | Every general contractor, architect, or interior designer in a city, in one dataset |
| Cold outreach campaigns | 1–3 hrs/batch | Ready-to-import CSV/JSON of names, emails, phones, and hours |
| CRM enrichment | 2–4 hrs/batch | Fresh construction-lead records ready to import via API |
🚀 How to Use
- Open the Actor on Apify.
- Pick a Business type (e.g.
General contractor,Interior designer) and enter a Location — or use Search by business name, Google Maps URL, or custom query for a specific target. - Set Maximum businesses to analyze (1–500, default 20).
- Leave Advanced business opportunity analysis on to get the full lead-intelligence report, or turn it off for basic contact scraping only.
- Adjust Parallel browser pages, Email pages per website, and Audit pages per website if needed — the defaults work for most runs.
- Optional: select an MCP connector and fill in Delivery mode, Connector tool name, and Connector tool arguments to push leads straight into Notion, Slack, or Airtable as they're scraped.
- Click Run — results are saved to the dataset as each business is processed.
- Download as JSON or CSV, or pull results via the Apify API.
💳 Free plan: Advanced Web Analysis is capped at 20 companies per run. Basic contact scraping (name, phone, email, hours) is unaffected by this cap. 💰 Paid runs: Advanced Web Analysis is billed as a pay-per-event charge (
advanced-web-analysis) and only runs when the actor is published with pay-per-event pricing configured in Apify Console — otherwise it's skipped and the run falls back to basic details only.
🧩 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
searchQueries | String | Optional | Business name, Google Maps URL, or custom query. Only construction-related searches are accepted (e.g. "General contractor in Ahmedabad"); non-construction searches are rejected. Overrides category/subcategory/location when set. |
category | Enum | Optional | Business category. Currently Construction only. Used only when searchQueries is empty. |
subcategory | Enum | Optional | Exact business type: Architecture firm, Real estate agency, General contractor, Interior designer, Roofing contractor, Construction company. Default: General contractor. |
location | String | Optional | City, area, state, or country to search in (e.g. "Ahmedabad", "Chicago, USA"). Default: "Ahmedabad". |
maxResults | Integer | Optional | Maximum businesses to analyze (1–500). Default: 20. |
language | String | Optional | Google Maps language code. Default: "en". |
batchSize | Integer | Optional | Businesses processed in parallel (1–20). Lower this if pages load slowly. Default: 4. |
maxEmailPagesPerSite | Integer | Optional | Max pages checked per website for email/social links (1–25). Default: 4. |
advanceWebAnalysis | Boolean | Optional | Generates the lead priority, pitch strategy, service recommendations, website scorecard, and technical intel for each business. Default: true. |
maxAuditPagesPerSite | Integer | Optional | Max website pages sampled for the opportunity report (1–25). Default: 6. |
mcpConnector | String | Optional | ID of a connector you've authorized in Apify (Notion, Slack, Airtable, etc.). Leave empty to skip delivery and keep leads in the dataset only. |
deliveryMode | Enum | Optional | How leads are sent to the connector: perLead (one call per lead), summary (one call for the whole list), chunked (batched calls under a size limit), or none. Default: perLead. |
mcpTool | String | Optional | The tool to call on the connector, e.g. create_page (Notion), send_message (Slack), create_record (Airtable). |
mcpArguments | JSON | Optional | Arguments passed to the connector tool. Any string value can contain {placeholders} (see below). |
mcpMessageTemplate | String | Optional | Template rendered per lead (or per chunk/summary) and exposed as the {message} placeholder inside mcpArguments. |
Example — Basic contact list, no lead report
{"subcategory": "Interior designer","location": "Ahmedabad","maxResults": 30,"advanceWebAnalysis": false}
Example — Full lead-intelligence report
{"subcategory": "General contractor","location": "Mumbai","maxResults": 20,"advanceWebAnalysis": true,"maxAuditPagesPerSite": 6}
Example — Custom search query
{"searchQueries": "Roofing contractor in Chicago","maxResults": 25}
Example — Deliver each lead to Slack as it's found
{"subcategory": "General contractor","location": "Austin, USA","maxResults": 15,"mcpConnector": "your-slack-connector-id","deliveryMode": "perLead","mcpTool": "send_message","mcpArguments": {"channel": "#construction-leads","text": "{message}"},"mcpMessageTemplate": "🔥 {leadPriority}: {name} ({category})\n{phone} · {email}\n{salesAngle}"}
Example — One Notion page per lead
{"subcategory": "Interior designer","location": "Ahmedabad","maxResults": 25,"mcpConnector": "your-notion-connector-id","deliveryMode": "perLead","mcpTool": "create_page","mcpArguments": {"parent_page_id": "your-notion-parent-page-id","title": "{name}","content": "{message}"},"mcpMessageTemplate": "Category: {category}\nPhone: {phone}\nEmail: {email}\nWebsite: {website}\nRating: {rating} ({reviews} reviews)\nPitch: {recommendedPitch}\nWebsite grade: {finalGrade}"}
Example — One Airtable record per lead
{"subcategory": "Roofing contractor","location": "Chicago, USA","maxResults": 30,"mcpConnector": "your-airtable-connector-id","deliveryMode": "perLead","mcpTool": "create_record","mcpArguments": {"table": "Leads","fields": {"Name": "{name}","Phone": "{phone}","Email": "{email}","Website": "{website}","Lead Priority": "{leadPriority}","Grade": "{finalGrade}"}}}
Example — Chunked delivery for a large run
{"subcategory": "Construction company","location": "Mumbai","maxResults": 200,"mcpConnector": "your-notion-connector-id","deliveryMode": "chunked","mcpTool": "append_blocks","mcpArguments": {"page_id": "your-notion-page-id","text": "Part {part}/{partCount}\n\n{leads}"}}
Placeholders available in mcpArguments and mcpMessageTemplate
| Placeholder | Available in | Description |
|---|---|---|
{name}, {category}, {address}, {phone}, {email}, {website}, {rating}, {reviews}, {mapsUrl} | perLead | The business's basic contact fields |
{leadPriority}, {salesAngle}, {recommendedPitch}, {finalGrade} | perLead | Lead-intelligence fields (only populated when Advanced Web Analysis ran) |
{leadCount} | all modes | Total number of leads in this run |
{leads} | summary, chunked | All leads (or the current chunk) formatted as readable text blocks |
{part}, {partCount} | chunked | The current chunk number and total chunk count |
{message} | all modes | The rendered mcpMessageTemplate, ready to drop into mcpArguments |
📦 Output Fields
Every record is a structured lead report:
| Section | Description |
|---|---|
LEAD_OVERVIEW | Lead priority, revenue opportunity level, sales angle, recommended pitch, and estimated monthly/one-time service potential |
BUSINESS_PROFILE | Name, category, address, phone, website, email, working hours, Google rating/reviews, Maps URL |
PITCH_STRATEGY | Opening hook, best services to pitch, pain points to highlight, outcomes to promise, closing strategy |
WEBSITE_HEALTH_SCORECARD | Final grade/classification and a per-area grade breakdown (technical quality, SEO, SSL/security, navigation, performance) |
SERVICE_RECOMMENDATIONS | Prioritized list of services to sell, with what to fix, why it matters, and the expected outcome |
TECHNICAL_INTEL | Tech stack, SSL status, robots.txt/sitemap status, pages audited, and key technical issues found |
When Advanced Web Analysis is off (or unavailable on a free run past the cap), the record keeps the same structure but the lead-intelligence fields (LEAD_OVERVIEW, PITCH_STRATEGY, WEBSITE_HEALTH_SCORECARD, SERVICE_RECOMMENDATIONS, TECHNICAL_INTEL) are left empty since no analysis ran — the BUSINESS_PROFILE contact fields (name, category, address, phone, website, email, working hours, rating, review count, Maps URL) are always fully populated either way.
Example Output (abridged)
{"LEAD_OVERVIEW": {"leadPriority": "Hot Lead","revenueOpportunityLevel": "High","estimatedMonthlyServicePotential": "₹25,000 - ₹75,000","estimatedOneTimeProjectPotential": "₹75,000 - ₹2,00,000"},"BUSINESS_PROFILE": {"businessName": "Home Hancer Services Pvt Ltd","category": "General contractor","phone": "091576 91572","website": "http://www.homehancer.co.in/","googleRating": "4.8","totalReviews": "352"},"WEBSITE_HEALTH_SCORECARD": {"finalGrade": "D","finalClassification": "Critical improvement required: core website quality issues should be prioritized"}}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Results are also merged into local combined JSON/CSV files, so re-running a query doesn't overwrite previously saved companies.
🔌 Integrations & Delivery
Leads don't have to sit in the dataset — point the Actor at any MCP connector you've authorized in Apify (Notion, Slack, Airtable, or anything else on the Apify MCP registry) and each run pushes results straight there as they're scraped.
- How it connects — delivery runs through the Apify MCP Proxy. The Actor authenticates with its own run token; Apify injects your connector's credentials server-side, so the Actor never sees or stores your Notion/Slack/Airtable secrets.
- Delivery modes —
perLeadcalls the tool once per business (best for Slack pings or one-record-per-lead tables);chunkedbatches leads into a handful of calls that stay under a connector's size limits (best for large Notion pages);summarysends the whole run in a single call;noneskips delivery entirely. - Any tool, any shape —
mcpToolnames the exact tool to call (e.g.create_page,send_message,create_record), andmcpArgumentsis a free-form JSON object matching that tool's schema, with{placeholders}filled in per lead. If the tool name doesn't match one on the connector, the run logs the available tools and skips delivery instead of failing silently. - Delivery never blocks your data — leads are saved to the Apify dataset first; connector delivery happens afterward and a delivery failure never affects the saved results.
🛠️ How It Works
my_actor/main.py drives a real Playwright browser through Google Maps, then:
- Builds the search from
category+subcategory+location, or usessearchQueriesdirectly — rejecting anything that isn't construction-related. - Queues the matching Google Maps place URLs and visits each one (through a pool of parallel browser pages) to scrape name, address, phone, hours, rating, and reviews.
- Visits the business's website to find the best contact email and any social media links, checking the homepage/footer first, then high-probability contact/about pages.
- If Advanced Web Analysis is enabled and available for the run, audits the website's SEO, SSL/security, technical quality, and navigation, then generates the lead priority, pitch strategy, service recommendations, and revenue estimate for that business.
- Saves every result to the Apify dataset immediately, and merges it into local combined JSON/CSV output files.
- If an MCP connector is selected, delivers the scraped leads to it using the chosen delivery mode — this step runs last and never affects what's already saved.
Built with: Apify SDK for Python · Playwright · Beautiful Soup · Model Context Protocol
🆘 Support
For issues, custom sourcing requests, or feature suggestions:
Email: bhavin.shah@techforceglobal.com
Need a Custom Pipeline?
Want multi-city batch runs, deeper enrichment (phone verification, employee counts), or a full CRM integration?
📅 Book a Free 15-min Consultation
Made with ❤️ by Techforce Specialists in High-Performance Web Scrapers and AI Automation.
Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google or Google Maps. All trademarks are property of their respective owners. The Actor collects only publicly available business information surfaced through Google Maps and public business websites, and does not log into, or scrape behind the authentication of, any platform. Use the data responsibly and in compliance with applicable laws (including GDPR/CCPA) and the terms of the platforms you operate on.