# Solar Industry - Installers, Reviews, Incentives & AI Analysis (`buseta/solar-industry-scraper`) Actor

Scrape solar installer data from SolarReviews + EnergySage + DSIRE incentives database. Get ratings, reviews, pricing, certifications, tax credits, and rebates by state. AI-powered market analysis included.

- **URL**: https://apify.com/buseta/solar-industry-scraper.md
- **Developed by:** [buseta](https://apify.com/buseta) (community)
- **Categories:** AI, Automation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 installer scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Solar Panel Installer Scraper — Reviews, Incentives, Tax Credits & AI Analysis

The **only solar industry scraper on Apify**. Pulls data from 3 sources in one run: solar installer directories + the DSIRE incentives database + AI market analysis.

### Who Is This For?

- **Solar sales teams** — Find competitor installers in any state with ratings, reviews, and certifications
- **Solar companies** — Market expansion research: which states have the best incentives? Where's the competition weak?
- **Real estate professionals** — Solar incentive data per state for property valuations and buyer guidance
- **Policy researchers** — Complete DSIRE database extraction: tax credits, rebates, net metering, RPS standards
- **Homeowners & solar buyers** — Compare installers and find every available incentive before going solar

### Data Sources

| Source           | What You Get                                                                  | Coverage                                 |
| ---------------- | ----------------------------------------------------------------------------- | ---------------------------------------- |
| **SolarReviews** | Installer ratings, reviews, rankings, contact info, license info              | All 50 US states                         |
| **EnergySage**   | Installer certifications (Elite+/Elite/Advanced), founding date, location     | All 50 US states                         |
| **DSIRE**        | Tax credits, rebates, incentives, net metering, renewable portfolio standards | 2,800+ programs, all 50 states + federal |

### Features

- **3 scrape modes**: Installers only, Incentives only, or All combined
- **AI Market Analysis**: Top installers, best incentives, market trends, estimated savings
- **Multi-state**: Scrape one state or all 50 in a single run
- **Installer reviews**: Full review text from SolarReviews profile pages
- **No browser**: Pure HTTP requests — runs on 256MB, fast and cheap
- **Zero competition**: This is the only actor on Apify that scrapes solar industry data

### Use Cases

#### Find the Best Solar Installers in Your State

```json
{
  "scrape_type": "installers",
  "states": ["California"],
  "get_reviews": true,
  "ai_analysis": true
}
````

Returns every installer from SolarReviews + EnergySage for California, with ratings, reviews, certifications, and an AI report picking the best options.

#### Get Every Solar Incentive, Tax Credit & Rebate

```json
{
  "scrape_type": "incentives",
  "states": ["New York", "New Jersey", "Connecticut"],
  "ai_analysis": false
}
```

Pulls all DSIRE programs: federal Investment Tax Credit (ITC), state tax credits, utility rebates, net metering policies, SREC programs, property tax exemptions, and more.

#### Full Solar Market Intelligence

```json
{
  "scrape_type": "all",
  "states": ["Texas"],
  "get_reviews": true,
  "ai_analysis": true
}
```

Everything in one run: all Texas installers + all Texas/federal incentives + AI analysis with market summary, top picks, and estimated savings.

#### Multi-State Comparison for Market Expansion

```json
{
  "scrape_type": "all",
  "states": ["California", "Texas", "Florida", "Arizona", "Nevada"],
  "get_reviews": false,
  "ai_analysis": true
}
```

Compare solar markets across states: how many installers, what incentives exist, which market is underserved.

### AI Market Analysis

When enabled, the AI analyzes all scraped data and generates:

- **Market summary** — overview of the solar market in selected states
- **Top recommended installers** — with reasoning (rating, reviews, certifications)
- **Best incentives** — most valuable programs and who qualifies
- **Market trends** — patterns observed from the data
- **Recommendations** — actionable tips for solar buyers or businesses
- **Estimated savings** — what a typical homeowner could save with available incentives

The AI report is saved both in the dataset and in the Key-Value Store under `AI_MARKET_REPORT` for easy access.

### Output Fields

#### Installer Record

| Field                         | Description                                            |
| ----------------------------- | ------------------------------------------------------ |
| `name`                        | Company name                                           |
| `source`                      | SolarReviews or EnergySage                             |
| `state`                       | State                                                  |
| `rating`                      | Average rating (1.0 - 5.0)                             |
| `review_count`                | Number of reviews                                      |
| `certification`               | EnergySage tier (Elite+ / Elite / Advanced / Approved) |
| `ranking`                     | SolarReviews ranking position                          |
| `profile_url`                 | Link to full installer profile                         |
| `phone`                       | Phone number                                           |
| `website`                     | Company website                                        |
| `address`, `city`, `zip_code` | Location details                                       |
| `installing_since`            | Year company started installing                        |
| `reviews`                     | Array of review texts (when `get_reviews` is enabled)  |

#### Incentive Record

| Field                     | Description                                                    |
| ------------------------- | -------------------------------------------------------------- |
| `name`                    | Program name (e.g., "Residential Renewable Energy Tax Credit") |
| `incentive_type`          | Tax Credit, Rebate, Net Metering, Grant, Loan, etc.            |
| `category`                | Financial Incentive or Regulatory Policy                       |
| `administrator`           | Who runs the program                                           |
| `budget`                  | Program budget if available                                    |
| `website`                 | Program website                                                |
| `start_date` / `end_date` | Program dates                                                  |
| `technologies`            | Eligible technologies (Solar PV, Solar Thermal, etc.)          |
| `incentive_amounts`       | Dollar amounts or percentages                                  |
| `summary`                 | Program description                                            |
| `entire_state`            | Whether it applies statewide                                   |
| `sector`                  | Residential, Commercial, etc.                                  |

### Pricing

| Event              | Price                 |
| ------------------ | --------------------- |
| Installer scraped  | $0.01 ($10 per 1,000) |
| Incentive scraped  | $0.005 ($5 per 1,000) |
| AI market analysis | $0.02 (one per run)   |
| Platform usage     | Free                  |

### Keywords

Solar panel scraper, solar installer directory, SolarReviews scraper, EnergySage scraper, DSIRE database scraper, solar incentives scraper, solar tax credits by state, solar rebates, net metering policies, renewable energy incentives, solar market analysis, solar installer reviews, solar panel companies, solar energy data, ITC Investment Tax Credit, SREC, solar renewable energy certificates

# Actor input Schema

## `scrape_type` (type: `string`):

What to scrape: Installers (SolarReviews + EnergySage), Incentives (DSIRE database), or All

## `states` (type: `array`):

US states to scrape. Use full state names (e.g., 'California', 'New York'). Leave empty for top national installers.

## `get_reviews` (type: `boolean`):

Scrape individual reviews from installer detail pages (SolarReviews)

## `max_reviews_per_installer` (type: `integer`):

Maximum reviews to scrape per installer

## `ai_analysis` (type: `boolean`):

Generate an AI-powered solar market report: top installers, market trends, best incentives, and recommendations for the selected states. Powered by Claude AI via Apify OpenRouter.

## `proxy_config` (type: `object`):

Select proxies to be used for scraping

## Actor input object example

```json
{
  "scrape_type": "all",
  "states": [
    "California"
  ],
  "get_reviews": true,
  "max_reviews_per_installer": 20,
  "ai_analysis": true,
  "proxy_config": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Solar industry data with optional AI analysis

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "scrape_type": "all",
    "states": [
        "California"
    ],
    "get_reviews": false,
    "ai_analysis": false,
    "proxy_config": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("buseta/solar-industry-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "scrape_type": "all",
    "states": ["California"],
    "get_reviews": False,
    "ai_analysis": False,
    "proxy_config": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("buseta/solar-industry-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "scrape_type": "all",
  "states": [
    "California"
  ],
  "get_reviews": false,
  "ai_analysis": false,
  "proxy_config": {
    "useApifyProxy": false
  }
}' |
apify call buseta/solar-industry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=buseta/solar-industry-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Solar Industry - Installers, Reviews, Incentives & AI Analysis",
        "description": "Scrape solar installer data from SolarReviews + EnergySage + DSIRE incentives database. Get ratings, reviews, pricing, certifications, tax credits, and rebates by state. AI-powered market analysis included.",
        "version": "1.0",
        "x-build-id": "2DgS4HENd91r2z700"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/buseta~solar-industry-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-buseta-solar-industry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/buseta~solar-industry-scraper/runs": {
            "post": {
                "operationId": "runs-sync-buseta-solar-industry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/buseta~solar-industry-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-buseta-solar-industry-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "scrape_type"
                ],
                "properties": {
                    "scrape_type": {
                        "title": "Scraping Type",
                        "enum": [
                            "installers",
                            "incentives",
                            "all"
                        ],
                        "type": "string",
                        "description": "What to scrape: Installers (SolarReviews + EnergySage), Incentives (DSIRE database), or All"
                    },
                    "states": {
                        "title": "States",
                        "type": "array",
                        "description": "US states to scrape. Use full state names (e.g., 'California', 'New York'). Leave empty for top national installers.",
                        "default": [
                            "California"
                        ]
                    },
                    "get_reviews": {
                        "title": "Get Installer Reviews",
                        "type": "boolean",
                        "description": "Scrape individual reviews from installer detail pages (SolarReviews)",
                        "default": true
                    },
                    "max_reviews_per_installer": {
                        "title": "Max Reviews Per Installer",
                        "type": "integer",
                        "description": "Maximum reviews to scrape per installer",
                        "default": 20
                    },
                    "ai_analysis": {
                        "title": "AI Market Analysis",
                        "type": "boolean",
                        "description": "Generate an AI-powered solar market report: top installers, market trends, best incentives, and recommendations for the selected states. Powered by Claude AI via Apify OpenRouter.",
                        "default": true
                    },
                    "proxy_config": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used for scraping"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
