diff --git a/funkwhale_network/db.py b/funkwhale_network/db.py
index 9553ea973c28c673d72f42b22e68d8fdb234f180..d98336783a1b1a265fe3293f57d410609d5361ef 100644
--- a/funkwhale_network/db.py
+++ b/funkwhale_network/db.py
@@ -118,15 +118,22 @@ async def get_stats(conn):
 
 
 def get_domain_query(**kwargs):
-    supported_fields = [
-        "up",
-        "open_registrations",
-        "federation_enabled",
-        "anonymous_can_listen",
-        "private",
-    ]
+    supported_fields = dict(
+        [
+            ("up", "up"),
+            ("open_registrations", "open_registrations"),
+            ("federation_enabled", "federation_enabled"),
+            ("anonymous_can_listen", "anonymous_can_listen"),
+            ("private", "private"),
+            ("blocked", "domains.blocked"),
+        ]
+    )
     base_query = "SELECT DISTINCT on (domain) domain, * FROM checks INNER JOIN domains ON checks.domain = domains.name{where_clause} ORDER BY domain, time DESC"
-    filters = [(key, value) for key, value in kwargs.items() if key in supported_fields]
+    filters = [
+        (supported_fields[key], value)
+        for key, value in kwargs.items()
+        if key in supported_fields
+    ]
     if not filters:
         return base_query.format(where_clause=""), []
 
diff --git a/funkwhale_network/routes.py b/funkwhale_network/routes.py
index 1a0a530858930b15fcdc938e49c45068897a8106..ba6a5fb4d4f6a9e487837d3eaf2fca3dee292f04 100644
--- a/funkwhale_network/routes.py
+++ b/funkwhale_network/routes.py
@@ -51,7 +51,9 @@ async def domains(request):
     if request.method == "GET":
         filters = await parser.parse(domain_filters, request)
         limit = filters.pop("limit", 0)
-        rows = await db.get_domains(request["conn"], private=False, **filters)
+        rows = await db.get_domains(
+            request["conn"], private=False, blocked=False, **filters
+        )
         total = len(rows)
         if limit:
             rows = rows[:limit]
diff --git a/tests/factories.py b/tests/factories.py
index 938c27c632be7497bf4b8f7c4d08446195b867fc..94bc6655a329ef9e588f37206368d409d900bf89 100644
--- a/tests/factories.py
+++ b/tests/factories.py
@@ -43,6 +43,7 @@ class DBFactory(factory.Factory):
 class DomainFactory(DBFactory):
     name = factory.Faker("domain_name")
     node_name = factory.Faker("paragraph")
+    blocked = False
 
 
 class CheckFactory(DBFactory):
diff --git a/tests/test_routes.py b/tests/test_routes.py
index fbe969819a44b9f1fbcf5d2af7465b427423f1a2..3c5fbc105f230320191ffa511e2f2e5b7eb08770 100644
--- a/tests/test_routes.py
+++ b/tests/test_routes.py
@@ -74,6 +74,24 @@ async def test_domains_get_filter_up(db_conn, client, factories, field, value):
     }
 
 
+async def test_domains_exclude_blocked(db_conn, client, factories):
+
+    blocked = await factories["Domain"].c(blocked=True)
+    await factories["Check"].c(private=False, domain=blocked["name"])
+    check = await factories["Check"].c(private=False)
+    domain = await db.get_domain(db_conn, check["domain"])
+    check["first_seen"] = domain["first_seen"]
+    check["node_name"] = domain["node_name"]
+    resp = await client.get("/api/domains")
+    assert resp.status == 200
+    assert await resp.json() == {
+        "count": 1,
+        "next": None,
+        "previous": None,
+        "results": [serializers.serialize_domain_from_check(check)],
+    }
+
+
 async def test_domains_create(client, coroutine_mock, mocker):
     payload = {"name": "test.domain"}
     mocker.patch("funkwhale_network.crawler.fetch_nodeinfo", coroutine_mock())