How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
42.0308, -93.6319, Ames IAin Locations (latitude, longitude[, label]). Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Get historical daily or monthly weather and solar data for any latitude and longitude from NASA POWER: air temperature, precipitation, wind, humidity, solar irradiance and other parameters since 1981. You get one clean row per location, period and parameter, with units, and missing values as null.
- Takes up to 10 points as
latitude, longitude. - Calls the official NASA POWER API once per point (up to 20 parameters per call).
- Turns the answer into long rows: location × period × parameter → value + units.
- Marks NASA's fill value
-999asstatus: "missing"andvalue: null. Missing rows are free. - Saves a run summary with counts, units and the NASA attribution text.
Good for
- Daily weather history for fields, farms or sites (temperature, rain, wind, humidity).
- Solar irradiance history for solar site checks, in MJ/m²/day, kWh/m²/day or W/m².
- Monthly and annual values since 1981 for long-term comparisons and model features.
- One table you can load into Excel, pandas, BigQuery or an AI agent without parsing NASA's JSON.
Not a good fit
- No forecasts. NASA POWER is history plus near-real-time. A future end date is moved back to today.
- No hourly data, climatology or regional grids in this version. Only daily and monthly point data.
- Not station data. Values are grid-cell averages; points close together can return the same cell.
- The newest 2–5 days are usually not published yet. They come back as
missing.
Who uses it
Farm and crop analysts
Get daily temperature, rain and sun for crop models.
Solar planners
Compare sun history at several sites before a project.
Data scientists
Add weather features to a model without parsing NASA JSON.
Price
Prices will be shown after release.
Questions
Can I get a weather forecast?
No. NASA POWER has history only. A future end date moves back to today.
Is this local weather station data?
No. It comes from satellite data and climate models on a grid.
How far back does the data go?
Daily and monthly values start in 1981.
Is there hourly data?
No. This tool gives daily or monthly values only.
Details
Step by step on Apify
- Open the Input tab. Two points (Ames, Iowa and Paris) and four parameters are already filled in.
- Keep Resolution =
Dailyand Last N days =30, or change them. - Click Start.
- Open the Output tab and look at the Values view.
Use cases
- Agriculture: daily temperature, rain and solar radiation for crop models, growing degree days and irrigation checks.
- Solar energy: monthly irradiance history (kWh/m²/day) to compare sites before a project.
- Buildings and energy audits: monthly temperature and irradiance (W/m²) for a building location.
- Insurance and risk: check what the weather was at a place on a given date range.
- Data science and AI: weather features in one long table, with units in every row.
Tips for better results
- Pick the community to set solar units: AG, RE or SB.
- The grid is about 50 km. Use it for areas, not one exact street.
- Missing values are null and free, so check the status column.
Limits and good to know
- Up to 10 locations and 20 parameters per run
- Daily: up to 366 days per run. Monthly: whole calendar years from 1981; the current year has only the months NASA POWER has already published
- Some solar parameters start in 1984, so older months come back as
missing - The Actor sends at most 3 requests at a time to NASA POWER and retries short errors (HTTP 429 and 5xx)
- If some points fail and others work, the run status is
PARTIAL: good rows are kept, failed points get oneerrorrow each - Run statuses in
RUN_SUMMARY.status:COMPLETE,PARTIAL,NO_DATA,CAPPED,ERROR,INVALID_INPUT,CANCELLED
Troubleshooting
| What you see | Why | What to do |
|---|---|---|
Status NO_DATA, rows with value: null | NASA has not published these days yet, or the parameter has no data for that period | Use an earlier end date (5+ days ago) or another parameter. |
| Warning "Skipped parameter(s) not available for community …" | The code does not exist for this community or resolution | Check the code on the parameters page. |
INVALID_INPUT: Daily range is limited to 366 days | Daily range is too long | Split the range, or use temporal: "monthly". |
error row for one location | Bad coordinates or NASA rejected the request | Read statusReason; fix the line. Other points are not affected. |
| Two points give the same values | They are in the same 0.5° grid cell | This is expected for NASA POWER. |
Status ERROR, "Source unavailable" | NASA POWER is down or slow | Try again later. |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"status": "complete",
"statusReason": null,
"locationIndex": 1,
"locationLabel": "Ames IA",
"latitude": 42.0308,
"longitude": -93.6319,
"elevationM": 310.22,
"temporal": "daily",
"period": "2026-09-13",
"date": "2026-09-13",
"year": 2026,
"month": 9,
"day": 13,
"isAnnual": false,
"parameter": "T2M",
"parameterName": "Temperature at 2 Meters",
"value": 16.54,
"units": "C",
"community": "AG",
"timeStandard": "LST",
"provider": "NASA POWER",
"apiVersion": "v2.10.0",
"dataSources": ["FLASHFLUX", "GEOSIT", "POWER"],
"sourceUrl": "https://power.larc.nasa.gov/api/temporal/daily/point?parameters=T2M%2CPRECTOTCORR%2CWS2M%2CALLSKY_SFC_SW_DWN&community=AG&longitude=-93.6319&latitude=42.0308&start=20260913&end=20261012&format=JSON&time-standard=LST",
"fetchedAt": "2026-10-12T13:15:29.789Z"
}Data fields (25)
| Field | Type | Meaning |
|---|---|---|
status | string | Row result: complete (value present), missing (NASA POWER fill value -999 or no value yet; value null, not charged) or error (location failed; see statusReason). |
statusReason | string | Why the row is missing or failed; null for complete rows. |
locationIndex | integer | 1-based position of the location in the input list. |
locationLabel | string | Label from the input (third part of "lat, lon, label"), or null. |
latitude | number | Latitude as requested, decimal degrees. |
longitude | number | Longitude as requested, decimal degrees. |
elevationM | number | Grid-cell elevation in metres reported by NASA POWER. |
temporal | string | Resolution: daily or monthly. |
period | string | Period: 2026-10-04 (daily), 2025-03 (monthly) or 2025 (annual value of a monthly run). |
date | string | ISO date of the day, or the first day of the month; null for annual values. |
year | integer | Year of the period. |
month | integer | Month 1-12; null for annual values. |
day | integer | Day of month for daily rows; null otherwise. |
isAnnual | boolean | True for the annual value of a monthly run. |
parameter | string | NASA POWER parameter code, e.g. T2M. |
parameterName | string | Parameter long name from NASA POWER. |
value | number | Value in the units column; null when missing. |
units | string | Units as reported by NASA POWER for this community, e.g. C, mm/day, m/s, MJ/m^2/day. |
community | string | NASA POWER community that set the units: AG, RE or SB. |
timeStandard | string | Day boundary: LST (local solar time) or UTC. |
provider | string | Always NASA POWER. |
apiVersion | string | NASA POWER API version that served the data, e.g. v2.10.0. |
dataSources | array | Upstream data sources listed by NASA POWER (e.g. FLASHFLUX, GEOSIT, POWER for daily data). |
sourceUrl | string | NASA POWER API request URL for this location (no key needed). |
fetchedAt | string | UTC timestamp when the Actor fetched the data. |
Input settings (10)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Locations (latitude, longitude[, label]) required | locations | array | ["42.0308, -93.6319, Ames IA", "48.8566, 2.3522, Paris"] |
| Parameters | parameters | array | ["T2M", "PRECTOTCORR", "WS2M", "ALLSKY_SFC_SW_DWN"] |
| Resolution | temporal | string | "daily" |
| Community (units) | community | string | "AG" |
| Last N days | lastDays | integer | 30 |
| Start date | startDate | string | |
| End date | endDate | string | |
| Day boundary (daily only) | timeStandard | string | "LST" |
| Include missing values | includeMissingValues | boolean | true |
| Include annual values (monthly only) | includeAnnual | boolean | true |
