diff --git a/ee/app/services/ci/runners/send_usage_csv_service.rb b/ee/app/services/ci/runners/send_usage_csv_service.rb
index fdb0414d90a22d1cd3c2812179f4367594f9bcef..2a723c073120e506b4c8241581a64d611271e64d 100644
--- a/ee/app/services/ci/runners/send_usage_csv_service.rb
+++ b/ee/app/services/ci/runners/send_usage_csv_service.rb
@@ -21,6 +21,8 @@ def initialize(current_user:, runner_type:, from_date:, to_date:, max_project_co
       end
 
       def execute
+        Gitlab::InternalEvents.track_event('export_runner_usage_by_project_as_csv', user: @current_user)
+
         result = process_csv
         return result if result.error?
 
diff --git a/ee/config/events/export_runner_usage_by_project_as_csv.yml b/ee/config/events/export_runner_usage_by_project_as_csv.yml
new file mode 100644
index 0000000000000000000000000000000000000000..de840203fbb335e7f996acd64b8bf64a8d82db8e
--- /dev/null
+++ b/ee/config/events/export_runner_usage_by_project_as_csv.yml
@@ -0,0 +1,15 @@
+---
+description: Export runner usage as CSV
+category: InternalEventTracking
+action: export_runner_usage_by_project_as_csv
+identifiers:
+- user
+product_section: ci
+product_stage: verify
+product_group: runner
+milestone: '16.9'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142328
+distributions:
+- ee
+tiers:
+- ultimate
diff --git a/ee/config/metrics/counts_28d/count_total_export_runner_usage_by_project_as_csv_monthly.yml b/ee/config/metrics/counts_28d/count_total_export_runner_usage_by_project_as_csv_monthly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9fa5d1211b97e48d2e04caa7cf39d5aa9b56c05b
--- /dev/null
+++ b/ee/config/metrics/counts_28d/count_total_export_runner_usage_by_project_as_csv_monthly.yml
@@ -0,0 +1,23 @@
+---
+key_path: counts.count_total_export_runner_usage_by_project_as_csv_monthly
+description: Monthly count of Runner usage CSV report exports
+product_section: ci
+product_stage: verify
+product_group: runner
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '16.9'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142328
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- ultimate
+options:
+  events:
+  - export_runner_usage_by_project_as_csv
+events:
+- name: export_runner_usage_by_project_as_csv
diff --git a/ee/config/metrics/counts_7d/count_total_export_runner_usage_by_project_as_csv_weekly.yml b/ee/config/metrics/counts_7d/count_total_export_runner_usage_by_project_as_csv_weekly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..759b7dd865f3cd3ea0dcb8ac5e903109d2149e92
--- /dev/null
+++ b/ee/config/metrics/counts_7d/count_total_export_runner_usage_by_project_as_csv_weekly.yml
@@ -0,0 +1,23 @@
+---
+key_path: counts.count_total_export_runner_usage_by_project_as_csv_weekly
+description: Weekly count of Runner usage CSV report exports
+product_section: ci
+product_stage: verify
+product_group: runner
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '16.9'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/142328
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- ultimate
+options:
+  events:
+  - export_runner_usage_by_project_as_csv
+events:
+- name: export_runner_usage_by_project_as_csv
diff --git a/ee/spec/services/ci/runners/send_usage_csv_service_spec.rb b/ee/spec/services/ci/runners/send_usage_csv_service_spec.rb
index 44f3b7e643b85f1cbc9c1b0845afaf8fb0f7c0b7..2e9db724e7dd803998271066ffa6f398d6991de9 100644
--- a/ee/spec/services/ci/runners/send_usage_csv_service_spec.rb
+++ b/ee/spec/services/ci/runners/send_usage_csv_service_spec.rb
@@ -47,6 +47,13 @@
     expect(response.payload).to eq({ status: expected_status })
   end
 
+  it 'creates tracking event' do
+    expect(Gitlab::InternalEvents).to receive(:track_event)
+      .with('export_runner_usage_by_project_as_csv', user: current_user)
+
+    response
+  end
+
   it 'creates audit event' do
     expect(Gitlab::Audit::Auditor).to receive(:audit).with(
       a_hash_including(