Skip to main content
ToolsBay

WEB UTILITIES

What a Weather API Sees, and What a Forecast Actually Says

7 min read · ToolsBay editorial · Published · Updated

Just want to do it now?

Look up current conditions plus hourly and 10-day forecasts anywhere.

Open Weather Dashboard

Every other tool on this site does its work on your device. The weather dashboard does not, and cannot. A forecast is measured by instruments you do not own and computed on machines you do not have, so there is nothing to run locally. That makes it the only tool here that sends what you give it off your device — and it is worth being exact about what that turns out to be.

The two requests, in full

Type a city into the weather dashboard and your browser makes exactly two GET requests. The first turns the name you typed into coordinates:

https://geocoding-api.open-meteo.com/v1/search?name=Lisbon&count=1&language=en&format=json

The second asks for conditions at that point:

https://api.open-meteo.com/v1/forecast
  ?latitude=38.72&longitude=-9.13
  &current=temperature_2m,relative_humidity_2m,apparent_temperature,...
  &hourly=temperature_2m,precipitation_probability,weather_code,...
  &daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset,...
  &timezone=auto&forecast_days=10

That is the whole exchange. No API key, no account, no request body. What Open-Meteo receives is the text you typed, the coordinates it just handed back, and your IP address — which every web request reveals to whatever it is addressed to, including the one that loaded this article. There is no way to ask a remote machine what the weather is without telling it roughly where you are asking about.

Both URLs work if you paste them into an address bar; the response is dense, unindented JSON. The JSON formatter will make it readable and the URL parser will break that query string into a table of parameters. Those two, like everything else here, never send what you paste into them anywhere.

What the browser refuses to let this page do

The reason the exception stays an exception is not our restraint. Every response from this site carries a Content-Security-Policy header, and its connect-src directive lists the only hosts any page here is permitted to open a connection to. The two open-meteo.com hosts above are on it. So are the analytics endpoints, which record that a tool ran and whether it succeeded. Nothing else is.

The browser enforces that list, not us. A page cannot waive its own policy, and a request to an unlisted host is refused before a packet leaves. So the claim "your PDF is not uploaded" is not a promise you have to weigh — it is a header you can read, and there is no host on it that would accept a file even if one were offered.

A name is not a location

Geocoding is a separate service solving a separate problem, and it is where most "wrong weather" complaints actually begin. Open-Meteo's lookup is built on the GeoNames database, and the dashboard asks it for count=1 — one candidate, the top match, taken as read.

That is fine for Lisbon. It is not fine for Springfield, of which GeoNames lists dozens, or for any name a country reuses. Adding the region or country to your search — Springfield, Illinois — changes which record matches rather than which one gets picked, and that is the fix. Very small settlements may not be in the database at all, in which case the nearest listed town is a better search than a more precise one that returns nothing.

The forecast is for a box, not for your street

A weather model does not look up an answer. It takes the best available estimate of the current three-dimensional state of the atmosphere, divides the planet into grid cells, and steps the equations of fluid motion and thermodynamics forward in short increments. Radar and surface stations feed the starting state; they are not themselves the forecast.

Grid spacing is the constraint everything else follows from. ECMWF's global high-resolution model runs at about 9 km. NOAA's GFS runs at 13 km out to 16 days. Germany's ICON gets down to roughly 2 km over its own domain, and Météo-France's AROME to about 1 km over theirs. Open-Meteo's job is to pick the finest model that covers your coordinates and stitch successive runs together into one continuous series.

At 9 km, a single cell can contain a valley floor, the ridge above it and a stretch of coast, and it reports one temperature for all of them. That is not a bug in the model; it is resolution doing what resolution does. It explains why a forecast is reliably wrong in the same direction for hill towns, why sea breezes arrive unannounced, and why a city centre often reads a degree cooler than it feels.

Why two apps disagree about the same afternoon

Four reasons, and none of them is that one app is lying.

They may be running different models, which genuinely produce different answers. They may be showing different runs of the same model — a global model is rerun every few hours, so an app that refreshed twenty minutes ago holds newer information than one that refreshed three hours ago. They may be reading different grid cells, if their geocoding landed on different coordinates. And they apply different post-processing on top: statistical corrections for known local bias, and rounding.

Disagreement between two forecasts is information rather than noise. When every app you check says the same thing, the models agree, which usually means the situation is not finely balanced. When they diverge, that is the atmosphere telling you the outcome genuinely is uncertain.

What "60% chance of rain" states

This is the number most often read wrong, and the correct reading depends on how it was produced. Open-Meteo documents precipitation_probability as the probability of more than 0.1 mm falling in the preceding hour, derived from an ensemble of 30 separate simulations run at 0.25° resolution — cells roughly 27 km across.

So 60% means that in about 18 of those 30 runs, more than a tenth of a millimetre fell in that 27 km cell during that hour. It does not mean rain for 60% of the hour. It does not mean 60% of the area gets wet. And it says nothing at all about how hard it will rain: 0.1 mm is a few minutes of drizzle, and it counts exactly the same as a downpour.

Which is why the arithmetic people do with these numbers rarely works. Thirty percent in each of six consecutive hours is a day to carry a coat; thirty percent in one hour with nothing either side is a day to ignore it. The dashboard's daily rows show the highest hourly probability of the day, so a 40% day may be 40% for one hour and near zero for the rest.

Why day ten is worse than day two

The atmosphere is chaotic in the strict sense: two starting states too similar to tell apart will diverge into different weather, and the difference compounds. The starting state is always an estimate assembled from imperfect observations, so the error is never zero, and past roughly two weeks it has grown enough to swamp the signal.

Ensembles are how that uncertainty gets measured instead of ignored. Run the model many times from slightly perturbed starting conditions — 30 members for the ensemble behind that precipitation figure, 51 for ECMWF's medium-range ensemble — and the spread between members is the forecast's own estimate of how much to trust it. A tight cluster is confidence. Members fanning apart by day seven mean the single number an app prints for day seven is an average over futures that disagree with each other.

The picture is improving steadily. ECMWF's ensemble skill for 500 hPa geopotential height has advanced by roughly a day and a half per decade, so a present-day five-day forecast is about as good as a three-day forecast was in 2001. That is real progress and it does not repeal chaos. The dashboard shows ten days because ten days is what the API returns; the back half is a trend, not a plan, and the tool's own help text says exactly that.

Reading the rest of the card honestly

The feels-like figure usually answers your actual question better than the temperature does, because it folds in humidity — which limits how fast sweat evaporates — and wind, which strips warmth away.

The dew point on the card is not fetched at all. It is computed in your browser from temperature and humidity using the linear approximation Mark Lawrence published in the Bulletin of the American Meteorological Society in 2005, which sits within about a degree of the true value while relative humidity is above 50% and drifts further off below it. That is good enough to answer "will tonight be sticky", and it is not an instrument reading.

The condition label comes from weather_code, which follows the WMO present-weather code table. The dashboard collapses about a hundred codes into eleven labels, so "Rain" spans everything from light to violent. The precipitation figure beside it, in millimetres, is the one carrying the intensity.

Tools covered in this guide