Yumori extract of Open Food Facts, catalog version 1.5.0 LICENCE AND ATTRIBUTION Contains information from Open Food Facts (https://world.openfoodfacts.org), which is made available under the Open Database License (ODbL) (https://opendatacommons.org/licenses/odbl/1-0/). Any rights in individual contents of the database are licensed under the Database Contents License (https://opendatacommons.org/licenses/dbcl/1-0/). This file is made available under the Open Database License (ODbL) v1.0: https://opendatacommons.org/licenses/odbl/1-0/ Individual contents: Database Contents License (DbCL) v1.0: https://opendatacommons.org/licenses/dbcl/1-0/ Open Food Facts: https://world.openfoodfacts.org Source: Open Food Facts CSV export downloaded 22 May 2026. IDENTITY Catalog version: 1.5.0 Catalog built at: 2026-08-18T15:29:56Z Core database (yumori_core.db) sha256: c2202b1654997b5acdbf6b46941765a5d3ad30c2110269a2e77728f29cda5d85 Extract file: yumori-off-extract-v1.5.0.csv.gz Extract sha256: 4bc49d7215946a1f3f1b83834006b9da04bf2ff0d404d50928cf819b5ee06278 Rows: 50000 (one per Open Food Facts product) FORMAT gzip-compressed CSV, UTF-8, comma-separated, RFC 4180 quoting, LF line endings, one header row, rows sorted by id. JSON columns use sorted keys. An empty field means NULL unless the column list says otherwise. COLUMNS 1. id: Yumori internal food id (foods.id). Rows are sorted by it. 2. source: Always 'off' (Open Food Facts). 3. source_id: Open Food Facts product code (the OFF 'code' field, whitespace-stripped). 4. category: Yumori category. [empty = NULL (no value)] 5. kcal: Energy, kcal per 100 g (OFF energy-kcal_100g). 6. protein_g: Protein, g per 100 g (OFF proteins_100g). [empty = NULL (no value)] 7. carbs_g: Carbohydrate, g per 100 g (OFF carbohydrates_100g). [empty = NULL (no value)] 8. fat_g: Fat, g per 100 g (OFF fat_100g). [empty = NULL (no value)] 9. fiber_g: Fibre, g per 100 g (OFF fiber_100g). 10. sugar_g: Sugars, g per 100 g (OFF sugars_100g). 11. sodium_mg: Sodium, mg per 100 g (OFF sodium_100g x 1000). 12. saturated_fat_g: Saturated fat, g per 100 g (OFF saturated-fat_100g). 13. carb_basis: Yumori carbohydrate basis: 1 = includes fibre, 2 = excludes fibre, empty = unknown. [empty = NULL (no value)] 14. is_branded: 1 for every OFF row. 15. brand: First entry of OFF 'brands', trimmed. 16. barcode: Same value as source_id. 17. countries: OFF 'countries', verbatim. 18. countries_tags: OFF 'countries_tags', verbatim. 19. categories_tags: OFF 'categories_tags', verbatim. 20. stores: OFF 'stores', verbatim. [empty = NULL (no value)] 21. is_verified: Yumori flag; 0 for every OFF row. 22. created_at: Row creation timestamp carried over from Yumori's master database. 23. name_id: Yumori internal id of the name row (food_names.id). 24. name_language: Language label of the name. 'en' for every OFF row; no language detection was applied. 25. name: Product name as shown in the app (see 'How this file was made'). 26. name_is_primary: 1 if this is the primary name in its language. 27. name_source: 'native' = the name comes from the source database, not a translation. 28. normalized_name: Yumori search key derived from the name. [empty = empty string] 29. head_term: Yumori search metadata: the head noun of the name. [empty = empty string] 30. qualifier_count: Yumori search metadata: number of qualifier words in the name. 31. preparation_tags: Yumori search metadata: preparation words found in the name. [empty = NULL (no value)] 32. friendly_name: Yumori short display name. [empty = NULL (no value)] 33. is_base_form: Yumori search metadata: 1 if the name is a plain base form. 34. numeric_qualifiers: Yumori search metadata: numeric qualifiers found in the name. [empty = NULL (no value)] 35. product_form_tags: Yumori search metadata: product-form words found in the name. [empty = NULL (no value)] 36. fts_name: Name as indexed for full-text search, given only where it differs from 'name' (character folding such as ß -> ss, œ -> oe); empty otherwise. 37. servings_json: JSON array of the food's servings, sorted by id: {id, language, description, grams, is_default, volume_ml}. grams and volume_ml are per serving; volume_ml is null unless stated. [] if none. 38. extended_nutrients_json: JSON array of the food's extended nutrients per 100 g, in nutrient-id order: {key, unit, amount, quality, derived}. quality is the source-quality label; derived = true means Yumori converted the unit. amount is stored as a 32-bit float and written as the shortest decimal that reads back to the same float. [] if none. HOW THIS FILE WAS MADE This file lists every Open Food Facts product included in the Yumori app's food library, with every value the app holds for it. It was exported from the app's database file (identified above) by src/18_export_off_extract.py. Selection. From the Open Food Facts CSV export, products were kept only if they had a product code of at least 8 characters, energy above 0 and at most 900 kcal per 100 g, and a product name. Duplicate codes were merged, first record kept. For the app, products were further required to have a name of 3 to 120 characters in Latin script, a code, non-empty categories, energy of 0 to 900 kcal and each macronutrient of 0 to 100 g per 100 g, protein + carbohydrate + fat of at most 100 g, and energy consistent with 4 x protein + 4 x carbohydrate + 9 x fat. Products sold in Belgium, the Netherlands, Luxembourg, Germany and France were preferred, then products with more complete data; part of the budget is reserved for Belgium, the Netherlands and Luxembourg. 50000 products were included. Changes and additions by Yumori: - Names: HTML entities decoded and non-breaking / zero-width spaces removed; where two products share a name, the brand is appended as 'name (Brand)'. Names are not translated; they are labelled 'en' without language detection. - Search metadata derived from the name: normalized_name, head_term, qualifier_count, preparation_tags, is_base_form, numeric_qualifiers, product_form_tags. These were computed on the name before the clean-up and brand suffix above. - fts_name: the search-index form of the name (245 rows differ from name). - Brand: first entry of the OFF brands field. - Nutrients: energy is taken only from energy-kcal_100g (no kJ conversion); sodium is sodium_100g converted from g to mg; negative values are dropped. - Extended nutrients: taken from the OFF *_100g columns, converted from g to the nutrient's unit (mg or ug) where needed and then flagged derived; values above a physical plausibility ceiling are dropped; some nutrients (EPA, DHA, ALA, LA, AA, biotin, fluoride, caffeine) are not imported. 41924 products carry extended nutrients. - carb_basis: set to 2 (excludes fibre) where the label arithmetic shows it. - Servings: a default '1 serving' parsed from OFF serving_quantity and serving_size; volume_ml kept only where it agrees with the grams. 18825 products carry a serving. - Bookkeeping columns: id, source, is_branded, is_verified, created_at, name_id, name_is_primary, name_source. Open Food Facts countries, countries_tags, categories_tags and stores are copied verbatim; the product code is whitespace-stripped only.