Your iPhone has a light sensor. No app can read it.
Every iPhone has an ambient light sensor. It is the thing that dims your screen when you walk into a dark room, and it does that job well. What Apple has never shipped is a public way for an ordinary app to ask it for a number.
So an iPhone light meter does the only thing left: it opens the camera, looks at the exposure the camera settled on, and works backwards to a lux figure. That is a real technique, and photographers have used it for a century with handheld meters, but it is a reconstruction rather than a reading. Android is genuinely different here. Many Android phones publish a real lux value to any app that asks for it, straight off the hardware, with no calibration in between. The same app can therefore be steadier on an Android phone than on an iPhone, and that has nothing to do with how well either version was written.
This is the part most reviews skip, and it is the part that explains everything below. When you compare two iPhone light meters you are not comparing two sensors. You are comparing two guesses about the same camera.
What the camera is actually measuring
A light sensor measures how much light is arriving at that point. A camera measures how bright the things in front of it look. Those are different physical quantities, and converting between them requires an assumption about how reflective the scene is.
Every exposure-based meter assumes some average reflectance for the world. That assumption is roughly true pointed at a lawn. It is badly wrong pointed across a dim room at a bright window, and wrong in the other direction in a glass-walled office where the whole scene is bright. In our own readings, one office building came out around five times high, over and over. That is not a bug anyone can patch. It is the direct consequence of the camera answering a different question from the one you asked.
- A light sensor answers how much light arrives at this point. Nothing else moves it.
- A camera answers how bright the things in view look, so the same spot reads differently depending on what is behind it.
- Converting between them needs an assumption about how reflective the room is, and the phone has no way to check that assumption.
- Only one of the two is available to an iPhone app, and it is the second one.
It also means the number moves when nothing about the light has moved. Turn ninety degrees, catch more window in frame, and the figure changes. Lean over the phone and you have metered your own shadow.
Two apps, two brands, one formula
The most thorough public test of iPhone light meter apps was run by Photone, who make one. They put eight apps in a light-proof tent against a certified reference meter and published the table. Their errors ran from ninety-three per cent low to four hundred and seventy-five per cent high.
| iPhone app, as tested | HPS lamp | Spider LED | Quantum board LED |
|---|---|---|---|
| App A — the test author’s own | −1% | −6% | −4% |
| App B | +393% | +92% | +475% |
| App C | +119% | −23% | +135% |
| App D | +119% | −21% | +135% |
| App E | −41% | −92% | −51% |
| App F | −54% | −93% | −51% |
| App G | −85% | −72% | −75% |
Two details in that table are worth more than the ranking. First, two separate pairs of differently branded apps returned almost the same figures as each other — one pair reading 230,000 where the other read 230,000, and so on down the rows. Apps that share a number that precisely are running the same exposure formula behind different icons. Photone’s own conclusion is the right one: it creates false trust. If you install a second app to check the first, and they agree, you have learned nothing. You have asked the same formula twice.
Second, read the test conditions before you carry the result home. Those measurements were taken on grow lights, in a reflective tent, at twelve inches. That is the hardest case for a camera, because narrow-spectrum lamps are exactly where a sensor tuned to human vision fails worst, and it is not the case a houseplant on a windowsill is in. The test is sound. It is answering a grower’s question, not a windowsill question. And the winning row belongs to the company that ran it, competing under its former name, which they say plainly in the article.
Why no single correction can fix it
We spent a long time trying to calibrate our way out of this, and the record of that failure is the most useful thing we can hand you.
We paired camera readings against a hardware sensor: twenty points across two buildings, then more later. Then we asked, for each point separately, what correction would have made that reading right. Across the twenty points those required corrections spanned a factor of nineteen. So we swept the correction across its whole plausible range, from 0.05 to 4.0, looking for the value that satisfied the most points at once. The best any constant managed was six of twenty within thirty per cent.
Then it got worse in a more instructive way. A later round in the same home, on the same iPhone, needed a median correction 2.75 times away from the earlier round in that same home. Not a different phone, not a different building. The same phone in the same rooms, months apart, asking for a different constant.
| What we tried | What came back |
|---|---|
| The correction each single point needed, taken one at a time | Spanned a factor of 19 |
| Sweeping one constant across its whole range, 0.05 to 4.0 | Best case 6 of 20 points within ±30% |
| Refitting months later, same home and same iPhone | Median correction moved by 2.75× |
| One glass-walled office, every reading in it | Around 5× high, consistently |
A fitted constant is a description of the afternoon you fitted it on.
Any app quoting you a precise lux figure on an iPhone has picked one of those constants, and is not telling you which afternoon it came from.
The grow light number is the worst one
Lux is defined by how the human eye responds to colour, and the eye is most sensitive in the green. A grow light that is mostly red and blue therefore lands almost nowhere on that curve, and a camera reading it will under-report badly. A white LED lands much closer and reads roughly right.
So the correction a grow light needs depends entirely on its spectrum, which the phone cannot see. Our own measurements landed in three different places:
- Daylight — the case the whole approach was built for, and still the steadiest of the three.
- A white LED lamp — read roughly right, close enough that no correction was the honest answer.
- A red-blue lamp — under-read by several times over, because almost none of its output lands where the eye, and therefore lux, is defined.
The gap between the white lamp and the red-blue one ran past sevenfold. There is no constant that serves both, which is the same result as the section above arriving by a different road.
We know because we got this wrong in public. An earlier version of our app applied a grow-light correction on top of a daylight one and displayed 45,000 lux under a user’s white lamp, where several other apps agreed on about 6,000. The other apps were right and we were wrong: the entire gap was our own stacked correction. A Reddit user caught it, we took the stacking out, and the app now asks what colour the lamp is and applies nothing at all to white. We keep telling that story because the temptation it came from — make the number look more authoritative — is the same temptation behind every over-confident figure on this page.
So we stopped calibrating, and checked physics instead
Once you accept that no constant works, the question changes. Not what number should we multiply by, but when should we refuse to believe the camera at all.
Every spot has a ceiling. At your latitude, on that date, at that hour, through a window facing that way, there is only so much light the sky can physically deliver. We already compute that ceiling, because it is what the free spot checker runs on. So the camera reading now gets compared against it, and a reading that sits far above what the sky can deliver is not trusted.
The important property is that this check is one-way. It can only ever move a number down. That makes it mathematically incapable of turning an accurate reading into an under-read, which is the failure mode a calibration constant creates every time it guesses wrong in the low direction.
Two things in that chart are worth saying out loud. The median error more than halved, and the worst over-read fell by more than half. And the worst under-read did not move at all, because it structurally cannot. That is the difference between fixing a problem and moving it somewhere you are not looking.
This is also why the number is not what the app acts on. The reading tells us which tier the spot is in and the screen says it is an estimate; the fit judgement runs on the tier. A tier survives an error that a three-digit figure does not.
Android does not have this problem
Everything above is an iPhone story. Most Android phones ship the same ambient light sensor and then do the thing Apple does not: they publish its reading to any app that asks. That is a real lux figure straight off the hardware, with no camera, no scene in frame, and nothing to calibrate.
So on Android our reading comes from the sensor, and the physics check described above is switched off, because there the model is the less trustworthy of the two and clamping a real measurement against an estimate would be backwards. It is the same app making a different and better bet about which source to believe.
If you have both phones in the house, measure with the Android one. That is not a sentence we enjoy writing about the platform most of our users are on, but it is the true one.
What a phone reading is still good for
Order, and tiers. Whatever the camera is getting wrong, it gets wrong the same way twice in a row, so reading two spots the same way a few minutes apart ranks them correctly even when both absolute figures wander. That ranking is the decision that actually places a plant.
The paper trick helps with a real and separate problem. A sheet of ordinary printer paper over the front camera diffuses light arriving at an angle, so the sensor integrates the whole hemisphere above it rather than whichever bright patch happens to be in frame. It does not touch the spectrum problem and it does not turn an estimate into a laboratory figure. On our iPhone flow that is why the reading is labelled as measured through paper rather than presented as a bare number.
Four habits do more for you than any app choice:
- Read every spot inside one hour of one day, so the sun has not moved between them.
- Lay the phone flat and screen up, at the height the pot will really stand.
- Keep yourself and your arm out of the light, or you are metering your own shadow.
- Write down the tier, not the digits. The tier is the part that survives.
What we do about it
We ship a light meter, so treat this section as the interested party talking. Our position costs us something, which is the only reason it is worth reading: on iPhone the honest output of a phone is a labelled tier, not three significant figures.
In practice that means the score you get is not built on the camera number at all. The reading tells you which tier the spot is in and we say on the screen that it is an estimate; the fit judgement runs on the tier. On Android, where the hardware sensor is readable, the same reading is on firmer ground. And if you would rather not install anything to find out where a plant should go, the free spot checker does the same judgement in the browser from a description of the spot, with no account and no measurement at all — it is honest about being an estimate, and it publishes what it cannot tell you.
Here is what that judgement looks like once a reading has been turned into a tier.
Worth a try
It can work here with a little care.
A little dim, but workable
Comfortable temperature
Humidity suits it
Airflow suits it
You can run the same check without installing anything. Describe the spot to the free spot checker and it scores it in the browser, no account needed. There is a cap on how many spots you can save on the free tier; the check itself costs nothing.
By GrowSpot · Published August 28, 2026