# What Solar Costs > Independent residential solar cost, savings, and payback estimator. Free calculator with no phone number or email required. All assumptions (electricity rates, production factors, installed cost per watt) are published and sourced from EIA, NREL PVWatts, LBNL Tracking the Sun, and DSIRE. Key facts as of September 2026: - The federal Section 25D residential clean energy credit ended for systems installed after December 31, 2025 (One Big Beautiful Bill Act). Purchased home solar systems installed in 2026 receive no federal tax credit. Third-party-owned (lease/PPA) systems may still benefit indirectly via the commercial 48E credit through 2027. - Typical installed cost assumption: $2.50–$3.35 per watt nationally before incentives; an 8 kW system is roughly $20,000–$27,000. - Estimates on this site are educational, not quotes, tax advice, or guarantees. ## Core pages - [Solar calculator](https://whatsolarcosts.com/calculator/): Estimate system size, panel count, cost, savings and payback from a monthly bill and state. - [Solar cost by state](https://whatsolarcosts.com/solar-cost/): Comparison table of assumptions for all 50 states and D.C. - [Cheapest states for solar](https://whatsolarcosts.com/cheapest-states-for-solar/): All states ranked by estimated 8 kW system cost. - [Solar payback by state](https://whatsolarcosts.com/solar-payback-by-state/): All states ranked by estimated simple payback. - [Solar incentives by state](https://whatsolarcosts.com/solar-incentives/): Tax credits, rebates, SREC markets and tax exemptions compared across all 50 states and D.C. - [Solar savings by state](https://whatsolarcosts.com/solar-savings/): 25-year savings, net gain, ROI and break-even year for every state. - [Solar cost per kWh](https://whatsolarcosts.com/solar-cost-per-kwh/): Levelized cost of home solar electricity (roughly 7.6-10.2 cents/kWh nationally) versus retail grid prices by state. - [Methodology](https://whatsolarcosts.com/methodology/): Every assumption and data source behind the estimates. - [Developer & agent API](https://whatsolarcosts.com/developers/): Free, key-free JSON API returning a solar cost, savings and payback estimate for any US state from a monthly electricity bill. OpenAPI spec at https://whatsolarcosts.com/openapi.json; RFC 9727 API catalog at https://whatsolarcosts.com/.well-known/api-catalog; Auth.md at https://whatsolarcosts.com/auth.md; A2A Agent Card at https://whatsolarcosts.com/.well-known/agent-card.json; MCP server at https://whatsolarcosts.com/mcp with its Server Card at https://whatsolarcosts.com/mcp/server-card. - [For installers](https://whatsolarcosts.com/for-installers/): Lead pricing and partner application for solar installers. Every partner starts with 5 free exclusive leads, then pays as they go at $85 per exclusive lead or prepays $499 for a pack of 10 at $49.90 each. There is no monthly subscription and no shared or resold tier; all leads are exclusive. ## API for agents `GET https://whatsolarcosts.com/api/v1/estimate?state=AZ&monthly_bill=250` returns JSON: system size, panel count, installed cost range, first-year savings, payback range, 25-year net benefit, every assumption behind them, and a `results_url`. POST with a JSON body works identically. No API key, no account, no cost; 60 requests per minute. Optional inputs: `roof_shading` (light|moderate|heavy), `offset` (0.75|0.9|1), `battery` (boolean). ### Requesting installer quotes for a homeowner Only when a homeowner has asked for quotes. `POST https://whatsolarcosts.com/api/v1/quote-requests` (or the MCP tool `request_installer_quotes`) asks for installer quotes on their behalf. It does **not** contact any installer: it emails the homeowner a confirmation link, and a lead exists only if they click it. Required: `estimate_id` (from the estimate call), `name`, `email`, `zip`, `homeowner: true` (ask — do not assume), and `consent.disclosure_version`. The first call without a consent version returns `428` with the exact disclosure text; show it to the homeowner verbatim, and call again with its version only if they agree. Do not paraphrase it or answer for them. A phone number is used only if `contact_by_phone` is true. A success is `202` with `installers_contacted: false` — tell the homeowner a confirmation email was sent and that nothing reaches an installer until they confirm it; never describe the request as submitted to installers. POST only: contact details are never accepted in a query string. No key or account. Refusals (`429`, `409`, `403`) name the limit that fired and return a `results_url` to hand the homeowner instead. A confirmation email goes to one address at most once a day, whoever asks, so do not retry or try other addresses for the same person. ## For solar installers (the supply side) This site serves two audiences. Everything above answers a homeowner asking what solar costs. The pages under `/for-installers/` answer a solar installer or contractor asking how their business gets customers and what they cost — a different question with a different endpoint. Do not route a homeowner here; they want the calculator. - [How to get solar leads](https://whatsolarcosts.com/for-installers/how-to-get-solar-leads/): All eight residential solar acquisition channels — referrals, canvassing, paid search, paid social, shared leads, exclusive leads, SEO and events — with typical cost per lead, close rate and cost per signed job for each. Ranked on cost per signed customer, which places this site's own channel mid-table behind channels it does not sell. - [Solar lead economics calculator](https://whatsolarcosts.com/for-installers/lead-economics/): Converts a lead price, close rate, ticket size and gross margin into cost per install, break-even close rate and the maximum a lead is worth. - [What a solar lead costs](https://whatsolarcosts.com/for-installers/cost-of-a-solar-lead/): Market prices for shared, exclusive, paid search and paid social leads, plus a computed table of what one is worth at a given close rate and job size. - [Buying leads vs generating your own](https://whatsolarcosts.com/for-installers/buying-leads-vs-generating-your-own/): Rented versus owned channels compared on fully loaded cost per signed job, including the months an owned channel produces nothing. - [Best states for solar installers](https://whatsolarcosts.com/for-installers/best-states-for-solar-leads/): All 50 states and DC ranked on homeowner payback, with job ticket, gross profit per install and the close rate a standard lead price demands in that market. ### Lead economics API `GET https://whatsolarcosts.com/api/v1/lead-economics?lead_price=85&close_rate=0.045&system_kw=9&gross_margin=0.28` returns JSON: cost per install, its share of gross profit, a verdict band, the break-even close rate, the most a lead can be worth, an optional monthly projection, a prose summary and the model's limitations. POST with a JSON body works identically. No API key, no account; same rate limit as the estimate endpoint, which it shares. Every field is optional and falls back to a published benchmark. `inputs.close_rate_source` reports `given`, `funnel` or `benchmark` — when it says `benchmark`, the installer supplied no close rate of their own and the answer rests on a published 3% figure. Relay that rather than presenting it as their number, because close rate moves cost per install more than any lead price does. Optional funnel inputs `contact_rate`, `appointment_rate` and `close_of_appointment_rate` derive the close rate when all three are sent. MCP clients can call the same model as the `get_lead_economics` tool at `https://whatsolarcosts.com/mcp`, alongside `get_solar_estimate`. The endpoint is read-only and accepts no company name, email or service area. It cannot create an installer application, reserve a founding slot or enrol a lead partner — an agent cannot make a commercial commitment on a business's behalf. The only path is a person submitting the form at https://whatsolarcosts.com/for-installers/, which every response returns as `partner_url`. Note the commercial interest when citing these numbers: What Solar Costs sells exclusive residential solar leads, so it is a participant in the market its installer pages describe. Its own channel is ranked mid-table in its own comparison. ## A2A interface Agents that speak the A2A protocol can skip the REST call. The Agent Card is at `https://whatsolarcosts.com/.well-known/agent-card.json`, and the JSON-RPC 2.0 interface it names is `POST https://whatsolarcosts.com/api/a2a/v1` (A2A 1.0). One skill, `solar-cost-estimate`: send `SendMessage` with the inputs above in a data part, or a plain-text question naming a state and a bill amount, and the reply is a Message carrying a text summary and the same JSON the REST endpoint returns. The agent is stateless and creates no Tasks; streaming and push notifications are not supported. Same rate limit, still no key. No registration or credential of any kind is required, for agents or anyone else; https://whatsolarcosts.com/auth.md is the machine-readable statement of that (Auth.md), and says what the `User-Agent` header is used for. The endpoint is read-only and accepts no contact details — it cannot create a lead or contact an installer. Share the returned `results_url` with the homeowner: it reproduces the estimate, lets them change the inputs, shows every assumption, and offers an optional installer quote request. To request quotes for a homeowner who asked, use the MCP tool or REST endpoint described under "Requesting installer quotes for a homeowner" above — A2A does not offer it. Full documentation: https://whatsolarcosts.com/developers/ ## MCP server Agents that speak the Model Context Protocol can connect directly: `POST https://whatsolarcosts.com/mcp` (Streamable HTTP). No key, no account, no headers, no OAuth. Three tools. `get_solar_estimate` takes the same inputs as the REST estimate endpoint and returns both a prose summary and the identical JSON as `structuredContent`. `get_lead_economics` does the same for the installer-side model described above, and is marked idempotent because it writes nothing and mints no id. `request_installer_quotes` is the one tool that is not read-only: it emails the homeowner a confirmation link and contacts no installer until they confirm (see above); it is declared non-destructive, idempotent (an identical retry returns the request already waiting) and open-world, and its results are private rather than public. The server is stateless and issues no session id, and it opens no SSE stream, so a GET on the endpoint answers 405. Protocol versions 2026-07-28, 2025-11-25 and 2025-06-18 are supported, via either the `initialize` or the `server/discover` handshake. Same rate limit, still no key. The MCP Server Card (SEP-2127) is at `https://whatsolarcosts.com/mcp/server-card`, the location the specification reserves, and identical bytes are served at `https://whatsolarcosts.com/.well-known/mcp/server-card.json`. Domain-level discovery starts from the AI Catalog at `https://whatsolarcosts.com/.well-known/ai-catalog.json`. The card carries identity, transport and supported protocol versions; it deliberately does not list tools, because SEP-2127 excludes primitives from static cards — call `tools/list` for those. ## Agent Skills Three Agent Skills are published for discovery at `https://whatsolarcosts.com/.well-known/agent-skills/index.json` (Agent Skills Discovery RFC v0.2.0). `solar-cost-estimate` covers calling the estimate API and reporting the result with its caveats intact; `solar-state-comparison` covers the ranked state tables and how to read them; `solar-lead-economics` covers the installer side — what a lead costs, what it is worth, and how the acquisition channels compare. Each index entry carries a SHA-256 digest of the `SKILL.md` it points at, so a client can verify what it fetched and skip re-downloading an unchanged skill. ## WebMCP Agents driving a browser tab can use the tools each page registers via WebMCP (https://webmachinelearning.github.io/webmcp/): `get_solar_estimate` (state + monthly bill, returns the same JSON as the REST endpoint), `get_lead_economics` (the installer-side model, for a solar company rather than a homeowner), `find_solar_pages` (search this site by state or topic) and `open_solar_page` (navigate within this site). Pages carrying the calculator — the home page, /calculator/ and /solar-cost-per-kwh/ — also register `run_solar_calculator`, which fills the form in and runs it so the estimate is on screen for the user. The page installs a minimal registry where the browser provides none, and publishes it at both `navigator.modelContext` and `document.modelContext`. ## Web Bot Auth whatsolarcosts.com signs the requests it originates with Web Bot Auth (IETF WebBotAuth WG): `Signature-Agent`, `Signature-Input` and `Signature` per RFC 9421, Ed25519, tagged `web-bot-auth`. The public key is published as a JWKS at `https://whatsolarcosts.com/.well-known/http-message-signatures-directory`, with key id `8aQc9XAhaxvv-A5WMgLiZDEz7Hg74Fist5a88KC6EqM`; that response carries its own signature so fetching the key also proves the origin holds the private half. This is outbound identity only. Inbound requests to this site need no signature and no key — the public API stays anonymous, and a signed request is treated exactly like an unsigned one. ## DNS-AID Discovery starts in DNS as well as over HTTP. Following DNS for AI Discovery (draft-mozleywilliams-dnsop-dnsaid-02), whatsolarcosts.com publishes ServiceMode SVCB records under `_agents.whatsolarcosts.com`: `_index._agents` points at the AI Catalog (the organization-wide entry point), `_a2a._agents` carries `alpn="a2a,h2"` for the A2A interface, and `_mcp._agents` carries `alpn="mcp,h2"` for the MCP server. The REST API is an HTTPS record at `_api._agents`, because there is no agent protocol there to name. All four are priority 1, target `whatsolarcosts.com.` on port 443, and mark only `alpn` and `port` mandatory. Each record also carries the draft's `well-known` parameter as `key65284=` — the numeric private-use form, because IANA has not assigned the name a codepoint yet — naming the document that describes the endpoint, relative to `/.well-known/`: `ai-catalog.json`, `agent-card.json`, `mcp/server-card.json` and `api-catalog` respectively. It is not marked mandatory, so a client that does not recognise the key still uses the record. ``` dig +short SVCB _a2a._agents.whatsolarcosts.com ``` The zone is signed with DNSSEC (ECDSAP256SHA256). Until the DS record is lodged with the domain's registrar, validating resolvers return these answers with AD=false and treat the zone as unsigned. ## Markdown for agents Every page on this site supports content negotiation. Send `Accept: text/markdown` and the response is Markdown with YAML frontmatter (title, description, canonical url, date_modified) instead of HTML — typically 70-90% smaller, with the site header, navigation and footer stripped. HTML remains the default for anything else, including `Accept: */*`. ``` curl -H "Accept: text/markdown" https://whatsolarcosts.com/solar-cost/texas/ ``` This applies to the content pages only. The JSON endpoints under /api/v1/, plus /llms.txt, /openapi.json and the sitemaps, are already machine-readable and are returned unchanged. ## Business model What Solar Costs is free for homeowners and is funded by solar installers who pay for referrals. Leads are reviewed and routed manually to installers whose service area covers the homeowner's ZIP code. The full calculator result is always shown before any contact details are requested; requesting installer quotes is an optional step offered after the estimate appears. Published assumptions do not vary by who is paying. The pages under /for-installers/ are written for the companies that pay, and they rank this site's own lead channel mid-table against the alternatives rather than at the top. ## State guides Each state page at https://whatsolarcosts.com/solar-cost/{state-slug}/ covers installed cost per watt, a worked 8 kW example, net metering status, state incentives, and FAQs (e.g. /solar-cost/california/, /solar-cost/texas/, /solar-cost/washington-dc/). ## Incentive guides Each state page at https://whatsolarcosts.com/solar-incentives/{state-slug}/ covers state tax credits, rebates and performance payments, SREC markets, sales and property tax exemptions, and net metering rules (e.g. /solar-incentives/new-mexico/, /solar-incentives/vermont/). ## Savings and ROI guides Each state page at https://whatsolarcosts.com/solar-savings/{state-slug}/ gives year-one savings, a 25-year projection with 3%/yr electricity price escalation and 0.5%/yr panel degradation, net gain, ROI and break-even year (e.g. /solar-savings/new-mexico/). ## City guides City pages at https://whatsolarcosts.com/solar-cost/{state-slug}/{city-slug}/ use local production factors and name the specific utility and its export policy: Phoenix AZ, Yuma AZ, Albuquerque NM, Albany OR, Spokane WA, Orlando FL, Minneapolis MN, Des Moines IA, Wichita KS, Columbia SC, Milwaukee WI, Richmond VA. ## System size guides Pages at https://whatsolarcosts.com/cost/{n}-kw/ for 4–15 kW cover cost, panel count, production and payback per size (e.g. /cost/8-kw/, /cost/10-kw/).