EnergySage is a marketplace where homeowners compare solar quotes, so what it publishes about an installer is what a homeowner needs to choose one: tier, rating, reviews with sub-ratings, credentials and how to get in touch. What follows is what that looks like as data, with the sample behind every rate.
Three kinds of row, one per run
The EnergySage Scraper returns one row type per run, chosen with outputType, so a table never mixes companies with reviews:
outputType | One row is | Measured on |
|---|---|---|
installers | A solar installer company | 200 installers |
reviews | One customer review | 360 reviews of 15 installers |
locations | A state or city page with its solar cost data | 150 state and city pages |
All three samples were taken on 23 September 2026.
What an EnergySage review contains
Every one of the 360 reviews had an id, the installer id, a title, the text, an overall rating, a date and the reviewer's public alias. The four sub-ratings were nearly always there:
| Field | Filled, n=360 |
|---|---|
rating_value | 98.1% |
rating_responsiveness | 97.8% |
rating_quality | 97.5% |
rating_service | 97.2% |
verified_shopper true | 65.0% |
installer_response | 18.6% |
Sub-ratings are what make these reviews more useful than a star average: an installer can score well on quality and badly on responsiveness, and the overall number hides which. The verified-shopper flag is EnergySage's own label; its method is not something this project checked. Reviewers appear under the alias EnergySage shows, never an internal id, and a phone number or email typed into a review is replaced before delivery.
EnergySage serves reviews twelve at a time, and the largest installer has over 500. maxReviewsPerInstaller defaults to 24; 0 reads them all.
200 installers, not 6,822
EnergySage's state pages each list every installer it has active in that state. Across all 50 state pages that came to 200 unique installers. Alaska has no page.
The supplier directory is larger — 6,822 profiles — and it is tempting to call that the installer list. It is not: in a sample of 33 directory profiles, 13 offered installation, and the directory also holds manufacturers, lenders and inactive companies. The sample is too small to turn into a precise percentage, but large enough to say the directory is mostly not installers. source: directory walks it, with onlyInstallers on by default.
Business contacts and credentials, measured
With scrapeDetails: true, each of the 200 installers gets its profile page read:
| Field | Filled, n=200 |
|---|---|
| Website | 99.5% |
| Phone | 99.0% |
| 96.5% | |
| Licenses, with numbers when published | 92.0% |
| Certifications (NABCEP and others) | 83.5% |
| Insurance | 78.0% |
| Financing partners | 65.0% |
These are business contacts the installers publish on EnergySage to win customers, which is a different footing from contacts inferred or reconstructed elsewhere. It is still a list of companies, not of homeowners wanting solar. For the general version of building a local B2B list, see local lead generation from Nextdoor.
Solar cost is published per place, not per installer
EnergySage prices solar per state and city: cost per watt, median cost per watt, average system size and price, payback years and lifetime savings. On the 150 measured location pages the cost fields were filled on all of them and payback on 96.0%. The California page, checked on 10 October 2026, gave $2.52/W, stated as before any available incentives — which is the detail to carry into any comparison, because a figure with incentives deducted is a different number.
No per-installer price exists to extract. A location row carries the installers EnergySage ranks on that page, which is as close as the source gets to joining price and company.
Why profile and review runs are slow
Location pages are cached and read in parallel. Installer profiles and reviews are not: rate limiting was measured at four parallel requests and none at one request every 1.5 seconds, so the Actor reads them one at a time, about 40 per minute. A 200-installer census with profiles made about 200 requests in 328 seconds with no HTTP 429 or 403. Asking for more speed would mean hunting for the ceiling on somebody else's server.
robots.txt on two hosts, and the terms
EnergySage serves two robots.txt files, and they say very different things — the same lesson as reading robots.txt per host:
User-agent: *
Disallow: /The www host disallows a dozen paths — /market/, /search/, /supplier/search/?* among them — and not the supplier profiles or the review endpoint. The local-data host disallows everything, and it is where the state and city payloads live: location rows and the default installer list come from it. EnergySage's terms separately prohibit automated access other than RSS and features provided for it, without express written permission.
What a run costs
$0.00045 per installer, $0.0004 more for the full profile, $0.0003 per review, $0.004 per location and $0.00001 per start. A thousand installers with phone, email and website cost $0.85. Error rows and duplicates are never charged. How EnergySage compares with BBB and Thumbtack as a reputation source is in the cluster overview, and why a Thumbtack list has no contacts at all is in the Thumbtack guide.
