diff --git a/backend/models/genre.js b/backend/models/genre.js
new file mode 100644
index 0000000000000000000000000000000000000000..d385cbfd2ced27801caa84c681de97d28791fd48
--- /dev/null
+++ b/backend/models/genre.js
@@ -0,0 +1,20 @@
+const mongoose = require("mongoose");
+
+const GenreSchema = new mongoose.Schema(
+  {
+    name: { type: String },
+    id: { type: Number, required: true, unique: true },
+  },
+  {
+    toJSON: { virtuals: true }, // So `res.json()` and other `JSON.stringify()` functions include virtuals
+    toObject: { virtuals: true }, // So `console.log()` and other functions that use `toObject()` include virtuals
+  }
+);
+
+const GenreModel = mongoose.model(
+  "GenreModel",
+  GenreSchema,
+  "genres_populated"
+);
+
+module.exports = GenreModel;
diff --git a/backend/populate.js b/backend/populate.js
index 1db112442648f3db8dfd8e6e771998e1f0c61e82..fb3a00f32d88b717ddc7f62a9ff5141bbad2dcf9 100644
--- a/backend/populate.js
+++ b/backend/populate.js
@@ -1,5 +1,6 @@
 const mongoose = require("mongoose");
 const MovieModel = require("./models/movie");
+const GenreModel = require("./models/genre");
 const axios = require("axios");
 
 async function fetchMoviesFromTheMovieDatabase(n) {
@@ -58,10 +59,56 @@ async function populateMovies(movies) {
   }
 }
 
+async function fetchGenresFromTheMovieDatabase(type) {
+  // TODO: fetch genres from the The Movie Database API
+  try {
+    // Do something if call succeeded
+    const genreFetch = await axios.get(
+      ` https://api.themoviedb.org/3/genre/` +
+        type +
+        `/list?api_key=522d421671cf75c2cba341597d86403a&language=en-US`
+    );
+    console.log(genreFetch.data.genres);
+    return genreFetch.data.genres;
+  } catch (error) {
+    // Do something if call failed
+    console.error(error);
+  }
+}
+
+async function populateGenres(genres) {
+  // TODO: populate genres into the database
+  try {
+    for (const genre of genres) {
+      const newGenre = await new GenreModel({
+        // Genre attributes
+        name: genre.name,
+        id: genre.id,
+      });
+
+      // Create a new genre instance
+      const is_present = await GenreModel.find({ id: genre.id });
+      console.log(is_present);
+
+      if (!is_present.length) {
+        const createdGenre = await newGenre.save();
+        // What to do after genre has been saved !
+        console.log("Genre Saved !");
+        console.log(createdGenre.name);
+      } else {
+        console.log("Genre already exists within de db");
+      }
+    }
+  } catch (error) {
+    console.log(error);
+  }
+}
+
 async function dropDataBase() {
   // TODO: Drop the collections
   try {
     await MovieModel.deleteMany({});
+    await GenreModel.deleteMany({});
   } catch (error) {
     console.log(error);
   }
@@ -77,6 +124,11 @@ async function populate(N) {
     await populateMovies(movies);
     console.log(n);
   }
+  const tvGenres = await fetchGenresFromTheMovieDatabase("tv");
+  await populateGenres(tvGenres);
+
+  const moviesGenres = await fetchGenresFromTheMovieDatabase("movie");
+  await populateGenres(moviesGenres);
 
   // disconnect mongoose client
   await client.disconnect();