diff --git a/searx/engines/chefkoch.py b/searx/engines/chefkoch.py
new file mode 100644
index 000000000..9dc6ae0dd
--- /dev/null
+++ b/searx/engines/chefkoch.py
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+"""Chefkoch is a German database of recipes.
+"""
+
+from datetime import datetime
+from urllib.parse import urlencode
+
+about = {
+    'website': "https://www.chefkoch.de",
+    'official_api_documentation': None,
+    'use_official_api': False,
+    'require_api_key': False,
+    'results': 'JSON',
+    'language': 'de',
+}
+
+paging = True
+categories = []
+
+number_of_results = 20
+skip_premium = True
+
+
+base_url = "https://api.chefkoch.de"
+thumbnail_format = "crop-240x300"
+
+
+def request(query, params):
+    args = {'query': query, 'limit': number_of_results, 'offset': (params['pageno'] - 1) * number_of_results}
+    params['url'] = f"{base_url}/v2/search-gateway/recipes?{urlencode(args)}"
+    return params
+
+
+def response(resp):
+    results = []
+
+    json = resp.json()
+
+    for result in json['results']:
+        recipe = result['recipe']
+
+        if skip_premium and (recipe['isPremium'] or recipe['isPlus']):
+            continue
+
+        publishedDate = None
+        if recipe['submissionDate']:
+            publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S")
+
+        content = (
+            "difficulity: "
+            + str(recipe['difficulty'])
+            + " / preparation time: "
+            + str(recipe['preparationTime'])
+            + "min / ingredient count: "
+            + str(recipe['ingredientCount'])
+        )
+
+        if recipe['subtitle']:
+            content = f"{recipe['subtitle']} / {content}"
+
+        results.append(
+            {
+                'url': recipe['siteUrl'],
+                'title': recipe['title'],
+                'content': content,
+                'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
+                'publishedDate': publishedDate,
+            }
+        )
+
+    return results
diff --git a/searx/settings.yml b/searx/settings.yml
index 2736cc150..6946b89db 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -448,6 +448,12 @@ engines:
     categories: images
     shortcut: opv
 
+  - name: chefkoch
+    engine: chefkoch
+    shortcut: chef
+    # to show premium or plus results too:
+    # skip_premium: false
+
   # - name: core.ac.uk
   #   engine: core
   #   categories: science