diff --git a/devops/azure/chart/templates/deployment.yaml b/devops/azure/chart/templates/deployment.yaml
index 818f9caceecdbaa7d2492671fa8b8629c1ab6e11..6f8dabb677ca1a52f3f95c310c9b2c18acf2f6a4 100644
--- a/devops/azure/chart/templates/deployment.yaml
+++ b/devops/azure/chart/templates/deployment.yaml
@@ -100,7 +100,7 @@ spec:
         - name: STORAGE_QUERY_RECORD_FOR_CONVERSION_HOST
           value: http://storage/api/storage/v2/query/records:batch
         - name: STORAGE_QUERY_RECORD_HOST
-          value: http://storage/api/storage/v2/records
+          value: http://storage/api/storage/v2/query/records
         - name: partition_service_endpoint
           value: http://partition/api/partition/v1
         - name: azure_istioauth_enabled
diff --git a/devops/azure/release.yaml b/devops/azure/release.yaml
index dca21e377c5a3c6d13d9dc59ff9e2f661851d2c2..dad51b35bebd9069044ac08b8848245a29165fb7 100644
--- a/devops/azure/release.yaml
+++ b/devops/azure/release.yaml
@@ -161,4 +161,4 @@ spec:
         - name: STORAGE_QUERY_RECORD_FOR_CONVERSION_HOST
           value: http://storage/api/storage/v2/query/records:batch
         - name: STORAGE_QUERY_RECORD_HOST
-          value: http://storage/api/storage/v2/records
+          value: http://storage/api/storage/v2/query/records
diff --git a/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzure.java b/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzure.java
new file mode 100644
index 0000000000000000000000000000000000000000..555dbc3964e0fe7e8308b329e98656310d13d78b
--- /dev/null
+++ b/provider/indexer-azure/src/main/java/org/opengroup/osdu/indexer/azure/util/IndexerQueueTaskBuilderAzure.java
@@ -0,0 +1,109 @@
+// Copyright © Azure
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.opengroup.osdu.indexer.azure.util;
+
+import com.google.common.reflect.TypeToken;
+import com.google.gson.*;
+import com.microsoft.azure.servicebus.Message;
+import lombok.extern.java.Log;
+import org.opengroup.osdu.azure.servicebus.ITopicClientFactory;
+import org.opengroup.osdu.core.common.logging.JaxRsDpsLog;
+import org.opengroup.osdu.core.common.model.http.DpsHeaders;
+import org.opengroup.osdu.core.common.model.indexer.RecordInfo;
+import org.opengroup.osdu.core.common.model.search.RecordChangedMessages;
+import org.opengroup.osdu.indexer.util.IndexerQueueTaskBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.annotation.RequestScope;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.lang.reflect.Type;
+
+@Log
+@Component
+@RequestScope
+@Primary
+public class IndexerQueueTaskBuilderAzure extends IndexerQueueTaskBuilder {
+
+    @Autowired
+    private ITopicClientFactory topicClientFactory;
+
+    @Inject
+    private JaxRsDpsLog logger;
+
+    @Inject
+    @Named("SERVICE_BUS_TOPIC")
+    private String serviceBusTopic;
+
+    @Override
+    public void createWorkerTask(String payload, Long countdownMillis, DpsHeaders headers) {
+        createTask(payload, headers);
+    }
+
+    @Override
+    public void createReIndexTask(String payload, Long countdownMillis, DpsHeaders headers) {
+        createTask(payload, headers);
+    }
+
+    private void createTask(String payload, DpsHeaders headers) {
+        Gson gson = new Gson();
+        RecordChangedMessages receivedPayload = gson.fromJson(payload, RecordChangedMessages.class);
+
+        Message message = new Message();
+        Map<String, Object> properties = new HashMap<>();
+
+        // properties
+        properties.put(DpsHeaders.ACCOUNT_ID, headers.getPartitionIdWithFallbackToAccountId());
+        properties.put(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionIdWithFallbackToAccountId());
+        headers.addCorrelationIdIfMissing();
+        properties.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId());
+        message.setProperties(properties);
+
+        // data
+        List<RecordInfo> recordInfos = parseRecordsAsJSON(receivedPayload.getData());
+
+        // add all to body {"message": {"data":[], "id":...}}
+        JsonObject jo = new JsonObject();
+        jo.add("data", gson.toJsonTree(recordInfos));
+        jo.addProperty(DpsHeaders.ACCOUNT_ID, headers.getPartitionIdWithFallbackToAccountId());
+        jo.addProperty(DpsHeaders.DATA_PARTITION_ID, headers.getPartitionIdWithFallbackToAccountId());
+        jo.addProperty(DpsHeaders.CORRELATION_ID, headers.getCorrelationId());
+        JsonObject jomsg = new JsonObject();
+        jomsg.add("message", jo);
+
+        message.setBody(jomsg.toString().getBytes(StandardCharsets.UTF_8));
+        message.setContentType("application/json");
+
+        try {
+            logger.info("Indexer publishes message to Service Bus " + headers.getCorrelationId());
+            topicClientFactory.getClient(headers.getPartitionId(), serviceBusTopic).send(message);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+        }
+    }
+
+    private List<RecordInfo> parseRecordsAsJSON(String inputPayload) {
+        Gson gson = new Gson();
+        Type type = new TypeToken<List<RecordInfo>>(){}.getType();
+        List<RecordInfo> recordInfoList = gson.fromJson(inputPayload, type);
+        return  recordInfoList;
+    }
+}