diff --git a/lib/plausible/stats/base.ex b/lib/plausible/stats/base.ex
index 5db177499c755be12841b8578f641912e513dc83..fae213a832e357bc3aa47527c597b5e0983b7836 100644
--- a/lib/plausible/stats/base.ex
+++ b/lib/plausible/stats/base.ex
@@ -155,6 +155,9 @@ defmodule Plausible.Stats.Base do
   end
 
   defp db_prop_val("referrer_source", @no_ref), do: ""
+  defp db_prop_val("utm_medium", @no_ref), do: ""
+  defp db_prop_val("utm_source", @no_ref), do: ""
+  defp db_prop_val("utm_campaign", @no_ref), do: ""
   defp db_prop_val(_, val), do: val
 
   defp goal_type(query) do
diff --git a/lib/plausible_web/controllers/api/stats_controller.ex b/lib/plausible_web/controllers/api/stats_controller.ex
index 4b4b44bc7713ebd80c956208845e90c384533073..5c93ae07c5864e9e091578aa66e833cb658eb831 100644
--- a/lib/plausible_web/controllers/api/stats_controller.ex
+++ b/lib/plausible_web/controllers/api/stats_controller.ex
@@ -186,7 +186,7 @@ defmodule PlausibleWeb.Api.StatsController do
     query =
       Query.from(site.timezone, params)
       |> Filters.add_prefix()
-      |> maybe_hide_noref(params)
+      |> maybe_hide_noref("visit:source", params)
 
     pagination = parse_pagination(params)
 
@@ -202,9 +202,13 @@ defmodule PlausibleWeb.Api.StatsController do
 
   def utm_mediums(conn, params) do
     site = conn.assigns[:site]
-    query = Query.from(site.timezone, params)
+
+    query =
+      Query.from(site.timezone, params)
+      |> Filters.add_prefix()
+      |> maybe_hide_noref("visit:utm_medium", params)
+
     pagination = parse_pagination(params)
-    show_noref = params["show_noref"] == "true"
     metrics = ["visitors", "bounce_rate", "visit_duration"]
 
     res =
@@ -216,9 +220,13 @@ defmodule PlausibleWeb.Api.StatsController do
 
   def utm_campaigns(conn, params) do
     site = conn.assigns[:site]
-    query = Query.from(site.timezone, params)
+
+    query =
+      Query.from(site.timezone, params)
+      |> Filters.add_prefix()
+      |> maybe_hide_noref("visit:utm_campaign", params)
+
     pagination = parse_pagination(params)
-    show_noref = params["show_noref"] == "true"
     metrics = ["visitors", "bounce_rate", "visit_duration"]
 
     res =
@@ -230,9 +238,13 @@ defmodule PlausibleWeb.Api.StatsController do
 
   def utm_sources(conn, params) do
     site = conn.assigns[:site]
-    query = Query.from(site.timezone, params)
+
+    query =
+      Query.from(site.timezone, params)
+      |> Filters.add_prefix()
+      |> maybe_hide_noref("visit:utm_source", params)
+
     pagination = parse_pagination(params)
-    show_noref = params["show_noref"] == "true"
     metrics = ["visitors", "bounce_rate", "visit_duration"]
 
     res =
@@ -531,10 +543,10 @@ defmodule PlausibleWeb.Api.StatsController do
     end)
   end
 
-  defp maybe_hide_noref(query, params) do
+  defp maybe_hide_noref(query, property, params) do
     cond do
-      is_nil(query.filters["visit:source"]) and params["show_noref"] != "true" ->
-        new_filters = Map.put(query.filters, "visit:source", {:is_not, "Direct / None"})
+      is_nil(query.filters[property]) and params["show_noref"] != "true" ->
+        new_filters = Map.put(query.filters, property, {:is_not, "Direct / None"})
         %Query{query | filters: new_filters}
 
       true ->