Because none of them is measuring anything. The UV index is a defined quantity, but every app shows a model or forecast of it, and the models differ on data source, cloud handling, update cadence, how close to your coordinates the number is computed, and whether it is today's peak or the value right now.

The index itself is precise: solar ultraviolet irradiance weighted by the CIE erythema action spectrum, the curve that describes how efficiently each wavelength reddens skin, then divided by 25 milliwatts per square meter. UV 8 means 200 mW/m² arriving on a horizontal surface. The scale was standardized by the WHO, WMO, UNEP and ICNIRP in 2002: 1 to 2 is low, 3 to 5 moderate, 6 to 7 high, 8 to 10 very high, 11 and above extreme. Two calibrated radiometers on the same roof agree closely. Two apps on the same phone often do not, because neither has a radiometer.

Every app is showing a model, not a measurement

A real erythemal radiometer is a calibrated instrument on a rooftop, and there is almost certainly not one in your town. So every number on every app is computed, and six choices in that computation account for nearly every disagreement.

  • Data source. A national forecast service, a commercial weather API, or a satellite-derived product. They run different atmospheric models on different inputs.
  • Clear sky or cloud-adjusted. Clear-sky UV is what the sun would deliver with no cloud. Cloud-adjusted UV scales that by a transmission factor from a cloud forecast. Thick overcast can cut the index by more than half.
  • Update cadence. One number per day, computed for solar noon. One number per hour. Or a value modelled continuously from the sun's current angle.
  • Spatial resolution. A forecast grid cell, the nearest reporting station, the nearest city in the app's database, or your actual coordinates.
  • Ozone, aerosols and elevation. Total column ozone swings from day to day, and a 1 percent drop in ozone raises erythemal UV by roughly 1.1 to 1.2 percent. Smoke and haze scatter UV out of the beam. Elevation adds about 10 percent per 1,000 meters. Many apps hold all three constant.
  • Peak or now. Whether the number on screen is today's forecast maximum or the value at this minute.

"My weather app says the UV is 10 but this app says it's 7"

Both can be right. Suppose it is 9 am under a layer of stratus. App A shows 9: the national forecast's daily maximum, a clear-sky value for local solar noon, for the grid cell that contains you. App B shows 2: a cloud-adjusted estimate for the sun's angle right now. Neither is broken. They are answering different questions, and neither label says which.

The reviewer who wrote "UVLens: 1 UV, reality: 4 UV" ran into the same thing from the other direction. A daily clear-sky peak and a live cloud-adjusted value can sit five points apart at breakfast and converge by noon.

"The closest place I can get a reading from is 30 km away"

An app that lists cities rather than coordinates is giving you the value for the city, and many only carry the largest one in each region. Across flat terrain at the same elevation, 30 kilometers changes the clear-sky index very little. Add 1,000 meters of elevation, or a marine cloud layer that stops at the coast, and the city's number stops being yours.

Forecast grids have the same problem at a finer scale. An atmospheric forecast cell is typically tens of kilometers across at mid-latitudes. The sun's angle can be computed exactly for your coordinates; the atmosphere above you is always interpolated from something coarser.

UVA rise, the UVB window, and what the index leaves out

The erythema weighting is steep. Wavelengths below about 298 nanometers count fully. By 340 nanometers, in the middle of the UVA band, a unit of irradiance counts about one thousandth as much. The UV index is therefore a UVB-weighted number, and it says little about how much UVA is reaching you.

That is why the two moments people track in circadian apps do not line up with the index. "UVA rise" is when the sun passes roughly 10 degrees of elevation and UVA begins reaching the ground in quantity. The index at that point usually reads 0 or 1. The "UVB window" opens later, once the sun is high enough, around 30 degrees in our model, for UVB to get through the ozone layer in amounts that matter for vitamin D. The index climbs steeply through that window. If you care about UVA for nitric oxide release, or about red light at daybreak, the index will not tell you when either arrives.

How to read any UV app

Ask the app these questions. If it does not answer them, assume the least informative option.

  1. Is this number for now, or today's peak? If it does not say, it is usually the peak.
  2. Is cloud included? A clear-sky value on an overcast day overstates your exposure.
  3. Where is it computed for? A city name means the city, not you.
  4. How often does it update? A daily number is stale by mid-afternoon.
  5. Does it treat UVA separately? If not, read an index of 1 as "UVA present, UVB absent," not as "nothing happening."

Where Sunlight is Life sits on each axis

Sunlight is Life computes for the coordinates you give it, not the nearest city, and shows the UVA and UVB reaching you separately, which is how UVA rise and the UVB window appear as separate events. The number is still a model, updated while the app is open; how it is built is in the questions below.

Check the UV index for your location →

Two apps that disagree are usually both telling the truth about different things. Once you know which question each one answers, the disagreement stops being noise and starts telling you something about the sky.