diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py
new file mode 100644
index 0000000000000000000000000000000000000000..149fea52401e54ed6b3dd448c992c7bbc7a5fd91
--- /dev/null
+++ b/src/caosadvancedtools/cfood.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""does something"""
+
+import argparse
+from argparse import RawTextHelpFormatter
+import re
+import caosdb as db
+from datetime import datetime
+from caosdb.exceptions import TransactionError
+
+
+class CFood(object):
+    def __init__(self, pattern):
+        self.pattern = re.compile(pattern)
+
+    def treat_match(self, filename, match):
+        entities = self.create_identifiables(filename, match)
+        for key, ent in entities.items():
+            existing = find_existing(ent)
+            if existing is None:
+                print(key, "does not exist")
+                ent.insert()
+                print(key, "inserted")
+                entities[key] = ent
+            else:
+                print(key, "exists")
+                entities[key] = existing
+
+        self.update_identifiables(entities, filename, match)
+
+    def create_identifiables(self, filename, match):
+        entities = {}
+        entities["exp"] = db.Record()
+        #import IPython
+        #IPython.embed()
+        entities["exp"].add_parent(name="Experiment")
+        entities["exp"].add_property(name="species", value=match.group)
+
+        return entities
+
+    def update_identifiables(self, entities, filename, match):
+        entities["exp"].add_property(name="date",
+                                     value=datetime.today().isoformat())
+        db.Container().extend(entities.values).update()
+
+    @staticmethod
+    def find_existing(entity):
+        query_string = "FIND Record "+ entity.get_parents()[0].name
+        query_string += " with " + "and".join(["'" + p.name + "'='" + p.value +"'" 
+                                            for p in entity.get_properties()])
+        print(query_string)
+        q = db.Query(query_string)
+        try:
+            r = q.execute(unique=True)
+        except TransactionError as er:
+            r = None
+        return r
+
+def get_parser():
+    parser = argparse.ArgumentParser(description=__doc__,
+                                     formatter_class=RawTextHelpFormatter)
+
+    return parser
+
+
+if __name__ == "__main__":
+    parser = get_parser()
+    args = parser.parse_args()
+
diff --git a/src/caosadvancedtools/crawler.py b/src/caosadvancedtools/crawler.py
new file mode 100644
index 0000000000000000000000000000000000000000..12947ba5763a73e61fa315ea0d4075b43dba69ff
--- /dev/null
+++ b/src/caosadvancedtools/crawler.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""does something"""
+
+import argparse
+from argparse import RawTextHelpFormatter
+from cfood import CFood
+
+
+
+class Crawler(object):
+    def __init__(self, food):
+        self.food = food
+
+    def crawl(self):
+        filename="path/to/file"
+        for cfood in self.food:
+            match =  cfood.pattern.match(filename)
+            if match is not None:
+                print("match")
+                cfood.treat_match(filename, match)
+
+
+def get_parser():
+    parser = argparse.ArgumentParser(description=__doc__,
+                                     formatter_class=RawTextHelpFormatter)
+
+    return parser
+
+
+if __name__ == "__main__":
+    parser = get_parser()
+    args = parser.parse_args()
+
+    f = CFood(pattern="(.*)to(.*)")
+    c = Crawler(food=[f])
+    c.crawl()
diff --git a/unittests/test_cfood.py b/unittests/test_cfood.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a4aa51f14a2e470d26e92f1ec227c95250003af
--- /dev/null
+++ b/unittests/test_cfood.py
@@ -0,0 +1,18 @@
+import unittest
+from tempfile import NamedTemporaryFile
+
+import caosdb as db
+from caosadvancedtools.cfood import CFood
+
+
+
+class CFoodTest(unittest.TestCase):
+    def setUp(self):
+        self.exp = db.Record()
+        self.exp.add_parent(name="Experiment")
+        self.exp.add_property(name="species", value="microunicorn")
+        pass
+
+    def test_check_existence(self):
+        assert CFood.find_existing(self.exp) is None
+        pass