Lally Studios
← Look Twice
Look Twice · Test report

Accuracy, published.

Every allergen app says it's accurate. We show our work. This page explains how Look Twice is tested, what it gets right, where it errs, and what it can't do. It's updated every time the app changes.

Run of September 21, 2026 (Mac and iPhone, iOS 27 reader)

The one number that matters

As of September 21, 2026, on every label in our library that declares an allergen, Look Twice says something other than "nothing found," on the Mac and on an iPhone.

0

Here's how we know. We photographed 331 real grocery labels and recorded 56 real scans in stores. For every one, a person read the physical package and wrote down which allergens it declares. That's the answer key. Then we make the app read every label again, every time we change anything, and check its answers against the key.

These numbers are measured with Apple’s own text recognizer, on a Mac and on an iPhone, as of iOS 27 / macOS 27. Every time Apple changes that recognizer, we re-measure and update this page.

So far the app has been asked to find a declared allergen 416 times. These are raw counts against the answer key, as of September 21, 2026: the Mac reader lands 415 of them at the app’s strongest warning, and an iPhone 18 Pro Max lands 413. The rest are named below. Only one of them gets no warning at all:

A canned tuna label, on both machines: instead of a red fish warning, the app says “this doesn’t look like the ingredients panel, try again.” This is the one with no warning.

One blurry label, on the iPhone only: wheat and sesame show amber instead of red. The Mac gets those two red only through a quirk in how it reads one line.

An earlier version of this page also named a label where soy showed amber on both machines. That was a mistake in our own answer key: the package prints "may contain soy," so amber was right. We corrected the key against the package, which is why the count went from 417 to 416.

We name these because the alternative, a quieter table, would be the opposite of what this page is for.

What that does and doesn't mean: one declared allergen in 416, on that tuna label, gets no warning of any kind, on either machine. That is a count on our own library, not a promise about your pantry. With one miss in 416 tries, we can say the true rate of a miss like that is very likely under about 1.1%, and we can't honestly say it's lower until the test library is much bigger, so we don't. The library grows every month.

When it's wrong, it's wrong in the careful direction.

20 / 23

On 20 labels on the Mac and 23 on the iPhone, the app warns about an allergen the label doesn't actually declare. Every one of those is listed below. The opposite, a declared allergen with no warning at all, has happened once: the tuna label above.

Same text, same answer.

Always

The app doesn't guess. Given the same text, the app gives the same answer. We test for that too.

The phone's own reader

Until September 20, 2026, every number on this page came from the Mac's text reader. The app runs on the phone's. So we ran the whole library through the phone's reader, on two iPhones running the same iOS.

On some labels the phone's reader skips a whole paragraph without saying so: an ingredient list, a Contains line. The Mac reads the same photo fine. As it was, an iPhone 18 Pro Max found 400 of the 416 declared allergens (an iPhone 16 found 403), and on one soup box, someone watching only milk would have been told "nothing found." We reported this to Apple on September 21, 2026 (Feedback FB24880938), with a minimal project that reproduces it.

So the app now reads every photo twice, with two different readers, and keeps what the second finds in the gaps the first leaves. It never uses the second read to remove anything. If the second read is slow, the app goes ahead without it. On September 21, 2026, an iPhone 18 Pro Max (iOS 27.0) found 413 of 416 at the strongest warning, and none of the labels that declare an allergen came back "nothing found" for the profiles we checked (everyone, milk only, and a family mix). One gap remains: on two labels in our library, a "may contain" line the reader does not return leaves a green for someone watching only that allergen (milk on one, soy on both). Those are the three wrong greens we know of.

Live scanning reads many frames, so it did better on the labels that gave photos trouble. On September 21, we scanned 44 library labels off a screen, one scan each. It found all 52 declared allergens on them. Its weaker side is "may contain" lines: it warned for 43 of 53. A miss there means an amber warning is missing, never a red one.

Still unmeasured: the fix on any phone but the iPhone 18 Pro Max, other iOS versions, and live scanning on real products in hand.

"Nothing found" is earned, not assumed

Before any scan is allowed to show "nothing found," the app checks whether the camera actually read the whole list clearly, not just whether it reached the end.

Of 93 scans that could have said "nothing found," the Mac said it 74 times and the iPhone 69. The rest were held back: on the Mac, 10 because a word didn't read clearly and 9 because the app couldn't find where the ingredient list starts; on the iPhone, 11 and 13. Holding back isn't a failure. It's the app saying "take a photo so I can be sure."

An unclear word only holds things back if it could be one of the allergens you're watching. If a blurry word sits next to an allergen nobody in your family has, it doesn't matter. Family mode combines everyone's allergens into one list and watches that. If nobody has picked any yet, it watches all nine.

Live scanning (holding the phone over the label) is the fast path and it's a little harder on the camera. Of 9 recorded live scans on labels with none of the nine allergens, 6 came back "nothing found," and 5 of those 6 told the parent some words didn't read clearly. When you see that note, take a photo. The photo path is the one we've tested hardest.

Checked per allergen

