diff --git a/openfoodfacts/__init__.py b/openfoodfacts/__init__.py
index a891bf3..ff63f77 100644
--- a/openfoodfacts/__init__.py
+++ b/openfoodfacts/__init__.py
@@ -3,6 +3,7 @@ import sys
 from . import facets
 from . import utils
 from .products import get_product
+from . import openbeautyfacts
 
 openfoodfacts = sys.modules[__name__]
 __version__ = '0.0.1'
diff --git a/openfoodfacts/facets.py b/openfoodfacts/facets.py
index cc00cb9..0b2f78e 100644
--- a/openfoodfacts/facets.py
+++ b/openfoodfacts/facets.py
@@ -11,8 +11,8 @@ facets = [
     'label',
     'languages',
     'nutrition_grade',
-    'packagings',
-    'packager_code',
+    'packaging',
+    'packaging_codes',
     'purchase_places',
     'photographer',
     'informer',
diff --git a/openfoodfacts/openbeautyfacts.py b/openfoodfacts/openbeautyfacts.py
new file mode 100644
index 0000000..dd2f8c4
--- /dev/null
+++ b/openfoodfacts/openbeautyfacts.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+import requests
+from . import utils
+
+
+def get_product(barcode, locale='world'):
+    """
+    Return information of a given product.
+    """
+    return utils.fetch(utils.build_url(geography=locale,
+                                       service='api',
+                                       resource_type='product',
+                                       parameters=barcode,
+                                       entity="beauty"))
+
+
+def get_by_facets(query, page=1, locale='world'):
+    """
+    Return products for a set of facets.
+    """
+    path = []
+    keys = query.keys()
+
+    if len(keys) == 0:
+        return []
+
+    else:
+        keys = sorted(keys)
+        for key in keys:
+            path.append(key)
+            path.append(query[key])
+
+        return utils. \
+            fetch(utils.build_url(geography=locale,
+                                  resource_type=path,
+                                  parameters=str(page),
+                                  entity="beauty"))['products']
+
+
+def search(query, page=1, page_size=20,
+           sort_by='unique_scans', locale='world'):
+    """
+    Perform a search using Open Food Facts search engine.
+    """
+    parameters = {'search_terms': query,
+                  'page': page,
+                  'page_size': page_size,
+                  'sort_by': sort_by,
+                  'json': '1'}
+
+    path = utils.build_url(geography=locale,
+                           service='cgi',
+                           resource_type='search.pl',
+                           parameters=parameters,
+                           entity="beauty")
+
+    return utils.fetch(path, json_file=False)
diff --git a/openfoodfacts/utils.py b/openfoodfacts/utils.py
index 4601e6d..e8d5f99 100644
--- a/openfoodfacts/utils.py
+++ b/openfoodfacts/utils.py
@@ -5,6 +5,7 @@ import sys
 import urllib
 
 API_URL = "https://%s.openfoodfacts.org/"
+OBF_API_URL = "https://%s.openbeautyfacts.org/"
 
 
 def login_into_OFF():
@@ -62,9 +63,16 @@ def download_data(file_type='mongodb'):
 
 
 def build_url(geography='world', service=None,
-              resource_type=None, parameters=None):
+              resource_type=None, parameters=None, entity="food"):
 
-    geo_url = API_URL % (geography)
+    if entity == "food":
+        geo_url = API_URL % (geography)
+
+    elif entity == "beauty":
+        geo_url = OBF_API_URL % (geography)
+
+    else:
+        raise ValueError("Product not recognized!")
 
     geo_url = geo_url[:-1]
 

Make it possible to create an Open Beauty Facts variant
diff --git a/tests/facets_test.py b/tests/facets_test.py
index b54228a..8d4e5c6 100644
--- a/tests/facets_test.py
+++ b/tests/facets_test.py
@@ -10,15 +10,35 @@ class TestFacets(unittest.TestCase):
             mock.get('https://world.openfoodfacts.org/traces.json',
                      text='{"tags":["egg"]}')
             res = openfoodfacts.facets.get_traces()
-            self.assertEquals(res, ["egg"])
+            self.assertEqual(res, ["egg"])
 
     def test_get_additives(self):
         with requests_mock.mock() as mock:
             mock.get('https://world.openfoodfacts.org/additives.json',
                      text='{"tags":["additive"]}')
             res = openfoodfacts.facets.get_additives()
-            self.assertEquals(res, ["additive"])
+            self.assertEqual(res, ["additive"])
 
+    def test_get_purchase_places(self):
+        with requests_mock.mock() as mock:
+            mock.get('https://world.openfoodfacts.org/purchase-places.json',
+                     text='{"tags":["France"]}')
+            res = openfoodfacts.facets.get_purchase_places()
+            self.assertEqual(res, ["France"])
+
+    def test_get_packaging_codes(self):
+        with requests_mock.mock() as mock:
+            mock.get('https://world.openfoodfacts.org/packager-codes.json',
+                     text='{"tags":["FABRICANTE-Y-ENVASADOR"]}')
+            res = openfoodfacts.facets.get_packaging_codes()
+            self.assertEqual(res, ["FABRICANTE-Y-ENVASADOR"])
+
+    def test_get_entry_dates(self):
+        with requests_mock.mock() as mock:
+            mock.get('https://world.openfoodfacts.org/entry-dates.json',
+                     text='{"tags":["2017"]}')
+            res = openfoodfacts.facets.get_entry_dates()
+            self.assertEqual(res, ["2017"])
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/tests/products_test.py b/tests/products_test.py
index a2c3ab9..1bf702c 100644
--- a/tests/products_test.py
+++ b/tests/products_test.py
@@ -13,32 +13,32 @@ class TestProducts(unittest.TestCase):
                 'https://world.openfoodfacts.org/api/v0/product/1223435.json',
                 text='{"name":"product_test"}')
             res = openfoodfacts.get_product('1223435')
