diff --git a/arkindex_worker/worker/base.py b/arkindex_worker/worker/base.py
index 25e126ce50ab89def4e02162cb778a7783e1a81e..f9f9928ec43d9455b36f4ce42818e2ff9ab042f7 100644
--- a/arkindex_worker/worker/base.py
+++ b/arkindex_worker/worker/base.py
@@ -62,6 +62,7 @@ class BaseWorker(object):
         logger.info(f"Worker will use {self.work_dir} as working directory")
 
         self.process_information = None
+        self.user_configuration = None
         self.support_cache = support_cache
         # use_cache will be updated in configure() if the cache is supported and if there
         # is at least one available sqlite database either given or in the parent tasks
@@ -160,6 +161,15 @@ class BaseWorker(object):
         # Load all required secrets
         self.secrets = {name: self.load_secret(name) for name in required_secrets}
 
+        # Load worker run configuration when available and not in dev mode
+        if os.environ.get("ARKINDEX_WORKER_RUN_ID") and not self.args.dev:
+            worker_run = self.request(
+                "RetrieveWorkerRun", id=os.environ["ARKINDEX_WORKER_RUN_ID"]
+            )
+            self.user_configuration = worker_run.get("configuration")
+            if self.user_configuration:
+                logger.info("Loaded user configuration from WorkerRun")
+
         task_id = os.environ.get("PONOS_TASK")
         paths = None
         if self.support_cache and self.args.database is not None:
diff --git a/tests/test_base_worker.py b/tests/test_base_worker.py
index 90953177c24c36db3dc42bd4c97f7bb4bf13cfce..e1d450780ffc14e54def8f9053c9cfe3c65446be 100644
--- a/tests/test_base_worker.py
+++ b/tests/test_base_worker.py
@@ -119,18 +119,56 @@ def test_cli_arg_verbose_given(mocker, mock_config_api):
     logger.setLevel(logging.NOTSET)
 
 
-def test_configure_dev_mode(mocker, mock_user_api, mock_worker_version_api):
+def test_configure_dev_mode(
+    mocker, monkeypatch, mock_user_api, mock_worker_version_api
+):
     """
     Configuring a worker in developer mode avoid retrieving process information
     """
     worker = BaseWorker()
     mocker.patch.object(sys, "argv", ["worker", "--dev"])
+    monkeypatch.setenv(
+        "ARKINDEX_WORKER_RUN_ID", "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
+    )
     worker.configure()
 
     assert worker.args.dev is True
     assert worker.process_information is None
     assert worker.worker_version_id == "12341234-1234-1234-1234-123412341234"
     assert worker.is_read_only is True
+    assert worker.user_configuration is None
+
+
+def test_configure_worker_run(mocker, monkeypatch, responses, mock_config_api):
+    worker = BaseWorker()
+    mocker.patch.object(sys, "argv", ["worker"])
+    run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
+    monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id)
+    responses.add(
+        responses.GET,
+        f"http://testserver/api/v1/imports/workers/{run_id}/",
+        json={"id": run_id, "configuration": {"a": "b"}},
+    )
+    worker.configure()
+
+    assert worker.user_configuration == {"a": "b"}
+
+
+def test_configure_worker_run_missing_conf(
+    mocker, monkeypatch, responses, mock_config_api
+):
+    worker = BaseWorker()
+    mocker.patch.object(sys, "argv", ["worker"])
+    run_id = "aaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
+    monkeypatch.setenv("ARKINDEX_WORKER_RUN_ID", run_id)
+    responses.add(
+        responses.GET,
+        f"http://testserver/api/v1/imports/workers/{run_id}/",
+        json={"id": run_id},
+    )
+    worker.configure()
+
+    assert worker.user_configuration is None
 
 
 def test_load_missing_secret():