diff --git a/apps/portal/prisma/migrations/20221014192315_/migration.sql b/apps/portal/prisma/migrations/20221014192315_/migration.sql
new file mode 100644
index 00000000..20352390
--- /dev/null
+++ b/apps/portal/prisma/migrations/20221014192315_/migration.sql
@@ -0,0 +1,60 @@
+-- CreateTable
+CREATE TABLE "OffersAnalysis" (
+    "id" TEXT NOT NULL,
+    "profileId" TEXT NOT NULL,
+    "offerId" TEXT NOT NULL,
+    "overallPercentile" INTEGER NOT NULL,
+    "noOfSimilarOffers" INTEGER NOT NULL,
+    "companyPercentile" INTEGER NOT NULL,
+    "noOfSimilarCompanyOffers" INTEGER NOT NULL,
+
+    CONSTRAINT "OffersAnalysis_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "_TopOverallOffers" (
+    "A" TEXT NOT NULL,
+    "B" TEXT NOT NULL
+);
+
+-- CreateTable
+CREATE TABLE "_TopCompanyOffers" (
+    "A" TEXT NOT NULL,
+    "B" TEXT NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "OffersAnalysis_profileId_key" ON "OffersAnalysis"("profileId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "OffersAnalysis_offerId_key" ON "OffersAnalysis"("offerId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_TopOverallOffers_AB_unique" ON "_TopOverallOffers"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_TopOverallOffers_B_index" ON "_TopOverallOffers"("B");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_TopCompanyOffers_AB_unique" ON "_TopCompanyOffers"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_TopCompanyOffers_B_index" ON "_TopCompanyOffers"("B");
+
+-- AddForeignKey
+ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_profileId_fkey" FOREIGN KEY ("profileId") REFERENCES "OffersProfile"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "OffersAnalysis" ADD CONSTRAINT "OffersAnalysis_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "OffersOffer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_TopOverallOffers" ADD CONSTRAINT "_TopOverallOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_A_fkey" FOREIGN KEY ("A") REFERENCES "OffersAnalysis"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_TopCompanyOffers" ADD CONSTRAINT "_TopCompanyOffers_B_fkey" FOREIGN KEY ("B") REFERENCES "OffersOffer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma
index 9d84a2d5..e30230bb 100644
--- a/apps/portal/prisma/schema.prisma
+++ b/apps/portal/prisma/schema.prisma
@@ -190,6 +190,8 @@ model OffersProfile {
 
   user   User?   @relation(fields: [userId], references: [id])
   userId String?
+
+  OffersAnalysis OffersAnalysis?
 }
 
 model OffersBackground {
@@ -316,6 +318,11 @@ model OffersOffer {
 
   OffersFullTime   OffersFullTime? @relation(fields: [offersFullTimeId], references: [id], onDelete: Cascade)
   offersFullTimeId String?         @unique
+
+  OffersAnalysis OffersAnalysis? @relation("HighestOverallOffer")
+
+  OffersAnalysisTopOverallOffers OffersAnalysis[] @relation("TopOverallOffers")
+  OffersAnalysisTopCompanyOffers OffersAnalysis[] @relation("TopCompanyOffers")
 }
 
 model OffersIntern {
@@ -348,6 +355,26 @@ model OffersFullTime {
   OffersOffer OffersOffer?
 }
 
+model OffersAnalysis {
+  id String @id @default(cuid())
+
+  profile   OffersProfile @relation(fields: [profileId], references: [id])
+  profileId String        @unique
+
+  overallHighestOffer OffersOffer @relation("HighestOverallOffer", fields: [offerId], references: [id])
+  offerId             String      @unique
+
+  // OVERALL
+  overallPercentile Int
+  noOfSimilarOffers Int
+  topOverallOffers  OffersOffer[] @relation("TopOverallOffers")
+
+  // Company
+  companyPercentile        Int
+  noOfSimilarCompanyOffers Int
+  topCompanyOffers         OffersOffer[] @relation("TopCompanyOffers")
+}
+
 // End of Offers project models.
 
 // Start of Questions project models.
diff --git a/apps/portal/src/server/router/offers/offers-analysis-router.ts b/apps/portal/src/server/router/offers/offers-analysis-router.ts
index 3552d9ea..c620cde5 100644
--- a/apps/portal/src/server/router/offers/offers-analysis-router.ts
+++ b/apps/portal/src/server/router/offers/offers-analysis-router.ts
@@ -225,22 +225,22 @@ export const offersAnalysisRouter = createRouter().query('generate', {
       (offer) => offer.id !== overallHighestOffer.id,
     );
 
-    const similarOffersCount = similarOffers.length;
+    const noOfSimilarOffers = similarOffers.length;
     const similarOffers90PercentileIndex =
-      Math.floor(similarOffersCount * 0.9) - 1;
+      Math.floor(noOfSimilarOffers * 0.9) - 1;
     const topPercentileOffers =
-      similarOffersCount > 1
+      noOfSimilarOffers > 1
         ? similarOffers.slice(
             similarOffers90PercentileIndex,
             similarOffers90PercentileIndex + 2,
           )
         : similarOffers;
 
-    const similarCompanyOffersCount = similarCompanyOffers.length;
+    const noOfSimilarCompanyOffers = similarCompanyOffers.length;
     const similarCompanyOffers90PercentileIndex =
-      Math.floor(similarCompanyOffersCount * 0.9) - 1;
+      Math.floor(noOfSimilarCompanyOffers * 0.9) - 1;
     const topPercentileCompanyOffers =
-      similarCompanyOffersCount > 1
+      noOfSimilarCompanyOffers > 1
         ? similarCompanyOffers.slice(
             similarCompanyOffers90PercentileIndex,
             similarCompanyOffers90PercentileIndex + 2,
@@ -250,12 +250,12 @@ export const offersAnalysisRouter = createRouter().query('generate', {
     return {
       company: {
         highestOfferAgainstCompanyPercentile,
-        similarCompanyOffersCount,
+        noOfSimilarCompanyOffers,
         topPercentileCompanyOffers,
       },
       overall: {
         highestOfferAgainstOverallPercentile,
-        similarOffersCount,
+        noOfSimilarOffers,
         topPercentileOffers,
       },
       overallHighestOffer,