Pre-qualified solar leads. Re-roof bundles flagged. Installers pay more.
You sell solar leads. We attach PV suitability, kW potential, panel-capable area, and roof age in 6 seconds. Installers convert higher on pre-qualified leads, and aged roofs unlock a re-roof bundle that doubles your buyer payout.
How it fits in
Day-to-day workflows our data slots into.
PV suitability pre-qualification
solar.suitability returns high / medium / low / unsuitable based on roof orientation, shading, pitch, and panel-capable area. Filter out unsuitable roofs before sending to installer. Installers pay more for leads they don't have to disqualify on the call.
System-size pre-routing
solar.kw_potential routes 8+ kW systems to high-tier residential installers, 3-7 kW to standard tier, 12+ kW to commercial. Match the lead to the installer who pays the most for that size.
Re-roof bundle opportunity flag
Roof 15+ years old? Homeowner needs a new roof before installing solar. That's a $20-40k re-roof + $25-50k solar bundle, double-pay your installer customer. Use property.estimated_roof_age_years to flag these for premium routing.
Storm-watch on enriched addresses
Every enriched lead is auto-watched for storm events for 24 months. When NOAA flags a qualifying hail or wind event over the address, we ping your webhook, solar installers re-qualify leads where the roof now needs replacement first (a roof-then-solar bundle re-emerges).
Quality scoring + filtering
Use owner_match, imagery_quality, and footprint cross-check signals to score the lead before sale. Filter out renters and recyclers. Owner-occupied is the only solar lead worth selling.
Lead-form append
Wire our API into the form-submit handler on your landing pages. Visitor types address, our data attaches before the lead hits your CRM. Installers see pre-qualified solar leads from the second they're created.
Raw solar lead vs. RoofTap-enriched
What your installer customer sees, and what they're willing to pay for.
Fields you'll use most
From the full API response, these are the fields this industry leans on.
| Field | What you do with it |
|---|---|
| solar.suitability | high / medium / low / unsuitable. The headline qualification signal, installers route leads on this single field. |
| solar.kw_potential | Max system kW for this roof. Drives lead-tier routing and installer pricing. |
| solar.annual_kwh_potential | Annual energy production. Drives homeowner ROI math and ad-targeting. |
| solar.max_panel_count | How many panels fit. Installer uses this to estimate system price before site visit. |
| roof.area_sqft | Total roof area, needed to validate panel placement options and unshaded array layout. |
| roof.predominant_pitch | Pitch drives panel tilt and energy yield. 4/12 to 8/12 is the solar sweet spot. |
| property.estimated_roof_age_years | 15+ years = the re-roof bundle opportunity. Bundles double the buyer payout. |
| property.owner_occupied | Renters don't install solar. Filter these out at intake. |
| property.owner_match | Cross-check the lead's name against the deed. Filters wholesalers and recyclers. |
| data_quality.imagery_quality | LOW imagery = canopy or out-of-date imagery (canopy especially impacts solar suitability scores). Route to manual review. |
One enriched solar lead = $20-40 of incremental margin.
At entry pricing, your margin per enriched solar lead lifts $26-36. At volume tier ($1.95/call past 30k/mo), $28-38. The re-roof bundle flag alone can lift premium leads $50+ per, solar installers pay big for leads where they can quote roof + solar together. Solar economics are richer than roofing because the base lead price is higher.
Sample response - solar lead
Trimmed to the fields this industry uses most. Full payload includes more.
POST https://api.rooftap.app/v1/enrich
{ "address": "5701 W Loma Lane, Glendale, AZ 85302",
"lead_id": "solar-9821",
"owner_match_name": "Sarah Johnson" }
200 OK
{
"ok": true,
"lead_id": "solar-9821",
"roof": {
"area_sqft": 4003,
"predominant_pitch": "4/12"
},
"solar": {
"suitability": "high",
"kw_potential": 13.6,
"annual_kwh_potential": 14820,
"max_panel_count": 34,
"sunshine_hours_per_year": 3214
},
"property": {
"year_built": 1972,
"estimated_roof_age_years": 18,
"reroof_bundle_opportunity": true,
"owner_match": true,
"owner_occupied": true
},
"data_quality": { "imagery_quality": "HIGH" }
}From signup to live
Typical timeline from first call to your first enriched record.
Discovery call
30 minutes. We learn your pipeline (where leads come from, where they go, what your installer network expects), confirm the use case is a fit, answer technical questions.
API key + sandbox access
Same-day after the discovery call. Live credentials, a free batch of test calls, developer documentation. Your team validates the response shape before integration.
Pilot batch
Send us 100-500 of your real recent solar leads. We enrich them on us. You give the enriched leads to your installers and measure: do they pay more? Most solar pilots show $25-40 uplift per lead.
Integration
Drop our Zapier action into your existing flow, or wire the direct API into your CRM webhook. Most aggregators live in 1-5 days. We're on Slack during integration.
Full rollout + monthly billing
Once the pilot is positive, scale to all your sources. Monthly Stripe billing at the volume rate that matches your usage. Change tiers any time.
Common questions
How is your solar suitability scored?
We blend Google Solar API segmentation (shading, panel-capable area, kW potential, annual kWh) with our own pitch + azimuth analysis. The suitability field summarizes these into high/medium/low/unsuitable. Raw fields are returned alongside for installers who want to compute their own tier.
Do you handle the re-roof bundle math, or just flag the opportunity?
We flag, property.estimated_roof_age_years tells you if a re-roof is likely needed in the next 5 years. Your installer customers decide how to bundle. Some pre-quote roof + solar in the same proposal; others route to a roofing partner first.
Do my installer buyers know the data came from RoofTap?
Not unless you tell them. The JSON returns the data fields, you decide where they appear in your buyer-facing payload. Most aggregators present them as their own enriched lead data. Volume tier gets explicit white-label.
What if a lead's address can't be enriched?
Structured error code (ADDRESS_NOT_FOUND, NO_BUILDING_DETECTED, LOW_CONFIDENCE) so your code can handle it. You don't pay for failed lookups. Coverage is ~95% on US single-family homes.
How fast is the API?
Cold call lands in 4-7 seconds (Solar API + property fetches in parallel). Cached addresses return sub-second. If you need to keep latency off the hot path, call /v1/enrich/prewarm at intake.
What's the storm-watch, is it useful for solar?
Yes. Every enriched address gets free storm-watch for 24 months. When a qualifying hail or wind event hits a watched property, we ping you. For solar, the play is: roof now needs replacement → re-engage the lead with a roof-then-solar bundle pitch. Roof-related churn is the #1 reason solar installs get postponed; this lets you catch it.
Also sell roofing leads?
Yes, same API returns roof measurements alongside solar data. See the roofing lead vendor page for the vertical-specific pitch.
One rate. Volume discounts apply automatically.
Once monthly volume crosses a threshold, the lower rate applies to every call that period. No retro-active surprises on the next invoice.
Bad reads return billable: false and never bill. Enterprise (30k+/mo) gets negotiated rates and dedicated support, talk to us.
Built to disappear into your workflow
We handle the data complexity, you keep your installer relationships and pricing. No buyer marketplace, no rev-share, no exclusivity. Just an API call, billed monthly, scaling with your volume.
Tell us what you're building
We'll review your use case, answer questions, and get you set up if it's a fit.
Also sell roofing leads?
See the roofing lead vendor page →