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
