Home Services Lead Finder - HVAC, Plumbing, Roofing avatar

Home Services Lead Finder - HVAC, Plumbing, Roofing

Pricing

from $4.00 / 1,000 base lead records

Go to Apify Store
Home Services Lead Finder - HVAC, Plumbing, Roofing

Home Services Lead Finder - HVAC, Plumbing, Roofing

Enriched Google Maps leads for US home services contractors. Email, tech stack (ServiceTitan/Housecall Pro/Jobber/FieldEdge), license numbers, service area, social profiles. Built for sales teams selling INTO contractors and PE firms rolling them up.

Pricing

from $4.00 / 1,000 base lead records

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

2

Monthly active users

7 days ago

Last modified

Share

Home Services Lead Finder

TL;DR for B2B SaaS sales reps selling INTO home-services SMBs (HVAC, plumbing, electrical, garage door, pool, lawn, pest, cleaning, handyman): Pulls US home-services SMBs from Google Maps with detected field service management software (ServiceTitan, Jobber, Housecall Pro, FieldEdge, FieldRoutes, ServiceFusion, Workiz, Razorsync), CRM, payments, and dispatch stack. Compared to compass/crawler-google-places, you get vertical FSM stack detection plus PE rollups, national franchises, and home-services aggregators (Apex Service Partners, Wrench Group, Authority Brands, Neighborly, Mr Handyman, Mr Rooter) pre-blocked. Free Apify plan returns about 1,000 leads per month on your $5 platform credit, then demo samples plus an upgrade message. Upgrade to Apify Starter ($49/mo) for unlimited volume.

Run it in 30 seconds

# Via the Apify Python SDK
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/home-services-lead-finder").call(run_input={
"search_terms": [
"plumber",
"hvac"
],
"locations": [
"Austin, TX"
],
"enrichment_tier": "premium",
"max_results_per_query": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or via curl:

curl -X POST "https://api.apify.com/v2/acts/seibs.co~home-services-lead-finder/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"search_terms": ["plumber", "hvac"], "locations": ["Austin, TX"], "enrichment_tier": "premium", "max_results_per_query": 50}'

Or click "Try for free" on this page if you prefer the no-code UI.

What you get

Each run produces:

  • A clean dataset, filterable in the Apify console and downloadable as CSV or JSON
  • An OUTPUT.html dashboard preview of your top records
  • A sample-output preview at ./.actor/sample-output.json

Per-archetype custom artifacts shipped with this actor:

  • top-leads.csv (HubSpot-ready columns, sorted by confidence_score)
  • cold-email-templates.html (per-FSM pitch with copy-to-clipboard buttons)
  • stack-breakdown.csv (FSM plus CRM plus payments per record)

What does Home Services Lead Finder do?

Pulls Google Maps listings for HVAC, plumbing, electrical, roofing, solar, garage door, pest control, and landscaping contractors in any US metro, then enriches each record with website-derived signals: emails, social profiles, FSM/CRM tech stack, state license numbers, owner names, hiring activity, and BBB status. Outputs structured JSON ready for CRM ingestion or PE deal-sourcing pipelines.

Features

  • Google Maps lead extraction across 8 home-services service lines
  • Three pay-as-you-go enrichment tiers (base, email, premium)
  • 50+ FSM/CRM platforms detected (ServiceTitan, Housecall Pro, Jobber, FieldEdge, Workiz, Service Fusion and more)
  • State license numbers extracted across 27 states
  • Role-bucketed emails (sales, support, billing, hr, executive, marketing)
  • BBB accreditation, 24/7 service, year founded, fleet hints, owner names, employee count
  • National-chain pre-blocking (One Hour, ARS, Roto-Rooter, etc.)
  • Online booking, chatbot, email marketing, lead-capture CTA, mobile app, certification, financing detection
  • Schema.org JSON-LD parsing
  • Confidence score per record for quality filtering

What you get

Sample output: ./.actor/sample-output.json â€" copy-paste-ready preview of real-looking records.

First record inline:

