diff --git a/flamenco_worker/__init__.py b/flamenco_worker/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57d34b898c88fc2ab9869a0c75f6806f9bfc7106 100644
--- a/flamenco_worker/__init__.py
+++ b/flamenco_worker/__init__.py
@@ -0,0 +1 @@
+__version__ = '2.0-beta10-worker3'
diff --git a/flamenco_worker/cli.py b/flamenco_worker/cli.py
index 465b98e154edcbb7a5178964505fbd84ae5c67a8..731a8458975cfcfe3cfe76f413192ed816a72a4a 100644
--- a/flamenco_worker/cli.py
+++ b/flamenco_worker/cli.py
@@ -37,10 +37,11 @@ def main():
     shutdown_future = loop.create_future()
 
     # Piece all the components together.
-    from . import runner, worker, upstream, upstream_update_queue, may_i_run
+    from . import runner, worker, upstream, upstream_update_queue, may_i_run, __version__
 
     fmanager = upstream.FlamencoManager(
         manager_url=confparser.value('manager_url'),
+        flamenco_worker_version=__version__,
     )
 
     tuqueue = upstream_update_queue.TaskUpdateQueue(
diff --git a/flamenco_worker/upstream.py b/flamenco_worker/upstream.py
index 4c19b4c5d20374dd91bd6b1cdc0839fdeb32e0a7..9759257327b56df420ed6608b60012d889bc9858 100644
--- a/flamenco_worker/upstream.py
+++ b/flamenco_worker/upstream.py
@@ -1,5 +1,6 @@
 import attr
 import concurrent.futures
+import functools
 import requests
 
 from . import attrs_extra
@@ -11,6 +12,7 @@ HTTP_TIMEOUT = 3  # in seconds
 @attr.s
 class FlamencoManager:
     manager_url = attr.ib(validator=attr.validators.instance_of(str))
+    flamenco_worker_version = attr.ib(validator=attr.validators.instance_of(str))
     session = attr.ib(default=None, init=False)
     auth = attr.ib(default=None, init=False)  # tuple (worker_id, worker_secret)
 
@@ -34,6 +36,10 @@ class FlamencoManager:
     async def patch(self, *args, loop, **kwargs) -> requests.Response:
         return await self.client_request('PATCH', *args, loop=loop, **kwargs)
 
+    @functools.lru_cache(1)
+    def user_agent(self):
+        return 'Flamenco-Worker %s' % self.flamenco_worker_version
+
     async def client_request(self, method, url, *,
                              params=None,
                              data=None,
@@ -75,6 +81,10 @@ class FlamencoManager:
             else:
                 self._log.debug('%s %s with JSON: %s', method, abs_url, json)
 
+        if headers is None:
+            headers = {}
+        headers['User-Agent'] = self.user_agent()
+
         http_req = partial(self.session.request,
                            method, abs_url,
                            params=params,
diff --git a/setup.py b/setup.py
index 9f253f9a22975eb5debec23cb9b43c46601bb96d..dfffd3d9fe511cf4cbaa3c62996a7c387db7caf0 100755
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ import setuptools
 if __name__ == '__main__':
     setuptools.setup(
         name='flamenco-worker',
-        version='2.0.0-beta10-worker3',
+        version='2.0-beta10-worker3',
         description='Flamenco Worker implementation',
         author='Sybren A. Stüvel',
         author_email='sybren@blender.studio',
diff --git a/update_version.sh b/update_version.sh
index 9c4b2b5348933c25ba19d8f241631e9e1fa78a28..21180780b305257bf88c21fb1d84ef3f4584bfb6 100755
--- a/update_version.sh
+++ b/update_version.sh
@@ -6,6 +6,7 @@ if [ -z "$1" ]; then
 fi
 
 sed "s/version='[^']*'/version='$1'/" -i setup.py
+sed "s/__version__\s*=\s*'[^']*'/__version__ = '$1'/" -i flamenco_worker/__init__.py
 
 git diff
 echo