diff --git a/setup.py b/setup.py
index c87d5860212d82cc8628e4efe0d168c0882c52ee..05af92dd54dda1b3fa181edb55ab3cc1d22cd21d 100644
--- a/setup.py
+++ b/setup.py
@@ -31,7 +31,7 @@ setup(
     license = 'GPL-3.0',
     keywords = 'simulation power system real-time data processing',
     url = 'https://git.rwth-aachen.de/acs/public/villas/dataprocessing',
-    packages = [ 'villas.dataprocessing' ],
+    packages = [ 'villas.dataprocessing', 'villas.web' ],
     long_description = read('README.md'),
     classifiers = [
         'Development Status :: 4 - Beta',
@@ -45,7 +45,8 @@ setup(
     install_requires = [
         'matplotlib',
         'numpy',
-        'pandas'
+        'pandas',
+        'requests'
     ],
     setup_requires = [
         'm2r',
diff --git a/villas/web/__init__.py b/villas/web/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/villas/web/result.py b/villas/web/result.py
new file mode 100644
index 0000000000000000000000000000000000000000..73ccc8ef62e5cae8c29a483c04b549a4b69fdabf
--- /dev/null
+++ b/villas/web/result.py
@@ -0,0 +1,28 @@
+import requests
+from zipfile import ZipFile 
+
+class Result:
+
+    def __init__(self, file_id, token, endpoint='https://villas.k8s.eonerc.rwth-aachen.de'):
+        self.file_id = file_id
+        self.token = token
+        self.endpoint = endpoint
+
+    def open(self):
+        resp = requests.request('GET',
+            url=f'{self.endpoint}/api/v2/files/{self.file_id}',
+            headers={
+                'Authorization': 'Bearer ' + self.token
+            },
+            stream=True)
+
+        resp.raise_for_status()
+
+        return resp.raw
+
+    def open_zip(self, filename):
+        f = self.open()
+
+        zf = ZipFile(f)
+        
+        return zf.open(filename)
diff --git a/villas/web/result_test.py b/villas/web/result_test.py
new file mode 100644
index 0000000000000000000000000000000000000000..f561a16f8f64768c3a6f9fa9ddf6d7b15c1b5233
--- /dev/null
+++ b/villas/web/result_test.py
@@ -0,0 +1,11 @@
+import pandas
+from villas.web.result import Result
+
+if __name__ == '__main__':
+
+    r = Result('https://l.0l.de/W3OQo', '')
+    f = r.open_zip('Sample100.csv')
+
+    df = pandas.read_csv(f)
+
+    print(df)