diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index abc50b24075ff92f18832462441b969f54908035..6fcbd43486f29bc775970dc2034376f764d2c9cb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,6 +1,7 @@
 stages:
  - install
  - test
+ - deploy
 
 .junit_template: &junit_definition
     artifacts:
@@ -35,3 +36,15 @@ test_py37:
         --cov-report=xml
         --cov-report=term
     <<: *junit_definition
+
+pages:
+    stage: deploy
+    image: python:3.7-alpine
+    script:
+      - pip install -U sphinx
+      - sphinx-build -b html docs public
+    artifacts:
+      paths:
+        - public
+    only:
+      - master
diff --git a/README.md b/README.md
index e6ab968198bdddc9baa47b9753b3bb0347bacb14..c944d8da4777c2e940b6e10c9f1115a020077ecb 100644
--- a/README.md
+++ b/README.md
@@ -7,4 +7,7 @@ https://gitlab.in2p3.fr/escape2020/wp3/eossr/-/commits/master)
 https://gitlab.in2p3.fr/escape2020/wp3/eossr/-/commits/master)
 
 
-ESCAPE OSSR library
\ No newline at end of file
+ESCAPE OSSR library
+
+* Code: https://gitlab.in2p3.fr/escape2020/wp3/eossr
+* Documentation: https://escape2020.pages.in2p3.fr/wp3/eossr/ 
\ No newline at end of file
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d4bb2cbb9eddb1bb1b4f366623044af8e4830919
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS    ?=
+SPHINXBUILD   ?= sphinx-build
+SOURCEDIR     = .
+BUILDDIR      = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/README.rst b/docs/README.rst
new file mode 100644
index 0000000000000000000000000000000000000000..d51cf8301a8feabeac3cff8e39ed0e6c12d06e08
--- /dev/null
+++ b/docs/README.rst
@@ -0,0 +1,5 @@
+README
+======
+
+.. literalinclude:: ../README.md
+   :lines: 9-
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..06aaace4cde11d7265ae399c352cdff6a7834af4
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,70 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+import os
+import sys
+import shutil
+sys.path.insert(0, os.path.abspath('..'))
+notebook_dir = '../eossr/examples/notebooks/'
+if not os.path.exists('examples'):
+    os.mkdir('examples')
+[shutil.copy(notebook_dir + file, 'examples') for file in os.listdir(notebook_dir) if file.endswith('.ipynb')]
+
+# -- Project information -----------------------------------------------------
+
+project = 'eossr'
+copyright = '2021, ESCAPE WP3-OSSR developers and contributors'
+author = 'Thomas Vuillaume & Enrique Garcia'
+
+release = ''
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.napoleon'
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# Parsers
+source_parsers = {
+   '.md': 'recommonmark.parser.CommonMarkParser',
+}
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+source_suffix = ['.rst', '.md']
+
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'alabaster'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
\ No newline at end of file
diff --git a/docs/docstring.rst b/docs/docstring.rst
new file mode 100644
index 0000000000000000000000000000000000000000..73fe2f0f1b40e7e18fbd522ee40816bcea925c31
--- /dev/null
+++ b/docs/docstring.rst
@@ -0,0 +1,22 @@
+=====================
+Package Documentation
+=====================
+
+Autogenerated documentation from docstrings.
+
+API module
+-------------
+
+.. automodule:: eossr.api.zenodo
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+
+Metadata module
+----------------------
+
+.. automodule:: eossr.metadata.codemeta2zenodo
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/docs/examples.rst b/docs/examples.rst
new file mode 100644
index 0000000000000000000000000000000000000000..cebfa10790e2eacbedbf796293955504762af59f
--- /dev/null
+++ b/docs/examples.rst
@@ -0,0 +1,10 @@
+Examples
+========
+
+Work in progress.
+
+.. toctree::
+   :maxdepth: 0
+
+    examples/Harvest_zenodo.ipynb
+    ../examples/notebooks/Harvest_zenodo.ipynb
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..23c80d6a0c9f366bc38c13f09d13b075175f7846
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,26 @@
+.. eossr documentation master file, created by
+   sphinx-quickstart on Wed Sep  8 16:24:23 2021.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to eossr's documentation!
+=================================
+
+.. toctree::
+   :maxdepth: 2
+   :caption: Contents:
+
+   README
+   license
+   docstring
+   examples
+
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/docs/license.rst b/docs/license.rst
new file mode 100644
index 0000000000000000000000000000000000000000..4466ef5ee9750bfaedd1fc3e0b18c044a7703b1c
--- /dev/null
+++ b/docs/license.rst
@@ -0,0 +1,4 @@
+License
+=============
+
+.. include:: ../LICENSE
\ No newline at end of file
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000000000000000000000000000000000000..2119f51099bf37e4fdb6071dce9f451ea44c62dd
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.http://sphinx-doc.org/
+	exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/eossr/api/__init__.py b/eossr/api/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e21b9f2977eab05e74a3ed690065046d7827633d 100644
--- a/eossr/api/__init__.py
+++ b/eossr/api/__init__.py
@@ -0,0 +1 @@
+from . import zenodo
diff --git a/eossr/metadata/__init__.py b/eossr/metadata/__init__.py
index 5836648be3aaa1be04656c7c2d73caa0affc5fbf..d57dd4a8e32bc8efe60f7084b55a486a7ce932bb 100644
--- a/eossr/metadata/__init__.py
+++ b/eossr/metadata/__init__.py
@@ -1 +1 @@
-from . import codemeta2zenodo
\ No newline at end of file
+from . import codemeta2zenodo