diff --git a/guest/hals/sensors/sensors.cpp b/guest/hals/sensors/sensors.cpp
index eb1dda6..609606c 100644
--- a/guest/hals/sensors/sensors.cpp
+++ b/guest/hals/sensors/sensors.cpp
@@ -195,4 +195,17 @@
                     flags);
 }
 
+SensorInfo StepCounterSensor() {
+  uint32_t flags = sc::kStepCounterReportingMode |
+      (sc::kStepCounterIsWakeup ? SENSOR_FLAG_WAKE_UP : 0);
+
+  return SensorInfo(sc::kStepCounterName, sc::kVendor, sc::kVersion,
+                    sc::kStepCounterHandle, SENSOR_TYPE_STEP_COUNTER,
+                    sc::kStepCounterMaxRange, sc::kStepCounterResolution,
+                    sc::kStepCounterPower, sc::kStepCounterMinDelay,
+                    sc::kFifoReservedEventCount, sc::kFifoMaxEventCount,
+                    sc::kStepCounterStringType, sc::kRequiredPermission,
+                    sc::kMaxDelay, flags);
+}
+
 }  // namespace cvd
diff --git a/guest/hals/sensors/sensors.h b/guest/hals/sensors/sensors.h
index c4305ce..c94b14f 100644
--- a/guest/hals/sensors/sensors.h
+++ b/guest/hals/sensors/sensors.h
@@ -47,6 +47,7 @@
   friend SensorInfo AmbientTempSensor();
   friend SensorInfo DeviceTempSensor();
   friend SensorInfo RelativeHumiditySensor();
+  friend SensorInfo StepCounterSensor();
 };
 
 SensorInfo AccelerometerSensor();
@@ -58,6 +59,7 @@
 SensorInfo AmbientTempSensor();
 SensorInfo DeviceTempSensor();
 SensorInfo RelativeHumiditySensor();
+SensorInfo StepCounterSensor();
 
 // Stores the current state of a sensor.
 class SensorState {
@@ -111,6 +113,7 @@
 const char kAmbientTempName[] = "ambient_temp";
 const char kDeviceTempName[] = "device_temp";
 const char kRelativeHumidityName[] = "relative_humidity";
+const char kStepCounterName[] = "step_counter";
 
 // Handle that identifies the sensor. This is used as an array index,
 // so must be unique in the range [0, # sensors)
@@ -124,6 +127,7 @@
 const int kAmbientTempHandle = 6;
 const int kDeviceTempHandle = 7;
 const int kRelativeHumidityHandle = 8;
+const int kStepCounterHandle = 9;
 
 // For continuous sensors, minimum sample period (in microseconds).
 // On-Change (0), One-shot (-1), and special (0).
@@ -136,6 +140,7 @@
 const int32_t kAmbientTempMinDelay = 4444;
 const int32_t kDeviceTempMinDelay = 4444;
 const int32_t kRelativeHumidityMinDelay = 4444;
+const int32_t kStepCounterMinDelay = 0;
 
 // Maximum range of this sensor's value in SI units.
 const float kAccelerometerMaxRange = 39.226593f;
@@ -147,6 +152,7 @@
 const float kAmbientTempMaxRange = 80.0f;
 const float kDeviceTempMaxRange = 80.0f;
 const float kRelativeHumidityMaxRange = 100;
+const float kStepCounterMaxRange = 1.0f;
 
 // Smallest difference between two values reported by this sensor.
 const float kAccelerometerResolution = 0.45f;
@@ -158,6 +164,7 @@
 const float kAmbientTempResolution = 1.0f;
 const float kDeviceTempResolution = 1.0f;
 const float kRelativeHumidityResolution = 1.0f;
+const float kStepCounterResolution = 1.0f;
 
 // Rough estimate of this sensor's power consumption in mA.
 const float kAccelerometerPower = 0.45f;
@@ -169,6 +176,7 @@
 const float kAmbientTempPower = 1.0f;
 const float kDeviceTempPower = 1.0f;
 const float kRelativeHumidityPower = 1.0f;
+const float kStepCounterPower = 0.1f;
 
 // Type of this sensor, represented as a string.
 
@@ -182,6 +190,7 @@
 const char kAmbientTempStringType[] = SENSOR_STRING_TYPE_AMBIENT_TEMPERATURE;
 const char kDeviceTempStringType[] = SENSOR_STRING_TYPE_TEMPERATURE;
 const char kRelativeHumidityStringType[] = SENSOR_STRING_TYPE_RELATIVE_HUMIDITY;
+const char kStepCounterStringType[] = SENSOR_STRING_TYPE_STEP_COUNTER;
 #else
 const char kAccelerometerStringType[] = "";
 const char kGyroscopeStringType[] = "";
@@ -192,6 +201,7 @@
 const char kAmbientTempStringType[] = "";
 const char kDeviceTempStringType[] = "";
 const char kRelativeHumidityStringType[] = "";
+const char kStepCounterStringType[] = "";
 #endif
 
 #if VSOC_SENSORS_DEVICE_API_VERSION_ATLEAST(1_3)
@@ -204,6 +214,7 @@
 const uint32_t kAmbientTempReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 const uint32_t kDeviceTempReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 const uint32_t kRelativeHumidityReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
+const uint32_t kStepCounterReportingMode = SENSOR_FLAG_ON_CHANGE_MODE;
 #else
 const uint32_t kAccelerometerReportingMode = 0;
 const uint32_t kGyroscopeReportingMode = 0;
@@ -214,6 +225,7 @@
 const uint32_t kAmbientTempReportingMode = 0;
 const uint32_t kDeviceTempReportingMode = 0;
 const uint32_t kRelativeHumidityReportingMode = 0;
+const uint32_t kStepCounterReportingMode = 0;
 #endif
 
 const bool kAccelerometerIsWakeup = false;
@@ -225,6 +237,7 @@
 const bool kAmbientTempIsWakeup = false;
 const bool kDeviceTempIsWakeup = false;
 const bool kRelativeHumidityIsWakeup = false;
+const bool kStepCounterIsWakeup = false;
 
 }  // namespace sensors_constants
 }  // namespace cvd
diff --git a/guest/hals/sensors/vsoc_sensors.cpp b/guest/hals/sensors/vsoc_sensors.cpp
index 336cd65..f318ec6 100644
--- a/guest/hals/sensors/vsoc_sensors.cpp
+++ b/guest/hals/sensors/vsoc_sensors.cpp
@@ -491,7 +491,7 @@
   if (total_sensor_count_ != -1) {
     return -1;
   }
-  total_sensor_count_ = 9;
+  total_sensor_count_ = 10;
   sensor_infos_ = new SensorInfo[total_sensor_count_];
   sensor_infos_[sensors_constants::kAccelerometerHandle] =
       AccelerometerSensor();
@@ -505,6 +505,7 @@
   sensor_infos_[sensors_constants::kDeviceTempHandle] = DeviceTempSensor();
   sensor_infos_[sensors_constants::kRelativeHumidityHandle] =
       RelativeHumiditySensor();
+  sensor_infos_[sensors_constants::kStepCounterHandle] = StepCounterSensor();
   int i;
   for (i = 0; i < total_sensor_count_; i++) {
     D("Found sensor %s with handle %d", sensor_infos_[i].name,
