diff --git a/program/filters.py b/program/filters.py
index f530bf1de61e0a58503cd3333276baa0b2e97c40..dd78807b349560f02edef2e84c559840ed1c2ae7 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -71,6 +71,16 @@ class ShowOrderingFilter(filters.OrderingFilter):
         return qs.order_by(*ordering)
 
 
+class DefaultFilterSet(filters.FilterSet):
+    ids = IntegerInFilter(
+        field_name="id",
+        help_text="Return only entities matching the specified id(s).",
+    )
+
+    class Meta:
+        fields = ("ids",)
+
+
 class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
     ids = IntegerInFilter(
         field_name="id",
@@ -408,3 +418,14 @@ class ImageFilterSet(filters.FilterSet):
 
     class Meta:
         fields = ("ids",)
+
+
+class ProfileFilterSet(DefaultFilterSet):
+    is_show_host = StaticQueryBooleanFilter(
+        query=Exists(models.Show.objects.filter(hosts=OuterRef("pk"))),
+        label="Is show host",
+        help_text="Return only profiles that are hosts of a show.",
+    )
+
+    class Meta:
+        fields = DefaultFilterSet.Meta.fields + ("is_show_host",)
diff --git a/program/views.py b/program/views.py
index 96393ecaf53896811c2dfed1e40bd8493925276b..18cbdef3621bc5b95daad09e62182b2f99cb51d0 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1554,7 +1554,8 @@ class APIProfileViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
     queryset = Profile.objects.all().order_by("-is_active", "name")
     serializer_class = ProfileSerializer
     pagination_class = LimitOffsetPagination
-    filter_backends = [drf_filters.SearchFilter]
+    filter_backends = [DjangoFilterBackend, drf_filters.SearchFilter]
+    filterset_class = filters.ProfileFilterSet
     search_fields = ["name", "email"]
 
     def get_serializer_context(self):