diff --git a/.docker/Dockerfile b/.docker/Dockerfile
index 8e18096490632372d589749867c41e2244a67c11..dd4f3d258443dc1f8b2bacb8d535780e8e37e5e8 100644
--- a/.docker/Dockerfile
+++ b/.docker/Dockerfile
@@ -7,8 +7,10 @@ RUN apt-get update && \
     python3-autopep8 \
     python3-pip \
     python3-pytest \
+    python3-sphinx \
     tox \
     -y
+RUN pip3 install recommonmark sphinx-rtd-theme
 COPY .docker/wait-for-it.sh /wait-for-it.sh
 ARG PYLIB
 ADD https://gitlab.indiscale.com/api/v4/projects/97/repository/commits/${PYLIB} \
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 67415c1b3a7da52e3179bec8463cd69ac3c667aa..8840e613f1e1eb86f30779b8b3535e2ff97ad0cc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -296,8 +296,9 @@ style:
 pages_prepare: &pages_prepare
   tags: [ cached-dind ]
   stage: deploy
-  needs: []
-  image: $CI_REGISTRY/caosdb/src/caosdb-pylib/testenv:latest
+  needs:
+    - job: build-testenv
+  image: $CI_REGISTRY_IMAGE
   only:
     refs:
       - /^release-.*$/i
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 145437d1621743716e355ddd0dea27f8a9e5b236..7c7662680c2ab1300423690157be6a656d273550 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Fixed ###
 
+* [#58](https://gitlab.com/caosdb/caosdb-crawler/-/issues/58) Documentation builds API docs in pipeline now.
+
 ### Security ###
 
 ### Documentation ###
diff --git a/unittests/test_parent_cfood.yml b/unittests/test_parent_cfood.yml
new file mode 100644
index 0000000000000000000000000000000000000000..afb158b3315505a179c780584b5c7fbbc2aac45b
--- /dev/null
+++ b/unittests/test_parent_cfood.yml
@@ -0,0 +1,39 @@
+---
+metadata:
+  crawler-version: 0.6.1
+---
+Definitions:
+  type: Definitions
+
+data:
+  type: Dict
+  match_name: '.*'
+  records:
+    Experiment:
+      name: "e"
+    Projekt:
+      parents: ["project"]
+      name: "p"
+    Campaign:
+      name: "c"
+    Stuff:
+      name: "s"
+  subtree:
+    Experiment:
+      type: DictElement
+      match: '.*'
+      records:
+        Experiment:
+            parents: ["Exp"]
+        Projekt:
+            parents: ["Projekt"]
+        Campaign:
+            parents: ["Cap"]
+        Stuff:
+          name: "s"
+    Experiment2:
+      type: DictElement
+      match: '.*'
+      records:
+        Campaign:
+            parents: ["Cap2"]
diff --git a/unittests/test_scanner.py b/unittests/test_scanner.py
index 1a1c8c1823aee5e84d35b9ddaf7dc919b56e40dc..9e6424dd32b01a0c50ddff8ae553d7409967ff6a 100644
--- a/unittests/test_scanner.py
+++ b/unittests/test_scanner.py
@@ -276,3 +276,32 @@ def test_variable_deletion_problems():
             assert record.get_property("var2").value == "test"
         else:
             raise RuntimeError("Wrong name")
+
+def test_record_parents():
+    """ Test the correct list of returned records by the scanner     """
+
+    data = {
+        'Experiments': {}
+    }
+
+    crawler_definition = load_definition(UNITTESTDIR / "test_parent_cfood.yml")
+    converter_registry = create_converter_registry(crawler_definition)
+
+    records = scan_structure_elements(DictElement(name="", value=data), crawler_definition,
+                                   converter_registry)
+    assert len(records)==4
+    for rec in records:
+        if rec.name == 'e':
+            assert rec.parents[0].name == 'Exp' # default parent was overwritten
+            assert len(rec.parents)==1
+        elif rec.name == 'c':
+            assert rec.parents[0].name == 'Cap2' # default parent was overwritten by second
+                                                 # converter
+            assert len(rec.parents)==1
+        elif rec.name == 'p':
+            assert rec.parents[0].name == 'Projekt' # top level set parent was overwritten
+            assert len(rec.parents)==1
+        elif rec.name == 's':
+            assert rec.parents[0].name == 'Stuff' # default parent stays if no parent is given on
+                                                  # lower levels
+            assert len(rec.parents)==1