ig_get_media_insights
Retrieve Instagram media analytics including views, reach, engagement, and performance metrics for posts and reels to measure content effectiveness.
Instructions
Get insights/analytics for a specific media post. Note: 'impressions' and 'video_views' were deprecated in v22.0 — use 'views' instead. Available metrics: views, reach, saved, shares, likes, comments, reposts, reels_skip_rate.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| media_id | Yes | Media ID | |
| metric | No | Comma-separated metrics (default: views,reach,saved,shares). For REEL add: likes,comments,reposts,reels_skip_rate |
Implementation Reference
- src/tools/instagram/media.ts:67-84 (handler)The `ig_get_media_insights` tool implementation, including its registration, input schema (via Zod), and the handler logic that fetches metrics for a specific Instagram media post.
// ─── ig_get_media_insights ─────────────────────────────────── server.tool( "ig_get_media_insights", "Get insights/analytics for a specific media post. Note: 'impressions' and 'video_views' were deprecated in v22.0 — use 'views' instead. Available metrics: views, reach, saved, shares, likes, comments, reposts, reels_skip_rate.", { media_id: z.string().describe("Media ID"), metric: z.string().optional().describe("Comma-separated metrics (default: views,reach,saved,shares). For REEL add: likes,comments,reposts,reels_skip_rate"), }, async ({ media_id, metric }) => { try { const m = metric || "views,reach,saved,shares"; const { data, rateLimit } = await client.ig("GET", `/${media_id}/insights`, { metric: m }); return { content: [{ type: "text", text: JSON.stringify({ ...data as object, _rateLimit: rateLimit }, null, 2) }] }; } catch (error) { return { content: [{ type: "text", text: `Get media insights failed: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );