Data changelog
When we get a number wrong, we fix it at the source and record it here. This page lists the corrections we have applied to figures that were already published, and when the underlying data was last refreshed.
Data refreshes
These are read live from the pipeline's own record each time this page loads, so they cannot drift from the database actually serving the site.
- Upstream source release
- en.openfoodfacts.org.products.csv.gz
- Published by Open Food Facts on July 31, 2026
- Full pipeline rebuild completed
- July 31, 2026
- Every product, ingredient, brand and ranking page was regenerated from the source release above.
- Most recent data upgrade
- August 2, 2026
- An incremental pass over the rebuilt database (see the pipeline corrections below).
- Release comparison window
- March 12, 2026 → July 31, 2026
- The two releases behind /data/open-food-facts-release-changes.
Corrections applied
Each entry says what a reader would have seen before the fix, not only what we changed. A correction log that describes only the repair hides the part that mattered. How corrections are handled, and how to report one, is on our editorial and corrections policy.
-
Ingredient identities were split by punctuation and article prefixes
What was published: Some ingredient pages covered fewer products than they should have, and a parsing fault had produced 825 orphan ingredient records. A storage phrase, "to preserve freshness", had itself become an ingredient page attached to 3,688 products.
What changed: The parser now keeps a bracketed span intact when it contains a comma, article-prefixed spellings collapse onto one identity, and flagged-additive counts are conserved per distinct product rather than per row.
-
A brand list was treated as a single brand
What was published: Open Food Facts stores brands as a comma-separated list. We used the whole string as one identity, so a retailer's catalogue was split across several records, each showing totals for only part of it.
What changed: Brand identities are resolved to the primary brand, so a brand page now covers that brand's full catalogue instead of an arbitrary slice.
-
Dye exposure was overstated by roughly 2.3×
What was published: The dye phase-out research page summed seven per-dye product counts and published the total as the number of affected product listings. A sweet coloured with three dyes is one product but three per-dye rows, so the sum counted product-dye pairs.
What changed: The page now reports distinct products, using the same counting function the dye tracker was already corrected to use.
-
Two ranking pages named a winner their column could not support
What was published: A brand was described as "the top-ranked record" at a safety score of 100.0 when 1,388 of the 3,831 qualifying brands held that identical score, so first place was decided by a tiebreak rather than by scoring better. A distribution note then explained the "gap" between two identical values.
What changed: Both pages state when a score is tied rather than presenting a tiebreak as a win.
-
The regulations page carried no data vintage
What was published: Every other data page stated when its figures were from; /regulations did not, so a reader had no way to judge how current it was.
What changed: The page now carries the same visible vintage as the rest of the site.
-
A voluntary FDA request was published as an enacted federal ban
What was published: Four surfaces stated that six synthetic dyes (Red 40, Yellow 5, Yellow 6, Blue 1, Blue 2, Green 3) were subject to a US federal prohibition dated 2027-10-01. No regulator set that date and no such federal ban exists.
What changed: The dyes' regulatory status was rewritten to describe what is actually binding: California's School Food Safety Act (AB 2316), which applies to K-12 public schools. The invented federal date was removed.
-
21 corporate dye pledges were withdrawn as unverifiable
What was published: A table of corporate reformulation pledges was published from a hand-typed seed list. Audited against upstream sources, its 21 rows collapsed onto four pledge dates and three target dates, a shape no real announcement dataset has.
What changed: The pledge data was withdrawn rather than published unverified. Silence beats an unsupported trust claim.
-
Products with no ingredient list were published at "Safety Score 100/100"
What was published: The score began at 100 and subtracted a penalty per flagged additive, so a product whose ingredients we had never parsed scored a perfect 100, the strongest safety claim on the site, derived from no evidence. This affected 454,996 of 859,658 products (52.9%), and it reached titles, meta descriptions, verdict panels and brand rankings.
What changed: Products without a parsed ingredient list are no longer scored at all; they are shown as unscreened. Verified in the current database: no unscreened product carries a score.
-
Stale dates and source attributions across several pages
What was published: A product page hard-coded "Data as of 2025", and /browse and /about carried source attributions and brand counts that an entity-resolution fix had already made wrong.
What changed: These figures are now read from the database and its recorded vintage rather than typed into the page.
What this log does and does not cover
This log begins on July 10, 2026, when we started recording corrections publicly. It is not a complete history of the site: changes made before that date are real but were not logged at the time, and we would rather say so than backfill entries we cannot stand behind.
It records corrections to published figures and refreshes of the underlying data. It does not list routine design, layout or wording changes, and it is not a substitute for the per-page data vintage shown on each data page.
If a number here still looks wrong, please tell us which page and which figure. That is how several of the entries above started.