ga4_campaign_performance
Break down campaign performance by source and medium to see sessions, conversions, and revenue. Optionally filter by channel for targeted analysis.
Instructions
Campaign × source × medium breakdown with sessions/conversions/revenue. Optional channel filter.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | No | Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today | 28daysAgo |
| end_date | No | End date: YYYY-MM-DD, NdaysAgo, yesterday, or today | yesterday |
| property_id | No | Override GA4_PROPERTY_ID env var for this call | |
| limit | No | Max rows to return | |
| channel | No | Optional sessionDefaultChannelGroup filter, e.g. 'Paid Search' |
Implementation Reference
- src/tools/reports.ts:125-128 (schema)Campaign performance Zod schema: extends dateRange with optional `channel` filter string.
export const campaignPerfSchema = { ...dateRange, channel: z.string().optional().describe("Optional sessionDefaultChannelGroup filter, e.g. 'Paid Search'"), }; - src/tools/reports.ts:130-153 (handler)Campaign performance handler function. Queries GA4 with dimensions sessionCampaignName, sessionSource, sessionMedium; metrics sessions, totalUsers, conversions, keyEvents, totalRevenue; optional channel filter; ordered by sessions desc.
export async function campaignPerformance(args: z.infer<z.ZodObject<typeof campaignPerfSchema>>) { const [res] = await getClient().runReport({ property: getProperty(args.property_id), dateRanges: toDateRange(args.start_date, args.end_date), dimensions: [ { name: "sessionCampaignName" }, { name: "sessionSource" }, { name: "sessionMedium" }, ], metrics: [ { name: "sessions" }, { name: "totalUsers" }, { name: "conversions" }, { name: "keyEvents" }, { name: "totalRevenue" }, ], dimensionFilter: args.channel ? { filter: { fieldName: "sessionDefaultChannelGroup", stringFilter: { value: args.channel } } } : undefined, orderBys: [{ metric: { metricName: "sessions" }, desc: true }], limit: args.limit as unknown as number, }); return formatReport(res); } - src/index.ts:109-116 (registration)Registers the `ga4_campaign_performance` tool on the MCP server with its schema and handler.
server.tool( "ga4_campaign_performance", "Campaign × source × medium breakdown with sessions/conversions/revenue. Optional channel filter.", campaignPerfSchema, async (args) => { try { return ok(await campaignPerformance(args)); } catch (e) { return err(e); } } );