{
"place_id": "ChIJsGe2QoCayMk8WuIg4SqEc0OmAYw",
"name": "Reliable Climate HVAC",
"category": "HVAC contractor",
"vertical": "home_services",
"service_line": "hvac",
"address": {
"street": "2177 Lakeview Dr",
"city": "Atlanta",
"state": "GA",
"zip": "30303",
"country": "US",
"lat": 33.779,
"lng": -84.396
},
"phone": "(404) 555-1002",
"phone_e164": "+14045550102",
"website": "https://reliableclimatehvac.com/",
"google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJsGe2QoCayMk8WuIg4SqEc0OmAYw",
"rating": 4.9,
"reviews_count": 184,
"hours": {
"mon": "8:00 AM - 6:00 PM",
"tue": "8:00 AM - 6:00 PM",
"wed": "8:00 AM - 6:00 PM",
"thu": "8:00 AM - 6:00 PM",
"fri": "8:00 AM - 5:00 PM",
"sat": "Closed",
"sun": "Closed"
},
"claimed": true,
"scraped_at": "2026-05-10T10:23:10Z",
"confidence_score": 0.62,
"enrichment": {
"tier": "premium",
"emails": [
"info@reliableclimatehvac.com",
"hello@reliableclimatehvac.com"
],
"social": {
"facebook": "https://www.facebook.com/reliableclimatehvac",
"instagram": "https://www.instagram.com/reliableclimatehvac",
"linkedin": "https://www.linkedin.com/company/reliableclimatehvac"
},
"tech_stack": [
"servicetitan",
"google_tag_manager",
"housecall_pro",
"facebook_pixel"
],
"license_numbers": [
"GA-101388"
],
"service_area_mentions": [
"Atlanta",
"Marietta",
"Alpharetta"
],
"year_founded": 2014,
"fleet_hints": [],
"homepage_title": "Reliable Climate HVAC | Atlanta, GA",
"homepage_status": 200,
"bbb": {
"accredited": true,
"rating": "A+"
},
"open_24_7": false,
"licensed_bonded_insured": true,
"locations_count": 2,
"spanish_speaking": false,
"linkedin_company": "https://www.linkedin.com/company/reliableclimatehvac",
"yelp_url": "https://www.yelp.com/biz/reliableclimatehvac-atlanta",
"third_party_reviews": [],
"press_mentions": [],
"awards": [],
"team_size_hints": [
"5 team members"
],
"owner_names": [
"Maria Chen"
],
"employee_count": 8,
"role_emails": {
"executive": [
"mchen@reliableclimatehvac.com"
],
"billing": [
"billing@reliableclimatehvac.com"
],
"support": [
"support@reliableclimatehvac.com"
],
"generic": [
"info@reliableclimatehvac.com"
]
},
"financing_processors": [
"affirm",
"klarna"
],
"payment_processors": [
"square"
],
"hiring_signals": {
"actively_hiring": true,
"indicators": [
"careers page link",
"we're hiring banner"
]
},
"insurance_carriers_accepted": [],
"languages_offered": [],
"online_booking_platforms": [
"calendly"
],
"customer_count_signals": {
"customers_served": 1500,
"reviews_count": 184,
"projects_completed": null,
"locations_served": null,
"raw_matches": [
"Trusted by 1500+ clients"
]
},
"chatbot_platforms": [
"intercom"
],
"email_marketing_platforms": [
"mailchimp"
],
"lead_capture_ctas": {
"has_free_quote_cta": true,
"has_get_started_cta": true,
"has_appointment_booking": false,
"has_callback_request": true,
"has_contact_form": true,
"cta_count": 3
},
"mobile_app_links": {
"has_ios_app": false,
"has_android_app": false,
"ios_app_id": null,
"android_app_id": null
},
"certifications_credentials": [
"NATE certified",
"Licensed Master Plumber"
],
"financing_accepted": [
"credit_card",
"cash"
],
"growth_signals": {
"growth_score": 0.4,
"components": {
"hiring": 0.6,
"employee_scale": 0.4,
"multi_location": 0.5
},
"indicators_count": 2
},
"jsonld": {
"name": "Reliable Climate HVAC",
"phone": "(404) 555-1002",
"email": "info@reliableclimatehvac.com",
"address": {
"street": "2177 Lakeview Dr",
"city": "Atlanta",
"region": "GA",
"zip": "30303"
},
"opening_hours": [
"Mo-Fr 08:00-18:00"
],
"social_urls": [
"https://www.facebook.com/reliableclimatehvac",
"https://www.instagram.com/reliableclimatehvac"
],
"aggregate_rating": {
"rating": 4.9,
"count": 184
},
"employee_count": 8,
"founders": [
"Maria Chen"
]
}
}
}

