diff --git a/api/funkwhale_api/audio/filters.py b/api/funkwhale_api/audio/filters.py
index 3a8da5ca7f66e07e8dbd3552a8a7822f7758cb22..6b1a9e8d94c28da47682600ed908b1df5f514ac4 100644
--- a/api/funkwhale_api/audio/filters.py
+++ b/api/funkwhale_api/audio/filters.py
@@ -4,6 +4,7 @@ import django_filters
 
 from funkwhale_api.common import fields
 from funkwhale_api.common import filters as common_filters
+from funkwhale_api.federation import actors
 from funkwhale_api.moderation import filters as moderation_filters
 
 from . import models
@@ -28,6 +29,7 @@ class ChannelFilter(moderation_filters.HiddenContentFilterSet):
     subscribed = django_filters.BooleanFilter(
         field_name="_", method="filter_subscribed"
     )
+    external = django_filters.BooleanFilter(field_name="_", method="filter_external")
     ordering = django_filters.OrderingFilter(
         # tuple-mapping retains order
         fields=(
@@ -38,7 +40,7 @@ class ChannelFilter(moderation_filters.HiddenContentFilterSet):
 
     class Meta:
         model = models.Channel
-        fields = ["q", "scope", "tag", "subscribed", "ordering"]
+        fields = ["q", "scope", "tag", "subscribed", "ordering", "external"]
         hidden_content_fields_mapping = moderation_filters.USER_FILTER_CONFIG["CHANNEL"]
 
     def filter_subscribed(self, queryset, name, value):
@@ -56,6 +58,18 @@ class ChannelFilter(moderation_filters.HiddenContentFilterSet):
         else:
             return queryset.exclude(query)
 
+    def filter_external(self, queryset, name, value):
+        query = Q(
+            attributed_to=actors.get_service_actor(),
+            actor__preferred_username__startswith="rssfeed-",
+        )
+        if value is True:
+            queryset = queryset.filter(query)
+        if value is False:
+            queryset = queryset.exclude(query)
+
+        return queryset
+
 
 class IncludeChannelsFilterSet(django_filters.FilterSet):
     """
diff --git a/api/tests/audio/test_filters.py b/api/tests/audio/test_filters.py
index c0cb9caa4cf2ab3a151d8926440a01a03e2e8f04..d7a0a79800e6559f9272e0d0f42027d6a719e8ad 100644
--- a/api/tests/audio/test_filters.py
+++ b/api/tests/audio/test_filters.py
@@ -1,3 +1,5 @@
+import pytest
+
 from funkwhale_api.audio import filters
 from funkwhale_api.audio import models
 
@@ -30,3 +32,17 @@ def test_channel_filter_subscribed_false(factories, mocker, queryset_equal_list)
     )
 
     assert filterset.qs == [other_channel]
+
+
+@pytest.mark.parametrize("external, expected_index", [("true", 0), ("false", 1)])
+def test_channel_filter_external(
+    external, expected_index, factories, mocker, queryset_equal_list
+):
+    user = factories["users.User"](with_actor=True)
+    channels = [factories["audio.Channel"](external=True), factories["audio.Channel"]()]
+    qs = models.Channel.objects.all()
+    filterset = filters.ChannelFilter(
+        {"external": external}, request=mocker.Mock(user=user), queryset=qs
+    )
+
+    assert filterset.qs == [channels[expected_index]]
diff --git a/front/src/components/library/Home.vue b/front/src/components/library/Home.vue
index 15f505f842609a8885fa79a8b4a420ee2580572b..20df9429ad82d48681d03e1a84dae52a3cbe6ae2 100644
--- a/front/src/components/library/Home.vue
+++ b/front/src/components/library/Home.vue
@@ -30,7 +30,7 @@
         <h3 class="ui header" >
           <translate translate-context="*/*/*">New channels</translate>
         </h3>
-        <channels-widget :show-modification-date="true" :limit="12" :filters="{ordering: '-creation_date'}"></channels-widget>
+        <channels-widget :show-modification-date="true" :limit="12" :filters="{ordering: '-creation_date', external: 'false'}"></channels-widget>
       </template>