diff --git a/src/metabase/lib/core.cljc b/src/metabase/lib/core.cljc
index c7b14fd4af1b143093618269a1ec9cf223e080d7..84e9d27780de7a6af2e8b673fec4dd3e997db315 100644
--- a/src/metabase/lib/core.cljc
+++ b/src/metabase/lib/core.cljc
@@ -256,6 +256,7 @@
  [lib.query
   can-run
   query
+  stage-count
   with-different-table]
  [lib.ref
   ref]
diff --git a/src/metabase/lib/js.cljs b/src/metabase/lib/js.cljs
index d70db5d2597b9f995099372ad991f7994d976403..f7e09b1d4ac0671bc3d48d2337efd2c19260b008 100644
--- a/src/metabase/lib/js.cljs
+++ b/src/metabase/lib/js.cljs
@@ -996,3 +996,8 @@
     offset-n
     (some-> offset-unit keyword)
     (js->clj options :keywordize-keys true)))
+
+(defn ^:export stage-count
+  "Returns the count of stages in query"
+  [a-query]
+  (lib.core/stage-count a-query))
diff --git a/src/metabase/lib/query.cljc b/src/metabase/lib/query.cljc
index 6d0e7cd037f3a294ae9e303c4b655616e28786c2..7fddf5f2afb0d90808b4adfb4d36c3848b548572 100644
--- a/src/metabase/lib/query.cljc
+++ b/src/metabase/lib/query.cljc
@@ -11,6 +11,7 @@
    [metabase.lib.metadata.calculation :as lib.metadata.calculation]
    [metabase.lib.normalize :as lib.normalize]
    [metabase.lib.schema :as lib.schema]
+   [metabase.lib.schema.common :as lib.schema.common]
    [metabase.lib.schema.id :as lib.schema.id]
    [metabase.lib.util :as lib.util]
    [metabase.mbql.util :as mbql.u]
@@ -39,6 +40,11 @@
   [query stage-number x style]
   (lib.metadata.calculation/display-name query stage-number (lib.util/query-stage x stage-number) style))
 
+(mu/defn stage-count :- ::lib.schema.common/int-greater-than-or-equal-to-zero
+  "Returns the count of stages in query"
+  [query :- ::lib.schema/query]
+  (count (:stages query)))
+
 (defmulti can-run-method
   "Returns whether the query is runnable based on first stage :lib/type"
   (fn [query]
diff --git a/test/metabase/lib/query_test.cljc b/test/metabase/lib/query_test.cljc
index 52cb656e933b805fc2224e8940f3d6eb5489ac79..8cdea441e246246ca0601e725dc8c64f547b22e8 100644
--- a/test/metabase/lib/query_test.cljc
+++ b/test/metabase/lib/query_test.cljc
@@ -90,3 +90,8 @@
                                                  "CC"]]]}]}]}
 
               (lib/query meta/metadata-provider converted-query))))))
+
+(deftest ^:parallel stage-count-test
+  (is (= 1 (lib/stage-count lib.tu/venues-query)))
+  (is (= 2 (lib/stage-count (lib/append-stage lib.tu/venues-query))))
+  (is (= 3 (lib/stage-count (lib/append-stage (lib/append-stage lib.tu/venues-query))))))