diff --git a/chip_data/parse_chip_data.py b/chip_data/parse_chip_data.py
new file mode 100755
index 0000000..e000d5d
--- /dev/null
+++ b/chip_data/parse_chip_data.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python3
+
+import argparse
+import glob
+import os
+
+from pyprd.chip_data.binary import binary_encode
+from pyprd.chip_data.json import json_decode
+from pyprd.chip_data.peltool import peltool_encode
+
+
+def _import_chip_data(indir: str) -> dict:
+    """
+    Iterates each JSON file in the given directory (all of which should be
+    properly formated Chip Data JSON). Then, combines the data into a singular
+    chip_data.Base object for each model/EC.
+    """
+
+    bases = dict()
+
+    for file in glob.glob(os.path.join(indir, "*.json")):
+        with open(file, "r") as fp:
+            for base in json_decode(fp).split():
+                # Should be only one model/EC
+                assert 1 == len(base.model_ec)
+                model_ec = base.model_ec[0]
+
+                if model_ec not in bases:
+                    bases[model_ec] = base
+                else:
+                    bases[model_ec].merge(base)
+
+    return bases
+
+
+def gen_chip_data_binary(indir: str, outdir: str) -> None:
+    for model_ec, base in _import_chip_data(indir).items():
+        file = f"chip_data_{model_ec.lower()}.cdb"
+        with open(os.path.join(outdir, file), "wb") as fp:
+            binary_encode(model_ec, base, fp)
+
+
+def gen_peltool_json(indir: str, outdir: str) -> None:
+    for model_ec, base in _import_chip_data(indir).items():
+        file = f"pel_parser_data_{model_ec.lower()}.json"
+        with open(os.path.join(outdir, file), "w") as fp:
+            peltool_encode(model_ec, base, fp)
+
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(
+        description="""
+        Parses the target Chip Data files and generates specified data files.
+        """
+    )
+
+    parser.add_argument(
+        "format",
+        type=str,
+        metavar="<format>",
+        choices=["bin", "pel"],
+        help="""
+        Output data type: 'bin' => Chip Data binary, 'pel' => BMC peltool JSON.
+        """,
+    )
+
+    parser.add_argument(
+        "indir",
+        type=str,
+        metavar="<input_path>",
+        help="""
+        Input directory containing the Chip Data files.
+        """,
+    )
+
+    parser.add_argument(
+        "outdir",
+        type=str,
+        metavar="<output_path>",
+        help="""
+        Output directory for the generated data.
+        """,
+    )
+
+    args = parser.parse_args()
+
+    funcs = {
+        "bin": "gen_chip_data_binary",
+        "pel": "gen_peltool_json",
+    }
+
+    globals()[funcs[args.format]](args.indir, args.outdir)
