# PVGIS, solar power per location

The Joint Research Centre's Photovoltaic Geographical Information System calculates for any coordinate how much sunlight falls and what a solar PV system yields: per year, per month, per hour, for a fixed or tracking system, and a typical meteorological year. It uses radiation data from satellite images (PVGIS-SARAH3 for Europe). There is a web tool and an API without registration. Note: robots.txt disallows all automated visitors, so the Open Data Index does not call PVGIS itself.

- Publisher: Joint Research Centre (Europese Commissie)
- Area: World · Finest detail: point (coordinate)
- Period: verschilt per stralingsdatabase (niet vastgesteld) · Refreshed: every few years
- Access: Open · Licence: Niet vastgesteld (geen eigen licentie op de PVGIS-pagina's; EU-inhoud valt volgens de legal notice van de Commissie onder CC BY 4.0 tenzij anders vermeld)
- Join keys: coördinaten (breedte, lengte)
- Status: grijs
- URL: https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis_en

## What can you do with it?
- **Do solar panels pay off in your street?.** Enter your address, roof pitch and orientation in the web tool. PVcalc gives the annual yield (E_y, kWh) and the irradiation on the panel (H(i)_y, kWh/m²).
- **Summer versus winter.** The monthly output shows how unevenly solar power is spread over the year. Useful for stories about net metering and grid congestion.
- **East-west or south?.** Calculate the same spot with aspect -90, 0 and 90 (east, south, west). East-west yields less per year but spreads output over the day.
- **North versus south in the Netherlands.** Compare a few places with the same settings. Put them next to the measured solar radiation at KNMI stations.

## How to process it
1. **Start in the web tool.** The web tool does the same calculations as the API, with a map to pick a point and downloads as CSV or JSON.
   `https://re.jrc.ec.europa.eu/pvg_tools/en/tools.html`
2. **One calculation with the API.** GET only. Required are lat, lon, peakpower (kW) and loss (system loss in percent).
   `https://re.jrc.ec.europa.eu/api/v5_3/PVcalc?lat=52.09&lon=5.12&peakpower=1&loss=14&outputformat=json`
3. **Choose the tool.** PVcalc (grid-connected), SHScalc (off-grid with battery), MRcalc (monthly radiation), DRcalc (daily profile), seriescalc (hourly series), tmy (typical meteorological year) and printhorizon (horizon).
4. **Respect the limits.** At most 30 calls per second per IP, above that 429. Calls from the browser (AJAX) are refused. Prefer outputformat=json.

## Interesting combinations
- Do the panels deliver what they could? → [cbs-statline](https://www.opendataindex.nl/en/bron/cbs-statline.md) via gemeente (coördinaat van de kern). Divide actual production from CBS 85005NED by installed capacity and compare it with the PVGIS yield per kWp for that place. Mind panels installed mid-year.
- Solar potential per address → [pdok-bag](https://www.opendataindex.nl/en/bron/pdok-bag.md) via coördinaten van het pand. Take a building's coordinate from the BAG and calculate the yield. For roof pitch and shade you need an elevation model.

## Similar sources
- [knmi-daggegevens](https://www.opendataindex.nl/en/bron/knmi-daggegevens.md): KNMI measures solar radiation at its weather stations, day by day (De Bilt since July 1957). No yield calculation, but real measurements.
- [era5](https://www.opendataindex.nl/en/bron/era5.md): Reanalysis with hourly radiation on a grid of about 30 km, worldwide and since 1940. Needs an account.
- [cbs-statline](https://www.opendataindex.nl/en/bron/cbs-statline.md): CBS counts how much solar power was actually generated and how many panels are installed (for example table 85005NED), per municipality.

## What to watch out for
- **robots.txt disallows bots.** re.jrc.ec.europa.eu has 'Disallow: /' for all user agents. The API is meant for programs (non-interactive service). We do not call it ourselves and show no PVGIS figures of our own here.
- **A calculation, not a measurement.** PVGIS calculates with satellite radiation, a model panel and the system loss you enter. Real yield also depends on shade, soiling and the inverter.
- **Licence not explicit.** The PVGIS pages state no licence of their own. The Commission's general legal notice gives CC BY 4.0 for EU content unless stated otherwise. Credit PVGIS and the JRC as the source.
- **Versions change.** The address without a version number has served PVGIS 5.2 since 25 September 2024, for a limited period; 5.1 is gone. Always put the version in the URL (v5_3).

## API (REST (GET; JSON, CSV, EPW))

- Base: https://re.jrc.ec.europa.eu/api/v5_3
- Access: No key or account per the documentation. GET only; calls from the browser (AJAX/CORS) are refused. (from the description)
- Formats: json, csv, basic, epw
- Filtering: No query language: one point and the system properties as query parameters; each call is a calculation.; 

### Endpoints
- `GET /PVcalc`: Output of a grid-connected system (fixed or tracking): per month and per year (E_y in kWh), with losses; optionally optimal angle and electricity price.
- `GET /SHScalc`: Off-grid system with battery: how often the battery is empty or full (peakpower in W here, not kW).
- `GET /MRcalc`: Monthly radiation over the years (horirrad, optrad, mr_dni, avtemp …; at least one required).
- `GET /DRcalc`: Average daily profile per month (month required, 0 = all months).
- `GET /seriescalc`: Hourly series of radiation (and with pvcalculation=1 the PV output) over a range of years, in UTC.
- `GET /tmy`: Typical meteorological year (period ≥ 10 years); also as EnergyPlus EPW.
- `GET /printhorizon`: Horizon profile (horizon height per direction) at a point.

### Parameters
- `lat / lon`: Decimal degrees (south and west negative). Required. (from the description)
- `peakpower`: Peak power in kW (PVcalc, seriescalc) or W (SHScalc). (from the description)
- `loss`: System loss in percent (14 is common). Required for PVcalc. (from the description)
- `angle / aspect`: Tilt from horizontal and orientation: 0 = south, 90 = west, -90 = east. Default 0 and 0. (from the description)
- `optimalinclination / optimalangles`: Let PVGIS choose the best tilt (and orientation); overrides angle/aspect. (from the description)
- `mountingplace / pvtechchoice`: free or building; crystSi (default), crystSi2025, CIS, CdTe, Unknown. (from the description)
- `raddatabase`: Radiation database: PVGIS-SARAH3 (Europe, Africa, Asia), PVGIS-ERA5, PVGIS-SARAH …; without, PVGIS picks by location. (from the description)
- `startyear / endyear`: Period for seriescalc, MRcalc and tmy; default the whole database. (from the description)
- `usehorizon / userhorizon`: Include horizon shading (default 1) or supply your own heights. (from the description)
- `outputformat`: csv (default, with explanations), json (recommended), basic (numbers only), epw (tmy only). (from the description)
- `pvprice / systemcost / interest / lifetime`: Compute the price per kWh from installation cost, interest and lifetime (default 25 years). (from the description)

### Fields in the JSON response (as far as the documentation names them) (4)
`inputs` object, `outputs` object, `outputs.totals.fixed.E_y` getal, `meta` object

### Limits and pitfalls
- 30 calls per second per IP; above that 429. When busy the server waits up to 4–5 seconds, then returns 529 (Site is overloaded). (from the description)
- GET only (otherwise 405). HEAD on a tool returns 204 to check it exists. (from the description)
- robots.txt of re.jrc.ec.europa.eu is 'Disallow: /'. Open Data Index therefore does not call the API automatically; everything here comes from the JRC documentation. (tested)
- The old path /api/ without version serves PVGIS 5.2 'for a limited period' (since 25 Sep 2024); 5.1 is gone. Always put v5_3 (or v5_2) in the URL. (from the description)
- Mind the unit of peakpower: kW for PVcalc and seriescalc, W for SHScalc. (from the description)
- Out-of-range values return a JSON error message with the allowed range. (from the description)


## Examples with real figures (1)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **Solar radiation on a flat surface in De Bilt (KNMI measurements): an average of 1,038 kWh per m² a year in 1996–2025, 8% more than in 1958–1987** (2025). Table daggegevens. [Example](https://www.opendataindex.nl/en/voorbeeld/knmi-zonnestraling-de-bilt)
  - `curl -d "stns=260&vars=Q&start=19580101&end=20251231&fmt=json" https://www.daggegevens.knmi.nl/klimatologie/daggegevens`
