diff --git a/phosphor-regulators/src/actions/compare_vpd_action.hpp b/phosphor-regulators/src/actions/compare_vpd_action.hpp
new file mode 100644
index 0000000..7dc5136
--- /dev/null
+++ b/phosphor-regulators/src/actions/compare_vpd_action.hpp
@@ -0,0 +1,139 @@
+/**
+ * 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 <sstream>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class CompareVPDAction
+ *
+ * Compares a VPD (Vital Product Data) keyword value to an expected value.
+ *
+ * Implements the compare_vpd action in the JSON config file.
+ */
+class CompareVPDAction : public Action
+{
+  public:
+    // Specify which compiler-generated methods we want
+    CompareVPDAction() = delete;
+    CompareVPDAction(const CompareVPDAction&) = delete;
+    CompareVPDAction(CompareVPDAction&&) = delete;
+    CompareVPDAction& operator=(const CompareVPDAction&) = delete;
+    CompareVPDAction& operator=(CompareVPDAction&&) = delete;
+    virtual ~CompareVPDAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param fru Field-Replaceable Unit (FRU). Specify the D-Bus inventory path
+     *            of the FRU.
+     * @param keyword VPD keyword. Specify one of the following: "CCIN",
+     *                "Manufacturer", "Model", "PartNumber".
+     * @param value Expected value
+     */
+    explicit CompareVPDAction(const std::string& fru,
+                              const std::string& keyword,
+                              const std::string& value) :
+        fru{fru},
+        keyword{keyword}, 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 VPD keyword.
+     *
+     * @return keyword
+     */
+    const std::string& getKeyword() const
+    {
+        return keyword;
+    }
+
+    /**
+     * Returns the expected value.
+     *
+     * @return value
+     */
+    const std::string& 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_vpd: { ";
+        ss << "fru: " << fru << ", ";
+        ss << "keyword: " << keyword << ", ";
+        ss << "value: " << value << " }";
+
+        return ss.str();
+    }
+
+  private:
+    /**
+     * Field-Replaceable Unit (FRU) that contains the VPD.
+     */
+    const std::string fru{};
+
+    /**
+     * VPD keyword.
+     */
+    const std::string keyword{};
+
+    /**
+     * Expected value.
+     */
+    const std::string value{};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
new file mode 100644
index 0000000..8ae721b
--- /dev/null
+++ b/phosphor-regulators/test/actions/compare_vpd_action_tests.cpp
@@ -0,0 +1,66 @@
+/**
+ * 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_environment.hpp"
+#include "compare_vpd_action.hpp"
+#include "id_map.hpp"
+
+#include <exception>
+#include <memory>
+#include <stdexcept>
+#include <utility>
+
+#include <gtest/gtest.h>
+
+using namespace phosphor::power::regulators;
+
+TEST(CompareVPDActionTests, Constructor)
+{
+    CompareVPDAction action{"/system/chassis/disk_backplane", "CCIN", "2D35"};
+    EXPECT_EQ(action.getFRU(), "/system/chassis/disk_backplane");
+    EXPECT_EQ(action.getKeyword(), "CCIN");
+    EXPECT_EQ(action.getValue(), "2D35");
+}
+
+TEST(CompareVPDActionTests, Execute)
+{
+    // TODO: Not implemented yet
+}
+
+TEST(CompareVPDActionTests, GetFRU)
+{
+    CompareVPDAction action{"/system/chassis/disk_backplane", "CCIN", "2D35"};
+    EXPECT_EQ(action.getFRU(), "/system/chassis/disk_backplane");
+}
+
+TEST(CompareVPDActionTests, GetKeyword)
+{
+    CompareVPDAction action{"/system/chassis/disk_backplane", "CCIN", "2D35"};
+    EXPECT_EQ(action.getKeyword(), "CCIN");
+}
+
+TEST(CompareVPDActionTests, GetValue)
+{
+    CompareVPDAction action{"/system/chassis/disk_backplane", "CCIN", "2D35"};
+    EXPECT_EQ(action.getValue(), "2D35");
+}
+
+TEST(CompareVPDActionTests, ToString)
+{
+    CompareVPDAction action{"/system/chassis/disk_backplane", "CCIN", "2D35"};
+    EXPECT_EQ(action.toString(),
+              "compare_vpd: { fru: /system/chassis/disk_backplane, keyword: "
+              "CCIN, value: 2D35 }");
+}
diff --git a/phosphor-regulators/test/meson.build b/phosphor-regulators/test/meson.build
index d37ef23..a9ac996 100644
--- a/phosphor-regulators/test/meson.build
+++ b/phosphor-regulators/test/meson.build
@@ -26,6 +26,7 @@
     'actions/action_utils_tests.cpp',
     'actions/and_action_tests.cpp',
     'actions/compare_presence_action_tests.cpp',
+    'actions/compare_vpd_action_tests.cpp',
     'actions/i2c_action_tests.cpp',
     'actions/i2c_compare_bit_action_tests.cpp',
     'actions/i2c_compare_byte_action_tests.cpp',
