diff --git a/inventory_provider/routes/classifier.py b/inventory_provider/routes/classifier.py
index cff87797f0bf6281c9116f9c1a5750df26f558cd..49192830307e136b7ab774e694fcc6dedc11ffa6 100644
--- a/inventory_provider/routes/classifier.py
+++ b/inventory_provider/routes/classifier.py
@@ -61,7 +61,7 @@ import re
 from functools import lru_cache
 from typing import Iterable, List, Optional
 
-from flask import Blueprint, Response, jsonify, request
+from flask import Blueprint, Response, request
 from redis import Redis
 
 from inventory_provider.routes import common
@@ -1158,14 +1158,22 @@ def _get_coriant_info(
 @common.require_accepts_json
 def get_all_routers() -> Response:
     redis = common.get_current_redis()
+    result = cache_result(
+        "classifier-cache:router:list",
+        func=functools.partial(_get_router_list, redis),
+        redis=redis,
+    )
+    return Response(result, mimetype="application/json")
+
+
+def _get_router_list(redis):
     all_routers_raw = redis.get("netdash")
     all_routers = json.loads(all_routers_raw) if all_routers_raw else {}
-    return jsonify(
-        [
-            {"hostname": hostname, "vendor": vendor}
-            for hostname, vendor in all_routers.items()
-        ]
-    )
+    return [
+        {"hostname": hostname, "vendor": vendor}
+        for hostname, vendor in all_routers.items()
+        if get_ims_equipment_name_or_none(hostname)
+    ]
 
 
 @routes.route("/router-info/<equipment_name>", methods=["GET"])
diff --git a/test/test_classifier_routes.py b/test/test_classifier_routes.py
index a3f485d8eb2a268f996e1ac71d7f09c903f2ce5a..fbeeaae12f3418e1b586db00f211921f363038c7 100644
--- a/test/test_classifier_routes.py
+++ b/test/test_classifier_routes.py
@@ -236,6 +236,22 @@ def test_router_info_all_routers(client):
     jsonschema.validate(result, ROUTER_INFO_ALL_ROUTERS_RESPONSE_SCHEMA)
     assert len(result) > 0
 
+def test_router_info_all_routers(client, mocked_redis):
+    rv = client.get("/classifier/router-info", headers=DEFAULT_REQUEST_HEADERS)
+    assert rv.status_code == 200
+    assert rv.is_json
+    result = rv.json
+
+    jsonschema.validate(result, ROUTER_INFO_ALL_ROUTERS_RESPONSE_SCHEMA)
+    assert len(result) > 0
+
+def test_all_routers_skips_routers_not_in_ims(client, mocked_redis):
+    all_routers = json.loads(mocked_redis.get('netdash'))
+    all_routers['invalid.router'] = 'juniper'
+    mocked_redis.set('netdash', json.dumps(all_routers))
+    result = client.get("/classifier/router-info", headers=DEFAULT_REQUEST_HEADERS).json
+
+    assert not any(r['hostname'] == 'invalid.router' for r in result)
 
 @pytest.mark.parametrize("router", ["mx1.ams.nl", "mx1.ams.nl.geant.net"])
 def test_router_info(client, router):
@@ -250,6 +266,7 @@ def test_router_info(client, router):
     assert len(result['contacts']) > 0
 
 
+
 def test_router_info_caches_result(client, mocked_redis):
     router = "mx1.ams.nl"
     cache_key = f"classifier-cache:router:{router.upper()}"