Real production output from a sample run on McCullough Heating & Air Conditioning (Austin, Texas):

{
"name": "McCullough Heating & Air Conditioning",
"service_line": "hvac",
"address": {
"city": "Austin",
"state": "Texas",
"zip": "78757",
"lat": 30.364748,
"lng": -97.731758
},
"phone": "(512) 877-6043",
"website": "https://coolmenow.com/",
"rating": 4.8,
"reviews_count": 3306,
"enrichment": {
"tier": "premium",
"emails": [
"info@coolmenow.com"
],
"social": {
"facebook": "https://www.facebook.com/McCulloughHVAC",
"instagram": "https://www.instagram.com/mcculloughhvac",
"youtube": "https://www.youtube.com/user/McCulloughAC"
},
"tech_stack": [
"servicetitan",
"wordpress",
"google_tag_manager",
"podium_messaging"
],
"year_founded": 1977,
"homepage_title": "HVAC Company in Austin, TX | HVAC Repair & Replacement",
"homepage_status": 200,
"open_24_7": true
}
}

Preview (real production data)

Single-record snapshot from the same run, rendered as a table:

FieldValue
NameMcCullough Heating & Air Conditioning
Service linehvac
LocationAustin, Texas
Phone(512) 877-6043
Websitehttps://coolmenow.com/
Rating4.8 (3306 reviews)
Emailinfo@coolmenow.com
Tech stack detectedservicetitan, wordpress, google_tag_manager, podium_messaging
Year founded1977
Open 24/7yes
Social channelsfacebook, instagram, youtube

Pricing â€" Pay Per Event

EventPriceWhen charged
Base record$0.004Always, per emitted record
Email enrichment+ $0.004When at least one email is found on the website
Premium signals+ $0.007When tech stack OR license number is detected

Effective price per record:

  • Base tier: $0.004
  • Email tier: $0.008
  • Premium tier: $0.015 (full enrichment)

You only pay for enrichment that actually fires â€" if a contractor has no website, you only pay the base record price.


Use cases

Sell into contractors. Pull every HVAC company in a metro that uses ServiceTitan and target them for a competitor's outbound campaign. Or invert: pull every HVAC with no detected stack â€" those are the ones still on paper, the highest-conversion prospects for a Housecall Pro or Jobber sales team.

PE rollup pipeline. Filter by service line and metro, exclude national chains, sort by review count. Boom â€" your acquisition target list with rating signal, employee-count hints, and contact email already attached.

Equipment dealer expansion. Find every roofing or solar contractor in a region that doesn't already mention your brand on their website. That's your dealer-recruitment list.

Lead-gen resale. Mark up enriched records 3â€"10x and resell to local contractors who want to buy their competitors' customer lists.


Inputs

FieldTypeDescription
search_termsarrayGoogle Maps queries, e.g. ["HVAC contractors", "AC repair"]
locationsarrayUS locations, e.g. ["Austin, TX", "78701"]
max_results_per_queryintCap per (term Ã- location) tuple, max 500
enrichment_tierstringbase, email, or premium
service_linesarrayFilter to: hvac, plumbing, electrical, roofing, solar, garage_door, pest_control, landscaping
exclude_chainsbooleanDrop national chains (One Hour, ARS, Roto-Rooter, etc.)
max_concurrent_enrichmentsintParallel website fetches, default 8

Tech stack signals detected

Field service / FSM platforms: ServiceTitan, Housecall Pro, Jobber, FieldEdge, Workiz, Service Fusion, Servman, Thryv, GorillaDesk, mHelpDesk, RepairShopr, ServiceMax.

Generic web stack: WordPress, Shopify, HubSpot, Google Tag Manager, Facebook Pixel.

Add a request via the issue tracker if a stack you care about is missing.


License numbers detected (top 10 states)

Texas (TACLA/TACLB/M/TECL), California (CSLB / C-class), Florida (CAC/CFC/EC/CGC), New York (HIC), Illinois, Pennsylvania (PA HIC), Ohio (HV/PL/EL/RF), Georgia (CN/CR/MP/EN), North Carolina, Arizona (ROC).


What this actor does NOT do (v1)

  • No logged-in scraping of any platform
  • No SMTP-level email validation (use a downstream verifier like NeverBounce or ZeroBounce)
  • No phone validation
  • No website screenshots
  • No review text extraction
  • No permits / licenses pulled from state portals (separate actor, coming soon)
  • No LinkedIn profile enrichment
  • No non-US geographies

