Skip to content
All data sources

PVGIS Solar Resource & PV Yield API and MCP server

No authpvgis

How much sun a site actually gets, and what a solar array on it would produce, for any point on earth. From PVGIS, the European Commission Joint Research Centre model built on satellite and reanalysis solar data. Give a latitude and longitude and get modelled annual and monthly output for a grid-connected photovoltaic system at a chosen size, tilt, azimuth, module technology, and loss assumption, or ask PVGIS to pick the optimal tilt and azimuth. Also returns long-term monthly irradiation and the average daily irradiance curve for a month. This is solar-farm and rooftop feasibility screening from a model, not an on-site measurement, a bankable yield assessment, or an interconnection study.

PVGIS Solar Resource & PV Yield is published by PVGIS — Photovoltaic Geographical Information System (European Commission, Joint Research Centre), covers Worldwide point queries, with the radiation database selected by location and A point over open sea is refused by PVGIS rather than modelled, and holds records 2005 to present.

It is a fixed release and changes only when the publisher issues a new one.

Last verified . That is when these facts were last rebuilt from the ParcelOps source registry, not when PVGIS — Photovoltaic Geographical Information System (European Commission, Joint Research Centre) last refreshed the data itself.

API access

Your AI client reaches PVGIS Solar Resource & PV Yield through one ParcelOps MCP endpoint, so there is no separate key to hold for it and no per-source client to write. Reaching it takes no credentials of your own.

Where it came from

PublisherPVGIS — Photovoltaic Geographical Information System (European Commission, Joint Research Centre)

Freshness and coverage

FreshnessStatic · Long-term climatological averages over a fixed year range, not a live or forecast feed. PVGIS republishes on its own version schedule.
Places coveredWorldwide point queries, with the radiation database selected by location, A point over open sea is refused by PVGIS rather than modelled
Time covered2005 → present · Year range depends on the radiation database PVGIS picks: PVGIS-NSRDB covers 2005-2015 over the Americas, PVGIS-SARAH2 covers 2005-2020 over Europe and Africa. Each response names the database and its year range.
CredentialsNo credentials required

What this source cannot tell you

  • Anything outside Worldwide point queries, with the radiation database selected by location and A point over open sea is refused by PVGIS rather than modelled. A request past that edge comes back empty rather than approximated.
  • Anything from before 2005.
  • Anything PVGIS — Photovoltaic Geographical Information System (European Commission, Joint Research Centre) does not publish. ParcelOps returns this source as it stands and never fills a blank field from a different one.
  • PVGIS is © European Union. Reproduction is authorised provided the source is acknowledged, so republished results must credit PVGIS / EU JRC.
  • Values are modelled from satellite and reanalysis data. They are not measured on-site irradiance and carry year-to-year variability, which PVGIS reports as a standard deviation.
  • Yield figures assume the system parameters supplied. They do not account for shading beyond terrain horizon, soiling, curtailment, or degradation.
  • The upstream limit is 30 calls per second per IP; results are cached for a day and an overloaded service answers 529 rather than returning data.
  • Hourly time series and typical-meteorological-year downloads are deliberately not exposed: at roughly 1 MB per location they do not fit a tool response.

Methods (4)

A method is one call your agent can make against this source.

  • calculatePvPerformance

    read

    Model annual and monthly output of a solar array at a point, size, tilt, and azimuth.

    What you must providelatlon
    Records returnedpv-system-yield
    How to get more resultsnone
    UnitspeakPower: kWp · systemLoss: percent · slope: degrees from horizontal · azimuth: degrees, 0 = south · E_d: kWh/day · E_y: kWh/year · E_m: kWh/month · H(i)_d: kWh/m2/day · H(i)_m: kWh/m2/month · H(i)_y: kWh/m2/year · SD_m: kWh/month · SD_y: kWh/year · l_aoi: percent · l_spec: percent · l_tg: percent · l_total: percent
    Coordinate systemEPSG:4326
    FreshnessStatic (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "peakpower": {
          "type": "number",
          "minimum": 0.001,
          "maximum": 100000000
        },
        "loss": {
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "angle": {
          "type": "number",
          "minimum": 0,
          "maximum": 90
        },
        "aspect": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "optimalangles": {
          "type": "boolean"
        },
        "mountingplace": {
          "type": "string",
          "enum": [
            "free",
            "building"
          ]
        },
        "pvtechchoice": {
          "type": "string",
          "enum": [
            "crystSi",
            "CIS",
            "CdTe",
            "Unknown"
          ]
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false
    }

    Monthly rows plus an annual summary; defaults: 1 kWp, 14% loss.

  • getMonthlyRadiation

    read

    Return long-term monthly solar irradiation at a point, flat or on a tilted plane.

    What you must providelatlon
    Records returnedmonthly-irradiation
    How to get more resultsnone
    Unitsslope: degrees from horizontal · azimuth: degrees, 0 = south · H(h)_m: kWh/m2/month · H(i)_m: kWh/m2/month · H(s)_m: kWh/m2/month · Hd(h)_m: kWh/m2/month · Hd(i)_m: kWh/m2/month · SD_m: kWh/m2/month
    Coordinate systemEPSG:4326
    FreshnessStatic (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "angle": {
          "type": "number",
          "minimum": 0,
          "maximum": 90
        },
        "aspect": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "startyear": {
          "type": "integer",
          "minimum": 2005,
          "maximum": 2030
        },
        "endyear": {
          "type": "integer",
          "minimum": 2005,
          "maximum": 2030
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false
    }

    One row per year/month; omit angle for horizontal irradiation.

  • getDailyRadiationProfile

    read

    Return the average hourly irradiance curve for one month at a point.

    What you must providelatlon
    Records returneddaily-irradiance-profile
    How to get more resultsnone
    Unitsslope: degrees from horizontal · azimuth: degrees, 0 = south · G(i): W/m2 · Gb(i): W/m2 · Gd(i): W/m2 · Gr(i): W/m2 · H_sun: degrees · T2m: degrees Celsius · WS10m: m/s
    Coordinate systemEPSG:4326
    FreshnessStatic (source-level)
    Input schema
    {
      "type": "object",
      "properties": {
        "lat": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "lon": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "month": {
          "type": "integer",
          "minimum": 0,
          "maximum": 12
        },
        "angle": {
          "type": "number",
          "minimum": 0,
          "maximum": 90
        },
        "aspect": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        "localtime": {
          "type": "boolean"
        }
      },
      "required": [
        "lat",
        "lon"
      ],
      "additionalProperties": false
    }

    Hourly rows; month 1-12, or 0 for all; localtime=false returns UTC.

  • getServiceInfo

    read

    Return endpoints, coverage, angle conventions, and what this model does not answer.

    FreshnessStatic (source-level)
    Input schema
    {
      "type": "object",
      "properties": {},
      "required": [],
      "additionalProperties": false
    }

Where this source is used