diff --git a/scripts/get-moves.js b/scripts/get-moves.js
new file mode 100644
index 0000000..063e814
--- /dev/null
+++ b/scripts/get-moves.js
@@ -0,0 +1,81 @@
+const pokemon = require("./pokemon.json");
+const fs = require("fs");
+
+function getPokemonId(name) {
+  for (let i = 0; i < pokemon.length; i++) {
+    if (pokemon[i].name === name) return i + 1;
+  }
+  return null;
+}
+
+const downloadData = async () => {
+  const moves = JSON.parse(fs.readFileSync("moves.json"));
+
+  for (let i = 0; i < moves.length; i++) {
+    const output = JSON.parse(fs.readFileSync("data.json"));
+
+    if (output[moves[i].name]) {
+      console.log(`Already downloaded ${moves[i].name}`);
+      continue;
+    }
+
+    const moveId = moves[i].name;
+    const response = await fetch(moves[i].url);
+    const data = await response.json();
+
+    const learnedBy = [];
+
+    for (let j = 0; j < data.learned_by_pokemon.length; j++) {
+      const pokemonId = getPokemonId(data.learned_by_pokemon[j].name);
+      if (!pokemonId) continue;
+      learnedBy.push(pokemonId);
+    }
+
+    const effect = data.effect_entries[0]
+      ? data.effect_entries[0].short_effect
+      : "";
+
+    const meta = data.meta
+      ? {
+          ailment: data.meta.ailment.name,
+          ailmentChance: data.meta.ailment_chance,
+          category: data.meta.category.name,
+          critRate: data.meta.crit_rate,
+          drain: data.meta.drain,
+          flinchChance: data.meta.flinch_chance,
+          healing: data.meta.healing,
+          maxHits: data.meta.max_hits,
+          maxTurns: data.meta.max_turns,
+          minHits: data.meta.min_hits,
+          minTurns: data.meta.min_turns,
+          statChance: data.meta.stat_chance,
+        }
+      : null;
+
+    const output_ = {
+      id: moveId,
+      accuracy: data.accuracy,
+      damageClass: data.damage_class.name,
+      effect,
+      effectChance: data.effect_chance,
+      learnedBy,
+      meta,
+      name: data.names.find((name) => name.language.name === "en").name,
+      power: data.power,
+      pp: data.pp,
+      priority: data.priority,
+      type: data.type.name,
+    };
+
+    output[moveId] = output_;
+
+    console.log(`Downloaded ${output_.name}`);
+
+    fs.writeFileSync("data.json", JSON.stringify(output));
+
+    // wait one second
+    await new Promise((resolve) => setTimeout(resolve, 1000));
+  }
+};
+
+downloadData();