gads_device_performance
Analyze Google Ads performance across mobile, desktop, and tablet devices. Get clicks, cost, CTR, conversions, and CPA split per campaign for any date range.
Instructions
Clicks, cost, CTR, conversions, and CPA split by MOBILE / DESKTOP / TABLET per campaign. Default last 28 days.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | No | Override GOOGLE_ADS_CUSTOMER_ID for this call | |
| 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 |
| campaign_id | No | Filter to a specific campaign ID |
Implementation Reference
- src/tools/performance.ts:50-74 (handler)The main handler function that executes the device performance logic. It queries Google Ads API for clicks, cost, CTR, conversions, and CPA split by MOBILE/DESKTOP/TABLET per campaign, using the provided customer_id, date range, and optional campaign filter.
export async function devicePerformance(args: z.infer<z.ZodObject<typeof devicePerformanceSchema>>) { const customer = getCustomer(args.customer_id); const start = resolveDate(args.start_date); const end = resolveDate(args.end_date); const campaignClause = args.campaign_id ? `AND campaign.id = ${args.campaign_id}` : ""; const rows = await customer.query(` SELECT campaign.id, campaign.name, segments.device, metrics.impressions, metrics.clicks, metrics.ctr, metrics.cost_micros, metrics.conversions, metrics.conversions_value, metrics.cost_per_conversion FROM campaign WHERE segments.date BETWEEN '${start}' AND '${end}' ${campaignClause} ORDER BY campaign.name, segments.device LIMIT 500 `); return { rowCount: rows.length, rows }; } - src/tools/performance.ts:45-48 (schema)Zod schema for the tool's input parameters: customer_id (optional), start_date (default last 28 days), end_date (default today), and optional campaign_id filter.
export const devicePerformanceSchema = { ...baseArgs, campaign_id: z.string().optional().describe("Filter to a specific campaign ID"), }; - src/index.ts:190-195 (registration)Registers 'gads_device_performance' as a tool on the MCP server with its description, schema, and handler.
server.tool( "gads_device_performance", "Clicks, cost, CTR, conversions, and CPA split by MOBILE / DESKTOP / TABLET per campaign. Default last 28 days.", devicePerformanceSchema, async (args) => { try { return ok(await devicePerformance(args)); } catch (e) { return err(e); } } ); - src/tools/performance.ts:4-8 (helper)Base argument schema reused by devicePerformanceSchema, defining customer_id, start_date, and end_date.
const baseArgs = { customer_id: z.string().optional().describe("Override GOOGLE_ADS_CUSTOMER_ID for this call"), start_date: z.string().default(DEFAULT_START).describe("Start date: YYYY-MM-DD, NdaysAgo, yesterday, or today"), end_date: z.string().default(DEFAULT_END).describe("End date: YYYY-MM-DD, NdaysAgo, yesterday, or today"), };