diff --git a/app/controllers/explore/catalog_controller.rb b/app/controllers/explore/catalog_controller.rb
index 0c78c1fbdb8c9cfeddc268df450927cdeccff826..4bcddf367b242c9e7530ccd0832efd8481f2a530 100644
--- a/app/controllers/explore/catalog_controller.rb
+++ b/app/controllers/explore/catalog_controller.rb
@@ -2,8 +2,11 @@
 
 module Explore
   class CatalogController < Explore::ApplicationController
+    include ProductAnalyticsTracking
+
     feature_category :pipeline_composition
     before_action :check_resource_access, only: :show
+    track_internal_event :index, name: 'unique_users_visiting_ci_catalog'
 
     def show; end
 
@@ -20,5 +23,13 @@ def check_resource_access
     def catalog_resource
       ::Ci::Catalog::Listing.new(current_user).find_resource(full_path: params[:full_path])
     end
+
+    def tracking_namespace_source
+      current_user.namespace
+    end
+
+    def tracking_project_source
+      nil
+    end
   end
 end
diff --git a/config/events/unique_users_visiting_ci_catalog.yml b/config/events/unique_users_visiting_ci_catalog.yml
new file mode 100644
index 0000000000000000000000000000000000000000..f6abc839688f6c8de2b92fec833d0b798cbbac88
--- /dev/null
+++ b/config/events/unique_users_visiting_ci_catalog.yml
@@ -0,0 +1,24 @@
+---
+description: Unique self managed and .com users visiting CI/CD Catalog page count on monthly and weekly basis.
+category: InternalEventTracking
+action: unique_users_visiting_ci_catalog
+label_description:
+property_description:
+value_description:
+extra_properties:
+identifiers:
+product_section: ops
+product_stage: verify
+product_group: pipeline_authoring
+milestone: "16.7"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137564
+distributions:
+- ce
+- ee
+tiers:
+- free
+- premium
+- ultimate
+events:
+  - name: unique_users_visiting_ci_catalog
+    unique: user.id
diff --git a/config/metrics/counts_28d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_28d.yml b/config/metrics/counts_28d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_28d.yml
new file mode 100644
index 0000000000000000000000000000000000000000..45e3b6fdb8c41d9922b9bbd7e21446f2f2af90d3
--- /dev/null
+++ b/config/metrics/counts_28d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_28d.yml
@@ -0,0 +1,28 @@
+---
+key_path: redis_hll_counters.pipeline_authoring.unique_users_visiting_ci_catalog_monthly
+description: Unique self managed and .com users visiting CI/CD Catalog page monthly count.
+product_section: ops
+product_stage: verify
+product_group: pipeline_authoring
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: "16.7"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137564
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+instrumentation_class: RedisHLLMetric
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+options:
+  events:
+    - unique_users_visiting_ci_catalog
+events:
+  - name: unique_users_visiting_ci_catalog
+    unique: user.id
diff --git a/config/metrics/counts_7d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_7d.yml b/config/metrics/counts_7d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_7d.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1709265b9cefc95883cd36cb9448bcabb1c4205d
--- /dev/null
+++ b/config/metrics/counts_7d/count_distinct_user_id_from_unique_users_visiting_ci_catalog_7d.yml
@@ -0,0 +1,28 @@
+---
+key_path: redis_hll_counters.pipeline_authoring.unique_users_visiting_ci_catalog_weekly
+description: Unique self managed and .com users visiting CI/CD Catalog page weekly count.
+product_section: ops
+product_stage: verify
+product_group: pipeline_authoring
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: "16.7"
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/137564
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+instrumentation_class: RedisHLLMetric
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+options:
+  events:
+    - unique_users_visiting_ci_catalog
+events:
+  - name: unique_users_visiting_ci_catalog
+    unique: user.id
diff --git a/spec/requests/explore/catalog_controller_spec.rb b/spec/requests/explore/catalog_controller_spec.rb
index 051379c9641c2952255789a5b0c3ba933ace2afd..e75b0bba5a63aeb0b2b596a68e14983e898ab6df 100644
--- a/spec/requests/explore/catalog_controller_spec.rb
+++ b/spec/requests/explore/catalog_controller_spec.rb
@@ -3,7 +3,10 @@
 require 'spec_helper'
 
 RSpec.describe Explore::CatalogController, feature_category: :pipeline_composition do
-  let_it_be(:catalog_resource) { create(:ci_catalog_resource, state: :published) }
+  let_it_be(:namespace) { create(:group) }
+  let_it_be(:project) { create(:project, namespace: namespace) }
+  let_it_be(:catalog_resource) { create(:ci_catalog_resource, :published, project: project) }
+
   let_it_be(:user) { create(:user) }
 
   before_all do
@@ -34,17 +37,33 @@
     it_behaves_like 'basic get requests', :show
 
     context 'when rendering a draft catalog resource' do
-      it 'responds with 404' do
-        catalog_resource = create(:ci_catalog_resource, state: :draft)
+      it 'returns not found error' do
+        draft_catalog_resource = create(:ci_catalog_resource, state: :draft)
 
-        get explore_catalog_path(catalog_resource)
+        get explore_catalog_path(draft_catalog_resource)
 
         expect(response).to have_gitlab_http_status(:not_found)
       end
     end
+
+    context 'when rendering a published catalog resource' do
+      it 'returns success response' do
+        get explore_catalog_path(catalog_resource)
+
+        expect(response).to have_gitlab_http_status(:success)
+      end
+    end
   end
 
   describe 'GET #index' do
+    let(:subject) { get explore_catalog_index_path }
+
     it_behaves_like 'basic get requests', :index
+
+    it_behaves_like 'internal event tracking' do
+      let(:namespace) { user.namespace }
+      let(:project) { nil }
+      let(:event) { 'unique_users_visiting_ci_catalog' }
+    end
   end
 end