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 dcdc64b6..e71b3963 100644
--- a/apps/portal/src/server/router/offers/offers-analysis-router.ts
+++ b/apps/portal/src/server/router/offers/offers-analysis-router.ts
@@ -66,6 +66,86 @@ const binarySearchOfferPercentile = (
   return -1;
 };
 
+const topPercentileDtoMapper = (topPercentileOffers: Array<any>) => {
+  return topPercentileOffers.map((offer) => {
+    const { background } = offer.profile;
+    return {
+      company: { id: offer.company.id, name: offer.company.name },
+      id: offer.id,
+      jobType: offer.jobType,
+      level: offer.OffersFullTime?.level,
+      monthYearReceived: offer.monthYearReceived,
+      monthlySalary: offer.OffersIntern?.monthlySalary?.value,
+      negotiationStrategy: offer.negotiationStrategy,
+      profile: {
+        background: {
+          experiences: background?.experiences.map(
+            (exp: { company: { id: any; name: any }; id: any }) => {
+              return {
+                company: { id: exp.company.id, name: exp.company.name },
+                id: exp.id,
+              };
+            },
+          ),
+          id: background?.id,
+          totalYoe: background?.totalYoe,
+        },
+        id: offer.profileId,
+        name: offer.profile.profileName,
+      },
+      specialization:
+        offer.jobType === JobType.FULLTIME
+          ? offer.OffersFullTime?.specialization
+          : offer.OffersIntern?.specialization,
+      title:
+        offer.jobType === JobType.FULLTIME
+          ? offer.OffersFullTime?.title
+          : offer.OffersIntern?.title,
+      totalCompensation: offer.OffersFullTime?.totalCompensation?.value,
+    };
+  });
+};
+
+const specificAnalysisDtoMapper = (
+  noOfOffers: number,
+  percentile: number,
+  topPercentileOffers: Array<any>,
+) => {
+  return {
+    noOfOffers,
+    percentile,
+    topPercentileCompanyOffers: topPercentileDtoMapper(topPercentileOffers),
+  };
+};
+
+const highestOfferDtoMapper = (
+  offer: OffersOffer & {
+    OffersFullTime:
+      | (OffersFullTime & {
+          baseSalary: OffersCurrency;
+          bonus: OffersCurrency;
+          stocks: OffersCurrency;
+          totalCompensation: OffersCurrency;
+        })
+      | null;
+    OffersIntern: (OffersIntern & { monthlySalary: OffersCurrency }) | null;
+    company: Company;
+    profile: OffersProfile & { background: OffersBackground | null };
+  },
+) => {
+  return {
+    company: { id: offer.company.id, name: offer.company.name },
+    id: offer.id,
+    level: offer.OffersFullTime?.level,
+    location: offer.location,
+    specialization:
+      offer.jobType === JobType.FULLTIME
+        ? offer.OffersFullTime?.specialization
+        : offer.OffersIntern?.specialization,
+    totalYoe: offer.profile.background?.totalYoe,
+  };
+};
+
 export const offersAnalysisRouter = createRouter().query('generate', {
   input: z.object({
     profileId: z.string(),
@@ -378,6 +458,20 @@ export const offersAnalysisRouter = createRouter().query('generate', {
       },
     });
 
-    return analysis;
+    return {
+      companyAnalysis: specificAnalysisDtoMapper(
+        noOfSimilarCompanyOffers,
+        companyPercentile,
+        topPercentileCompanyOffers,
+      ),
+      id: analysis.id,
+      overallAnalysis: specificAnalysisDtoMapper(
+        noOfSimilarOffers,
+        overallPercentile,
+        topPercentileOffers,
+      ),
+      overallHighestOffer: highestOfferDtoMapper(overallHighestOffer),
+      profileId: analysis.profileId,
+    };
   },
 });