Brands
These are the brands of the product.
In the database, this field is called brands
.
Suggested solution for the taxonomy
Short-term solution
The taxonomy for brands should have following features:
- a single brand is defined by a block of text and are separated by white lines;
- use a four letters code separated by underscore - <iso_639_language_code> _<iso_3166_country_code> - for the key. Example: fr_be, de_at.
- a single line defines the brand in a specific language and country or an attribute. Each line starts with the key name followed by parameters and separated by a colon.
- a block can contain (mind the order):
- (optional) a reference to a parent defined by "<" + the key (as described above) and the first parameter of an existing brand. For example "<ab_cd:brand1" refers to the parent key "ab_cd:brand1, synonym_of_brand1". Remark: any attributes shared between the parent and the child only have to be specified in the parent, i.e., they are inherited by the child. Remark: if a reference to a parent is provided it should be the first line of the block.
- (required) a key (as described above). For example: "mn_op:brand 1". It should be unique, so that we can distinguish between brands with the same name.
- (optional) a default key (xx_xx:) to be used for any language that is not specifically listed. It is always xx_xx. Remark: if it is provided it should be the last line after all other languages.
- language (e.g. ru:) - the brand-name in the language ru. A brand might be defined in multiple languages as needed, with a single line for each language. For instance the ru: might be used to specify a brand in Cyrillic. Sometimes also country specific brands are required.
- attributes - each brand can have one or more attributes
- barcodeprefix:en: - the first 8(?) numbers of the barcode that belong to the brand. With this brands can be automatically assigned to a barcode. Also the barcodes of existing products can be checked;
- wikipedia:en: - the full link to a page, which explains the brand(!!!). Note that brands are not well available on wikipedia;
- wikidata:en: - the identifaction of the wikidata entry for the brand(!!). Note that brands are not well available on wikidata;
- brand_owner_opencorporates:xx: - an identification of the probable brand owner/distributor on opencorporates. It is not always clear what should be written down here.
- idea: local customer service address (one for each country where the product is distributed, and a generic one)
- idea: eu trademark - maybe only useful for name trademarks? (not logo's). But not relevant to the consumer.
- idea: stores - the stores where the brand is sold. Maybe better to create a store taxonomy and link from there to brands?
Mid-long-term solution
Same as before, adding:
Example
zz:laespanola
xx:La Española
barcodeprefix:en:8410226
barcodeprefix:en:8410660
category:en en:Olive tree products
brand_owner_opencorporates:ES:80245129
#94 products @2022-04-23
zz:latrappe
xx:La Trappe
barcodeprefix:en:8711406
category:en en:belgian-beers
label:en: en:authentic-trappist-product
website:nl:https://nl.latrappetrappist.com/nl/nl.html
brand_owner_opencorporates:BE:0838355558
wikidata:en:Q590921
#11 products @2022-04-23
Q&A
- Product has more than a single brands.
- Product is part of a bigger brand or group.
- Synonyms. Product is sold with 2 brands, each for different language/countries.
- For example, both
Nature Valley
andVal Nature
can be written on the same product, but not always. - Solution: make
Val Nature
a child ofNature Valley
in this example becauseNature Valley
is the original U.S. brand (reference). - For example,
No Name
andSans nom
can be written on the same product, but not always. - Solution: make
No Name
,No Name Sans nom
andSans nom
three separate children ofGeneric brand
in this example because they are all lines ofGeneric brand
which is a Canadian brand (reference). Or, the three of them as synonyms of each others and child ofGeneric brand
. - For example,
Coop
, in Switzerland, can add up to three brands on a product:Betty Bossi
,Karma
andCoop
. They justify it: "We offer a wide range of own-label brands and brand worlds." (source) - Solution:
- For example,
Lipton
belongs toUnilever
but this product is distributed byPepsico
.Lipton
used to belong toUnilever
, and now belong toCVC Capital Partners
.Lipton
's ready to drink beverages belongs to bothUnilever
andPepsiCo
(who is distributor). - Solution:
- For example,
The Laughing Cow
andLa vache qui rit
. - Solution: they both belong to the same parent (
Bel Group
) - For example,
Miko/wall's ice
creams, calledFrigo
in Spain butBresler
in Chile and Bolivia. - Solution: make the taxonomy country specific instead of language specific?
- For example, The Coca-Cola Company sells
Fanta
in Thailand underFanta
andแฟนต้า
names. - For example,
Danone
sells mineral water in Morroco under bothعين سايس
andaïn Saïss
names. - For examples, Japanese/English (like
味の素
/Ajinomoto
) or Chinese/English (乐虎
/Hi-Tiger
) - Solution 1 (preferred): Synonyms th: แฟนต้า, fanta (+) they are at the same level of hierarchy (-) only first synonym will be visible for users, have to opt for the most appropriate one (local language maybe?), or use both (eg: th: แฟนต้า / fanta, แฟนต้า, fanta)
- Solution 2: different children for the same parent. Let's say we have parent "Coca Cola company", then we would have something like xx: coca-cola company
<xx: coca-cola company xx: fanta th: fanta
<xx: coca-cola company xx: แฟนต้า th: แฟนต้า (+) Both should be visible for users (-) we have two different entries for the "same" brand (also by changing the website URL th.openfoodfacts -> world.openfoodfacts, we could see different names... Maybe )
- For example, both
- Also synonyms. Product brand has changed over time.
- Solution: use synonyms in the taxonomy.
- One brand is owned by two companies.
- For example,
Aldi Nord
andAldi Süd
use the nameAldi
but they operate in different areas (between countries, and inside Germany itself) - Solution: make
Aldi Nord
andAldi Süd
children ofAldi
. In general, people will inputAldi
only. However, if someone putAldi Nord
, it should include its parent,Aldi
automatically.
- For example,
- The name of the brand is different from the name of the shop of these brand.
- For example
Aldi Nord
andAldi Süd
brand, use the international (now unified) brandAldi
(https://aldi.com/), which is also the common used shop name for bothAldi
brands in Germany. So theAldi Nord
andAldi Süd
brand, which are only used as shop indication brands on products (at least in Germany), have to resolved to the common shop nameAldi
instead ofAldi Nord
orAldi Süd
. For the brandAldi Süd
the shops could be also namedAldi Süd
, as written on the logo used inside Germany, but as the shop name of theAldi Nord
brand was alwaysAldi
from the beginning, no one in Germany useAldi Süd
as name for these shops.
- For example
- One brand is distributed/produced locally by another brand
- For example, the licensing of beer brands: the same brand may be exploited under a licensing agreement by different companies depending on the country (and this can change with time). My understanding is that it is because for beer, it is a lot cheaper to produce locally than to transport internationally. In the UK San Miguel would probably be under Carlsberg Marstons, but in Spain it would be under Mahou San Miguel and in the Philippine or Hong Kong under the (original) San Miguel Brewery.
- For example,
Asahi
, manufactured for the European market by its local subsidiaries (Peroni
in Italy, for instance) but used to be licensed toCarlsberg Marstons
orAB Inbev
depending on the country. SomeAsahi
brands are still licensed toAB InBev
at least for some European markets. It used to be very opaque, but recent events made that obvious. - In Algeria, a lot of brands are done under licensing because of local laws which forbid a company which is not 51% owned by an Algerian to produce locally while import of a lot of products is forbidden or very limited.
- Solution:
- Same name shared by different brands.
- For example,
San Miguel
is a beer in Spain [cervezas san miguel], food in Mexico [grupo agroindustrial san miguel], honey in Spain/France [Ramros Trading Company]) - For example,
Star
is starfinefood in the U.S., Star S.p.A. in Italy, stardrinks in the United Arab Emirates, star from Ghadawat Indian airlines company, - For example,
Walkers
represents 3 different brands (1, 2 and 3) - For example,
Dove
is either cosmetic (from Unilever) or chocolates brand (from Mars) - Solution: having country specific brands would help as well as differencing Cervezas San Miguel and San Miguel. In long term we could have some set of rules like if it is San Miguel and category is Beers, then rename Cerezas San Miguel. Same for food vs cosmetic.
- For example,
Cornetto
is a sub-brand of bothFrigo
andMiko
(see previous discussion) - Solution: make
Cornetto
child of both brands.
- For example,
- Products without brands written.
- For example. No brand. I used the company name of the packager as brand to make search preview more useful.
- For example, unbranded product of the brand
Harvest House.
The producer has a brandHarvest House
used for other fresh tomato products, but it's products also appears under other brands.
- Brand spelling and formatting.
- Is it
Coop
,coop
,COOP
,CO OP
? - Solution: in taxonomy, there are no difference between lower and upper case, there are no difference between space and hyphen. We can make
coop
a synonym ofco op
. - Brands containing an apostrophe or quotes are often missing this one.
- Brands with special characters like &
- For example for &,
M&M's
- Solution: special characters should be recognized. Eventually, use synonyms in the taxonomy.
- For example for &,
- Brands with commas
- For example for comma
Williams, West & Witt's Products
- Solution: brand should be written without the comma. it is not possible to use commas in the tags (if you write comma it will start a new tag, this example will result in two tags:
Williams
andWest & Witt's Products
or use ";" as separator as OpenStreetMap.
- For example for comma
- Brand with only numbers
- For examples,
1664
,1883
or365
.
- For examples,
- Is it
- company structure - do we want to list (and research) all the relationships between owners, marketing companies, etc. I would suggest that we do NOT and limit ourselves to the brands and brand owner (and maybe the production company);
- comment: overkill - it is very tempting to add al kinds details for owners, etc. The actual owners of the product, brand, etc, do not seem useful to the consumer. We just should provide links to third parties for this kind information. I.e. wikipedia, wikidata,, opencorporates, ipo europe, ...
- Decision:
- parent brand - when should the parent brand be added? Only if the parent brand is available on the front of the packaging, or also when it is shown on the back of the packaging, or when we can find out the legal final parent owner of a brand? This choice might have an implication for how we structure the data.
- comment @benbenben: at least having sub-brands/lines of a brand would be beneficial - for quality checks as well as monitoring number of products from the same distributor - even if the brand is not written on the package.
- For example,
S-budget
is a child ofSpar
. - For example,
Pilos
is a child ofLidl
.
- For example,
- Decision:
- comment @benbenben: at least having sub-brands/lines of a brand would be beneficial - for quality checks as well as monitoring number of products from the same distributor - even if the brand is not written on the package.
- EAN manufacturer codes - is there an open database which we could use?
- country code vs language code.
- comment @benbenben: To tackle country specific brands (https://github.com/openfoodfacts/openfoodfacts-server/issues/2954), I would suggest to replace <language:> by <country:>. Because some names can differ per country instead of per languages (we can take the example of Miko/wall's ice creams (https://en.wikipedia.org/wiki/Wall%27s_(ice_cream)) that are called Frigo in Spain but Bresler in Chile and Bolivia). (+) that would make easier to detect if a product is in a wrong country based on the brand taxonomy (-) not totally sure that we can do that technically, can we? (-) it adds complexity because all other taxonomies have language code and only the brand taxonomy would have the country code (+-) there may be some brands that divide a country in two (like Aldi), but not sure that it is an problem.
Observations summary
Summarizing the observations note above, we see the following brands:
- 1 universal brand, exact same name used in all countries and languages. e.g. "Nutella"
- 2 brand that is translated in different languages or scripts "The Laughing Cow", "La vache qui rit" (example) EDIT they both belong to the same parent (Bel Group)
- 3 brands that have the same name, but used in different languages
- 4 brands that have the same name, but used in different countries
- 5 brands that have the same name, and used in the same country. (e.g. "Ferrero" in Italy: there's also a pasta brand. EDIT pasta brand in Italy named Industria-alimentare-ferraro).
- 6 brands in non-latin scripts, which can not be latinised
- 7 parent brands are sometimes shown on packaging
Use cases (UC below)
The brands taxonomy has multiple applications within Open Food Facts. These are:
- 1 Display the brands of a product, in the language requested by the user;
- 2 Have a way to list all products of a brand;
- 3 Let users enter brands for a product, as they appear on the package (as free text);
- 4 Let the user select the correct brand from a list of existing brands. If the same brand text occurs multiple times, the user must be able to select the applicable one;
- 5 Suggests a brand to the user based on the manufacturer part of the barcode and other information;
- 6 Infer category and labels from brand - some brands are only used for specific products. This implies that the product category and possible labels can be implies (suggested);
- 7 Infer brand from manufacturer code within the barcode;
- 8 Barcode/Brand quality check - if the manufacturer part of the barcode does not match the specified brand, there is an error in either of them;
Design considerations
The observations and use cases lead to several design considerations:
- Unique brand key - as the same brand (string) can exist in multiple geographic areas or within the same geographic area, there must be a way to uniquely distinguish between the various brands. Otherwise, a user can not enter the correct brand (UC1), nor can we list all brands (UC2);
- Uses selectable brand - there must be a brand name in the same language/script of the package. If that name occurs multiple times in the taxonomy, it must be specified by product category, country sold, etc in order to make it unique. For instance, the label Taste occurs in France and Argentina, but is used for different categories. So the user should have the choice Taste (category 1 - France) and Taste (category 2 - Argentina). Maybe this can be mixed with the key. (UC4). EDIT: there are no Taste brands neither in France not in Argentina.
- Language/script specific brands - a way to code a single brand in multiple scripts and/or languages, for example in Chinese, Arabic and English (UC1)
- Language independent brand - a way to encode a brand that is valid for multiple languages (UC1);
Brands and Robotoff (AI)
Preventing OFF AI to detect some false brands: see brand_taxonomy_blacklist.txt.
Help to collect brands
The AI of Open Food Facts, called Robotoff, is trying to identify brands in several ways. We use OCR in combination with known values. We also have another technique using pure computer vision and annotations to create cluster of brands by visual similarity. The annotations made by Robotoff are provided to users, asking them to answer to a simple question. There are also used by Hunger Game. Everyone can use Hunger Game, but be careful to the issues mentioned in this current page.
- on 2020-10-29, there were 43200 annotations and 22748 remaining
- on 2020-11-17, there were 46911 annotations and 22720 remaining
- on 2020-11-17, there were ? and 57879 remaining
Know challenges
Some brand names are related to common name, expressions or ingredients producing false positive with AI tool. For examples:
- Racines (means "roots" in French)
- La Truffe (means "the truffle" in French)
- Pure Protein
- Best Choice is a brand, not a tagline
- Great Value also
- The Belgian, often entered
Belgian
; it produces many false positive from our AI.