-            self.assertEquals(res, {'name': 'product_test'})
+            self.assertEqual(res, {'name': 'product_test'})
 
     def test_get_by_trace(self):
         with requests_mock.mock() as mock:
             mock.get('https://world.openfoodfacts.org/trace/egg/1.json',
                      text='{"products":["omelet"]}')
             res = openfoodfacts.products.get_by_trace('egg')
-            self.assertEquals(res, ["omelet"])
+            self.assertEqual(res, ["omelet"])
 
     def test_get_by_trace_pagination(self):
         with requests_mock.mock() as mock:
             mock.get('https://world.openfoodfacts.org/trace/egg/2.json',
                      text='{"products":["omelet"]}')
             res = openfoodfacts.products.get_by_trace('egg', 2)
-            self.assertEquals(res, ["omelet"])
+            self.assertEqual(res, ["omelet"])
 
     def test_get_by_country(self):
         with requests_mock.mock() as mock:
             mock.get('https://world.openfoodfacts.org/country/france/1.json',
                      text='{"products":["omelet"]}')
             res = openfoodfacts.products.get_by_country('france')
-            self.assertEquals(res, ["omelet"])
+            self.assertEqual(res, ["omelet"])
 
     def test_get_by_country_and_trace(self):
         res = openfoodfacts.products.get_by_facets({})
-        self.assertEquals(res, [])
+        self.assertEqual(res, [])
 
         with requests_mock.mock() as mock:
             mock.get(
@@ -47,7 +47,7 @@ class TestProducts(unittest.TestCase):
                 text='{"products":["omelet"]}')
             res = openfoodfacts.products.get_by_facets(
                     {'trace': 'egg', 'country': 'france'})
-            self.assertEquals(res, ["omelet"])
+            self.assertEqual(res, ["omelet"])
 
     def test_search(self):
         with requests_mock.mock() as mock:
@@ -57,7 +57,7 @@ class TestProducts(unittest.TestCase):
                 '1&page_size=20&sort_by=unique_scans',
                 text='{"products":["kinder bueno"], "count": 1}')
             res = openfoodfacts.products.search('kinder bueno')
-            self.assertEquals(res["products"],  ["kinder bueno"])
+            self.assertEqual(res["products"],  ["kinder bueno"])
             mock.get(
                 'https://world.openfoodfacts.org/cgi/search.pl?' +
                 'search_terms=banania&json=1&page=' +
@@ -65,7 +65,30 @@ class TestProducts(unittest.TestCase):
                 text='{"products":["banania", "banania big"], "count": 2}')
             res = openfoodfacts.products.search(
                 'banania', page=2, page_size=10)
-            self.assertEquals(res["products"],  ["banania", "banania big"])
+            self.assertEqual(res["products"],  ["banania", "banania big"])
+
+    def test_advanced_search(self):
+        with requests_mock.mock() as mock:
+            mock.get(
+                'https://world.openfoodfacts.org/cgi/search.pl?' +
+                'search_terms=coke&tagtype_0=packaging&' +
+                'tag_contains_0=contains&tag_0=plastic&' +
+                'nutriment_0=energy&nutriment_compare_0=gt&' +
+                'nutriment_value_0=0&sort_by=unique_scans&' +
+                'page_size=20',
+                text= '{"products":["Diet Coke"], "count": 1}')
+            res = openfoodfacts.products.advanced_search({
+                  "search_terms":"coke",
+                  "tagtype_0":"packaging",
+                  "tag_contains_0":"contains",
+                  "tag_0":"plastic",
+                  "nutriment_0":"energy",
+                  "nutriment_compare_0":"gt",
+                  "nutriment_value_0":"0",
+                  "sort_by":"unique_scans",
+                  "page_size":"20"
+                })
+            self.assertEqual(res["products"],["Diet Coke"])
 
 if __name__ == '__main__':
     unittest.main()

pip install -e .
parse_log_pytest
requirements.txt
pytest requests_mock
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
-e git+https://github.com/openfoodfacts/openfoodfacts-python.git@da39e20197634a0beef2229bba9bd73fa1e3fdf7#egg=openfoodfacts
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
requests==2.11.1
requests-mock==1.12.1
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: openfoodfacts-python
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - requests==2.11.1
      - requests-mock==1.12.1
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/openfoodfacts-python

tests/facets_test.py::TestFacets::test_get_packaging_codes
tests/facets_test.py::TestFacets::test_get_additives tests/facets_test.py::TestFacets::test_get_entry_dates tests/facets_test.py::TestFacets::test_get_purchase_places tests/facets_test.py::TestFacets::test_get_traces tests/products_test.py::TestProducts::test_advanced_search tests/products_test.py::TestProducts::test_get_by_country tests/products_test.py::TestProducts::test_get_by_country_and_trace tests/products_test.py::TestProducts::test_get_by_trace tests/products_test.py::TestProducts::test_get_by_trace_pagination tests/products_test.py::TestProducts::test_get_product tests/products_test.py::TestProducts::test_search
openfoodfacts/__init__.py openfoodfacts/facets.py openfoodfacts/openbeautyfacts.py openfoodfacts/utils.py
openfoodfacts/__init__.py openfoodfacts/facets.py openfoodfacts/openbeautyfacts.py openfoodfacts/utils.py