Allergen Labels in our library that declare it Softened, Mac Softened, iPhone
Milk9500
Eggs2700
Fish2111
Shellfish1600
Tree nuts2400
Peanuts1800
Wheat9201
Soy10200
Sesame2101

Softened means the label gets a quieter answer than its own wording earns: an amber caution instead of red or, for the tuna label, a gray "try again" card that names no allergen. Those are the ones named above. The thin rows get shopping trips.

How we test

Real products, photographed in real stores, each graded by a person reading the package. The app's answers are checked against those readings automatically on every single change to the engine. If a change would cause even one new miss, on any label, the app cannot be built. That's not a rule someone follows; it's wired into the tests. The library also runs on a phone, and will after every iOS update. On September 21 we also went through the engine's remaining gaps by hand. Two were fixable and are fixed (a garbled pair of words in a "may contain" line, and a label headed only "Allergy information"). One was a mistake in our own answer key, which we corrected against the package.

We also attack our own safety net:

1

We deliberately break the engine in 12 known ways (delete a word it looks for, turn off a safety rule) and check that the tests catch every break. Current score: 12 of 12.

2

We throw thousands of scrambled labels at it and check that garbage never produces "nothing found," that adding noise can never remove a warning, and that the app never guesses.

3

Every word on our "ordinary label English" list is checked against every allergen word it could be mistaken for, on every build, so the list can't quietly grow a blind spot.

4

We damage every photo in the library (glare, blur, dark, motion blur, and a bright hot spot laid right across the line that carries the warning) and check that a warning never turns into a reassurance.

The known over-warnings

Being honest means listing our mistakes, not just our record. Every known way the app is too cautious:

1

A can where a print defect reads "GARN FLOUR." The app flags wheat because it can't rule out a garbled wheat word. We keep this on purpose: the rule that causes it is the rule that catches real garbled wheat.

2

A label with a marketing sidebar. A protein-comparison blurb mentions egg; the layout defeats our column detection and we err toward caution.

3

A label with a decorative recipe panel. Same thing, milk.

4

A coconut-curry label where a garbled advisory line can't be matched back to its clean version, so milk, sesame, soy, peanuts, and wheat are graded stricter than the package warrants.

5

A cashew butter whose oil list names soybean as one option among several. The app flags soy at full strength because it can't tell which oil the jar actually got.

6

A plant-protein shake where fancy script lettering is misread as a standalone allergen word. Soy is flagged though the package doesn't name it.

7

A frozen-waffle box front. One stray line of numbers looks enough like a list to get past our ingredient-panel check, and the brand name, read a second way, looks like "egg." The app warns eggs. We keep this on purpose: the second reader that recovers dropped paragraphs is the one that surfaced that line.

8

On the iPhone, four labels where the app warns more strongly than the package does and the Mac does not: three where a "may contain" line comes back at the red level, and one where it names fish the label doesn't list. The phone's reader reads these lines differently from the Mac's, and when a line is unclear the app errs toward the stronger warning.

9

A bagged spice whose label reads "made in a factory that processes peanuts, tree nuts and wheat." The app shows that as a full red warning instead of a "may contain," because "factory that" is not a phrasing it treats as an advisory line. We keep this on purpose: it errs in the careful direction.

10

Some words the app always treats as suspicious when they sit next to a matching allergen word, because a garbled label is more dangerous than an occasional extra "take a photo."

We keep every one of these. Fixing them would mean guessing, and guessing is the one thing this app is built never to do.

What this does not mean

Look Twice reads the printed label through your camera. It can't see what the camera can't read: faded print, torn labels, a wrapped edge. It doesn't tell you what's in a food. It tells you what it found, shows you where, and says when words didn't read clearly. Recipes change without notice. For a serious allergy, always read the label yourself. The app tells you this too, because it's true.

Wheat means wheat. Look Twice doesn't check for gluten from barley or rye, or for anything outside the nine US allergens.

The numbers behind this page

Test library331 photos, 56 live scans, growing monthly
Declared allergens found (raw counts)Mac 415 of 416 · iPhone 413 of 416 (September 21, 2026)
Over-warningsMac 25 across 20 labels · iPhone 26 across 23 labels
Word list470 allergen terms · 1,380 curated ordinary words
Tests622 engine · 936 app · 145 live-scan
Break-the-engine checks12 of 12 caught · Scrambled-label rules: 8, holding
"Nothing found" gateMac 74 of 93 (10 held for an unclear word, 9 for "couldn't find the list") · iPhone 69 of 93 (11, 13) · 6 of 9 live scans (5 with a note)
"May contain" lines, photosMac 175 of 192 · iPhone 172 of 192 (September 21, 2026)
Live scan, off a screen44 library labels, 52 of 52 declared allergens found · 43 of 53 "may contain" lines
Last full runSession 162, September 21, 2026 (Mac, macOS 27.0 · iPhone 18 Pro Max, iOS 27.0, its saved reads re-graded)

For the statisticians: 1 declared allergen with no warning in 416 tries gives a 95% upper bound of about 1.1% on the true rate of that kind of miss. Verdicts are deterministic; identical input produces byte-identical output.

Built by one allergy parent who wanted to see the receipts. Now you can too.