If you need any of the above, leave a comment â€" we maintain a portfolio of related actors.


Example: 1,000 ServiceTitan-using HVAC contractors in Texas

{
"search_terms": ["HVAC contractors", "AC repair", "heating and cooling"],
"locations": [
"Austin, TX", "Dallas, TX", "Houston, TX", "San Antonio, TX",
"Fort Worth, TX", "El Paso, TX", "Arlington, TX", "Corpus Christi, TX"
],
"max_results_per_query": 50,
"enrichment_tier": "premium",
"service_lines": ["hvac"],
"exclude_chains": true
}

Cost ceiling: 8 cities Ã- 3 terms Ã- 50 = 1,200 raw records â†' 800 after chain + service-line filters â†' at $0.015 fully enriched = **$12 to build a 800-record list of independent Texas HVAC contractors with email + tech stack + license number**.


Roadmap

  • v0.2: Permit feed enrichment (recent commercial permits per contractor)
  • v0.2: BBB rating + accreditation status
  • v0.3: Truck count estimate via fleet vehicle scraping
  • v0.3: Insurance carrier detection from website disclosures
  • v0.4: BBB complaints / review NLP

FAQ

Q: Is this legal? A: Yes. Data comes from publicly listed Google Maps business profiles and public business website content (homepage, contact, about pages) â€" the same public scraping any directory or sales-intel tool relies on. No login walls bypassed; no private data scraped. You are responsible for CAN-SPAM, TCPA, and state privacy law compliance when contacting leads.

Q: Why might a run fail or return only a few records? A: The most common cause is hitting the Apify free plan's $5/month platform credit ceiling (~1,000 enriched leads). When that ceiling is hit, the actor soft-fails into a demo mode â€" it returns a small set of sample records plus a clear upgrade message instead of erroring out. Upgrading to Apify Starter ($49/mo) removes the ceiling. Other (rarer) causes: Google Maps temporarily blocking a region or an invalid locations string.

Q: How fresh is the data? A: Every record is scraped at run time. Google Maps records (name, address, phone, hours, reviews) are pulled live. The website re-scrape that powers enrichment (FSM platforms, emails, license numbers, BBB) happens on the same run. The scraped_at ISO timestamp tells you exactly when each row was collected.

Q: Can I run this scheduled (daily or weekly)? A: Yes. Use Apify's scheduler â€" cron, saved input, dataset routed to a webhook or storage. Docs: https://docs.apify.com/platform/schedules. Typical pattern: weekly runs that diff against the prior dataset to surface newly-opened contractors or platform migrations (e.g. paper â†' Jobber).

Q: How do I integrate the output with my CRM? A: Four options: (1) Zapier â€" trigger on "new dataset item" and map to HubSpot/Salesforce/Pipedrive/Apollo. (2) Make.com â€" same model with deeper branching. (3) Apify webhooks â€" POST the dataset to your endpoint on completion. (4) REST API â€" pull and push via small script. JSON, CSV, Excel, XML export built-in.

Q: How is pricing calculated? A: Pay-Per-Event: $0.004 base + $0.004 per email found + $0.007 per premium signal (FSM platform or license number detected). Fully enriched = $0.015 per record. You only pay for events that actually fire â€" a contractor with no website costs $0.004 and nothing more.

Q: Can I filter by service area, not just business location? A: Yes. The enrichment.service_area_mentions field lists every city/region the contractor mentions on their website (e.g. a Dallas-based HVAC firm that advertises Plano, Frisco, McKinney). Filter the dataset post-run to find every contractor that services a target ZIP/city even if their HQ is elsewhere. This is the right approach for trades like roofing, HVAC, and plumbing where the truck travels.

Q: Are the emails verified? A: Format-validated and TLD-filtered, but not SMTP-verified. Pipe through NeverBounce or ZeroBounce before cold outreach.

Q: Why are some records missing enrichment fields? A: Enrichment is best-effort and depends on what the contractor publishes on their public website. Use the confidence_score to filter for richer records.

Q: What is the rate limit? A: Throttled by Google Maps response time and the max_concurrent_enrichments setting (default 8). Plan ~1-2 records per second per concurrent worker.

Q: Can I get non-US contractors? A: Not in v1. US-only.

