Skip to content

Commit 8dc422e

Browse files
committed
feat: gmb analytics
1 parent 7921ef3 commit 8dc422e

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

apps/frontend/src/components/platform-analytics/platform.analytics.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const allowedIntegrations = [
2424
'linkedin-page',
2525
// 'tiktok',
2626
'youtube',
27+
'gmb',
2728
'pinterest',
2829
'threads',
2930
'x',
@@ -83,6 +84,7 @@ export const PlatformAnalytics = () => {
8384
'pinterest',
8485
'youtube',
8586
'threads',
87+
'gmb',
8688
'x',
8789
].indexOf(currentIntegration.identifier) !== -1
8890
) {
@@ -100,6 +102,7 @@ export const PlatformAnalytics = () => {
100102
'pinterest',
101103
'youtube',
102104
'threads',
105+
'gmb',
103106
'x',
104107
].indexOf(currentIntegration.identifier) !== -1
105108
) {
@@ -109,7 +112,7 @@ export const PlatformAnalytics = () => {
109112
});
110113
}
111114
if (
112-
['facebook', 'linkedin-page', 'pinterest', 'youtube', 'x'].indexOf(
115+
['facebook', 'linkedin-page', 'pinterest', 'youtube', 'x', 'gmb'].indexOf(
113116
currentIntegration.identifier
114117
) !== -1
115118
) {

libraries/nestjs-libraries/src/integrations/social/gmb.provider.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -480,9 +480,14 @@ export class GmbProvider extends SocialAbstract implements SocialProvider {
480480
const endDate = dayjs().format('YYYY-MM-DD');
481481
const startDate = dayjs().subtract(date, 'day').format('YYYY-MM-DD');
482482

483+
// id is in format: accounts/{accountId}/locations/{locationId}
484+
// Business Profile Performance API expects: locations/{locationId}
485+
const locationId = id.split('/locations/')[1];
486+
const locationPath = `locations/${locationId}`;
487+
483488
// Use the Business Profile Performance API
484489
const response = await fetch(
485-
`https://businessprofileperformance.googleapis.com/v1/${id}:getDailyMetricsTimeSeries?dailyMetric=WEBSITE_CLICKS&dailyMetric=CALL_CLICKS&dailyMetric=BUSINESS_DIRECTION_REQUESTS&dailyMetric=BUSINESS_IMPRESSIONS_DESKTOP_MAPS&dailyMetric=BUSINESS_IMPRESSIONS_MOBILE_MAPS&dailyRange.startDate.year=${dayjs(
490+
`https://businessprofileperformance.googleapis.com/v1/${locationPath}:fetchMultiDailyMetricsTimeSeries?dailyMetrics=WEBSITE_CLICKS&dailyMetrics=CALL_CLICKS&dailyMetrics=BUSINESS_DIRECTION_REQUESTS&dailyMetrics=BUSINESS_IMPRESSIONS_DESKTOP_MAPS&dailyMetrics=BUSINESS_IMPRESSIONS_MOBILE_MAPS&dailyRange.startDate.year=${dayjs(
486491
startDate
487492
).year()}&dailyRange.startDate.month=${
488493
dayjs(startDate).month() + 1
@@ -502,7 +507,11 @@ export class GmbProvider extends SocialAbstract implements SocialProvider {
502507

503508
const data = await response.json();
504509

505-
if (!data.timeSeries || data.timeSeries.length === 0) {
510+
// Response structure: { multiDailyMetricTimeSeries: [{ dailyMetricTimeSeries: [...] }] }
511+
const dailyMetricTimeSeries =
512+
data.multiDailyMetricTimeSeries?.[0]?.dailyMetricTimeSeries;
513+
514+
if (!dailyMetricTimeSeries || dailyMetricTimeSeries.length === 0) {
506515
return [];
507516
}
508517

@@ -516,18 +525,19 @@ export class GmbProvider extends SocialAbstract implements SocialProvider {
516525

517526
const analytics: AnalyticsData[] = [];
518527

519-
for (const series of data.timeSeries) {
528+
for (const series of dailyMetricTimeSeries) {
520529
const metricName = series.dailyMetric;
521530
const label = metricLabels[metricName] || metricName;
522531

523-
const dataPoints =
524-
series.timeSeries?.datedValues?.map((dv: any) => ({
525-
total: dv.value || 0,
526-
date: `${dv.date.year}-${String(dv.date.month).padStart(
527-
2,
528-
'0'
529-
)}-${String(dv.date.day).padStart(2, '0')}`,
530-
})) || [];
532+
const datedValues = series.timeSeries?.datedValues || [];
533+
534+
const dataPoints = datedValues.map((dv: any) => ({
535+
total: parseInt(dv.value || '0', 10),
536+
date: `${dv.date.year}-${String(dv.date.month).padStart(
537+
2,
538+
'0'
539+
)}-${String(dv.date.day).padStart(2, '0')}`,
540+
}));
531541

532542
if (dataPoints.length > 0) {
533543
analytics.push({

0 commit comments

Comments
 (0)