diff --git a/phosphor-regulators/src/actions/compare_presence_action.hpp b/phosphor-regulators/src/actions/compare_presence_action.hpp
new file mode 100644
index 0000000..b2c7880
--- /dev/null
+++ b/phosphor-regulators/src/actions/compare_presence_action.hpp
@@ -0,0 +1,122 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action.hpp"
+#include "action_environment.hpp"
+
+#include <ios>
+#include <sstream>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class ComparePresenceAction
+ *
+ * Compares a hardware component's presence to an expected value.
+ *
+ * Implements the compare_presence action in the JSON config file.
+ */
+class ComparePresenceAction : public Action
+{
+  public:
+    // Specify which compiler-generated methods we want
+    ComparePresenceAction() = delete;
+    ComparePresenceAction(const ComparePresenceAction&) = delete;
+    ComparePresenceAction(ComparePresenceAction&&) = delete;
+    ComparePresenceAction& operator=(const ComparePresenceAction&) = delete;
+    ComparePresenceAction& operator=(ComparePresenceAction&&) = delete;
+    virtual ~ComparePresenceAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param fru Field-Replaceable Unit (FRU)
+     * @param value Expected presence value
+     */
+    explicit ComparePresenceAction(const std::string& fru, bool value) :
+        fru{fru}, value{value}
+    {
+    }
+
+    /**
+     * Executes this action.
+     *
+     * TODO: Not implemented yet
+     *
+     * @param environment Action execution environment.
+     * @return true
+     */
+    virtual bool execute(ActionEnvironment& /* environment */) override
+    {
+        // TODO: Not implemented yet
+        return true;
+    }
+
+    /**
+     * Returns the Field-Replaceable Unit (FRU).
+     *
+     * @return FRU
+     */
+    const std::string& getFRU() const
+    {
+        return fru;
+    }
+
+    /**
+     * Returns the expected presence value.
+     *
+     * @return value
+     */
+    bool getValue() const
+    {
+        return value;
+    }
+
+    /**
+     * Returns a string description of this action.
+     *
+     * @return description of action
+     */
+    virtual std::string toString() const override
+    {
+        std::ostringstream ss;
+        ss << "compare_presence: { ";
+
+        ss << "fru: " << fru << ", ";
+
+        ss << "value: " << std::boolalpha << value << " }";
+
+        return ss.str();
+    }
+
+  private:
+    /**
+     * Field-Replaceable Unit (FRU) for this action.
+     *
+     * Specify the D-Bus inventory path of the FRU.
+     */
+    const std::string fru{};
+
+    /**
+     * Expected presence value.
+     */
+    const bool value{};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/test/actions/compare_presence_action_tests.cpp b/phosphor-regulators/test/actions/compare_presence_action_tests.cpp
new file mode 100644
index 0000000..e290a0f
--- /dev/null
+++ b/phosphor-regulators/test/actions/compare_presence_action_tests.cpp
@@ -0,0 +1,61 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "action.hpp"
+#include "action_environment.hpp"
+#include "compare_presence_action.hpp"
+#include "id_map.hpp"
+#include "mock_action.hpp"
+
+#include <exception>
+#include <memory>
+#include <stdexcept>
+#include <utility>
+
+#include <gtest/gtest.h>
+
+using namespace phosphor::power::regulators;
+
+TEST(ComparePresenceActionTests, Constructor)
+{
+    ComparePresenceAction action{"/system/chassis/motherboard/cpu3", true};
+    EXPECT_EQ(action.getFRU(), "/system/chassis/motherboard/cpu3");
+    EXPECT_EQ(action.getValue(), true);
+}
+
+TEST(ComparePresenceActionTests, Execute)
+{
+    // TODO: Not implemented yet
+}
+
+TEST(ComparePresenceActionTests, GetFRU)
+{
+    ComparePresenceAction action{"/system/chassis/motherboard/cpu2", true};
+    EXPECT_EQ(action.getFRU(), "/system/chassis/motherboard/cpu2");
+}
+
+TEST(ComparePresenceActionTests, GetValue)
+{
+    ComparePresenceAction action{"/system/chassis/motherboard/cpu3", false};
+    EXPECT_EQ(action.getValue(), false);
+}
+
+TEST(ComparePresenceActionTests, ToString)
+{
+    ComparePresenceAction action{"/system/chassis/motherboard/cpu2", true};
+    EXPECT_EQ(action.toString(),
+              "compare_presence: { fru: /system/chassis/motherboard/cpu2, "
+              "value: true }");
+}
diff --git a/phosphor-regulators/test/meson.build b/phosphor-regulators/test/meson.build
index 242c02a..9102622 100644
--- a/phosphor-regulators/test/meson.build
+++ b/phosphor-regulators/test/meson.build
@@ -25,6 +25,7 @@
     'actions/action_error_tests.cpp',
     'actions/action_utils_tests.cpp',
     'actions/and_action_tests.cpp',
+    'actions/compare_presence_action_tests.cpp',
     'actions/i2c_action_tests.cpp',
     'actions/i2c_compare_bit_action_tests.cpp',
     'actions/i2c_compare_byte_action_tests.cpp',