Related Actors from this portfolio:

  • Houzz Contractor Leads â€" Houzz-listed remodelers, designers, and specialty trades for premium-residential outreach
  • Contract-Heavy SMBs â€" construction / commercial contractors with project pipelines for material and equipment sales
  • B2B Sales Triggers â€" intent signals (hiring techs, fleet expansion, new licenses) on the contractors you find
  • Google Maps Reviews Pro â€" full review history per contractor for reputation-management and reviews-SaaS sales
  • House Flipper Leads â€" active flippers who buy from your contractor list (subs, materials, services)

Integrations

  • Zapier â€" push records into HubSpot / Salesforce / Pipedrive / Apollo / ServiceTitan / Jobber / Housecall Pro
  • Make.com (formerly Integromat) â€" automate multi-step workflows with branching and filters
  • n8n â€" self-hosted workflow automation for teams that don't want data leaving their stack
  • Apify webhooks â€" POST the dataset to your endpoint on run completion (ACTOR.RUN.SUCCEEDED / FAILED)
  • API integration â€" REST API with full dataset export in JSON, CSV, Excel, or XML
  • MCP / AI agents â€" call this actor from Claude, GPT, or LangChain agent workflows via the Apify MCP server

Save your input as an Apify Task

Apify Tasks let you save a configured input once and re-run it with a single click - no need to re-type search terms, locations, filters, or tier settings every time. Tasks are the foundation for everything that comes next: schedules, monitor mode, and webhook routing all attach to a saved Task, not to the raw actor.

Steps to save your current input as a Task:

  1. On this actor's Apify Store page, click Run with your input fully configured.
  2. Click the Save as task button at the top of the run page.
  3. Name the task something memorable (e.g. HVAC and plumbing in Atlanta, GA - weekly).
  4. Reload the task page and click Start anytime to re-run with the same inputs.

Tasks unlock the next two features below: scheduling and monitor mode.

Run this weekly with Apify Schedules

Apify Schedules cron-run any saved Task automatically. Pair this with the saved Task above and you get hands-off recurring runs with no manual clicks, no missed weeks, and a steady stream of fresh data into your CRM or warehouse.

Steps to schedule a Task:

  1. Save your input as a Task (see above).
  2. Go to https://console.apify.com/schedules and click Create new schedule.
  3. Pick your Task and set the cron expression. Common patterns:
    • Daily at 9am UTC: 0 9 * * *
    • Weekly on Mondays at 9am: 0 9 * * 1
    • Monthly on the 1st: 0 9 1 * *
  4. Save. Apify will run your Task on that schedule automatically, push the dataset to whatever integrations you have wired up, and fire run-completion webhooks for downstream automation.

Run weekly to keep your prospect list fresh and catch newly-opened home-services SMBs before they sign with another vendor.

Monitor mode (v2, beta)

Monitor mode is the v2 evolution of this actor and is currently in BETA. It turns a recurring schedule into a true change-feed instead of a firehose of duplicate records.

How it works:

  • When this actor runs under an Apify Schedule, monitor mode is enabled automatically.
  • Instead of emitting ALL records every run, it emits ONLY records that are NEW or CHANGED since the last scheduled run.
  • A digest record summarizes the delta (X new, Y changed, Z removed) at the top of every run.
  • Optional: provide a Slack or email webhook URL in the monitor_webhook_url input field and the digest fires there too, so your team gets the delta in their inbox or channel without polling the dataset.
  • Cost: a single scheduled_delta_run event ($0.05) per scheduled run, plus standard PPE on emitted delta records only. Predictable monthly cost, no surprise bills from re-charging for unchanged records.

Monitor mode is rolling out to the top 3 actors first (this one included if it's hotel-motel-lead-finder, google-maps-reviews-pro, or mcp-accounting-firm-leads). Full portfolio coverage by end of June.

Support

Open an issue on this actor's GitHub or reach out via the Apify support page.


More from the SEIB portfolio

Same data engine, different vertical â€" pick the one that matches your buyer:

All 12 actors share the same Pay-Per-Event pricing ($0.004 base / $0.008 with email / $0.015 with premium signals) and output schema. Mix-and-match across verticals without translation logic. Built by Seibs Management LLC.

Found this useful?

If this actor saved you time or money, please consider leaving a quick review on the Apify Store. Reviews help other buyers find work that solves their problem and let me prioritize the features paying customers actually use. Leave a review: https://apify.com/seibs.co/home-services-lead-finder#reviews