diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index 67addb8a1ec4f5746158a9591d0a55565db0d592..544f34b050b9481273b0e3192f81d637e37332e8 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -1692,6 +1692,8 @@ def transform_ims_data(data):
 
     services_by_type = {}
     interface_services = defaultdict(list)
+    # using a dict to ensure no duplicates
+    node_pair_services = defaultdict(dict)
 
     for key, value in port_id_details.items():
         for details in value:
@@ -1723,13 +1725,18 @@ def transform_ims_data(data):
                 type_services = services_by_type.setdefault(
                     ims_sorted_service_type_key(circ['service_type']), dict())
                 type_services[circ['id']] = circ
+                if circ['other_end_equipment']:
+                    node_pair_services[
+                        f"{circ['equipment']}/{circ['other_end_equipment']}"
+                    ][circ['id']] = circ
 
-            interface_services[k].extend(circuits)
+        interface_services[k].extend(circuits)
 
     return {
         'hierarchy': hierarchy,
         'interface_services': interface_services,
-        'services_by_type': services_by_type
+        'services_by_type': services_by_type,
+        'node_pair_services': node_pair_services
     }
 
 
@@ -1740,6 +1747,7 @@ def persist_ims_data(data, use_current=False):
     lg_routers = data['lg_routers']
     interface_services = data['interface_services']
     services_by_type = data['services_by_type']
+    node_pair_services = data['node_pair_services']
 
     if use_current:
         r = get_current_redis(InventoryTask.config)
@@ -1752,7 +1760,8 @@ def persist_ims_data(data, use_current=False):
             'ims:circuit_hierarchy:*',
             'ims:interface_services:*',
             'ims:access_services:*',
-            'ims:gws_indirect:*'
+            'ims:gws_indirect:*',
+            'ims:node_pair_services:*'
         ]:
             rp = r.pipeline()
             for k in r.scan_iter(key_pattern, count=1000):
@@ -1778,6 +1787,13 @@ def persist_ims_data(data, use_current=False):
             f'ims:interface_services:{k}',
             json.dumps(v))
     rp.execute()
+    rp = r.pipeline()
+    for k, v in node_pair_services.items():
+        rp.set(
+            f'ims:node_pair_services:{k}',
+            json.dumps(list(v.values())))
+    rp.execute()
+
     rp = r.pipeline()
 
     populate_poller_cache(interface_services, r)