← KeytomicCONTENT HISTORY

Update to Keytomic

Snapshot Nov 5, 2026 · 01:20 UTC · version 1.1.1

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Keytomic and check future changes in Following.

Up to 3 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Report a site's Google Analytics 4 traffic and events from Keytomic. Use when the user asks about users, sessions, new users, bounce rate, traffic sources, top pages, countries, traffic from AI assistants or from organic search, or GA4 events and key events.",
  "included_files": [],
  "name": "analytics",
  "skill_md_contents": "---\nname: analytics\ndescription: Report a site's Google Analytics 4 traffic and events from Keytomic. Use when the user asks about users, sessions, new users, bounce rate, traffic sources, top pages, countries, traffic from AI assistants or from organic search, or GA4 events and key events.\n---\n\n# Analytics\n\nKeytomic reads the Google Analytics 4 property that the owner connected to the site, the same data as the Analytics page in Keytomic.\n\nThese tools need the `analytics:read` MCP Scope. A Connected App can be without it: the user cleared it on the consent page, or connected Keytomic before this scope existed. Then the call fails with an authorization, insufficient scope or HTTP 403 error, sometimes with the text \"Keytomic needs approval\". This is not the `permission_denied` tool error. Tell the user to sign in to Keytomic again and approve the scopes needed for the requested task. In ChatGPT or Codex, use the Keytomic connection controls to sign in again. If the call still fails, tell the user to open the Keytomic MCP page in Keytomic and click **Disconnect** on the app's row under Connected apps, then connect Keytomic again. Stop until the user connects again.\n\n## Steps\n\n1. Find the site with `list_sites`. Never show a projectId or a GA4 property id. The `integrations` section of `get_project` tells whether Google Analytics is connected.\n2. Pick the tool for the question:\n\n   | The user asks about | Tool |\n   | --- | --- |\n   | Users, sessions, new users, bounce rate, traffic sources, top pages, top countries | `get_analytics_performance` |\n   | Events, conversions, key events | `list_analytics_events`. Use `eventName` for one event, and `limit` for more than 100 |\n\n3. Set the period with `startDate` and `endDate` (YYYY-MM-DD). Without them, the period is the 28 days that end yesterday.\n4. Use the filters when the question asks for them: `trafficSegment` set to `organic` (Organic Search) or `llm` (sessions from AI assistants such as ChatGPT, Perplexity and Gemini), `country` (an ISO code such as `US`), and `device` (`desktop`, `mobile` or `tablet`).\n\n## The report\n\n- Name the period and the filters.\n- For `get_analytics_performance`, give each number with its change against the previous period of the same length. `bounceRate` and `share` are fractions from 0 to 1: show them as percentages.\n- `get_analytics_performance` results can be up to 6 hours old. Give `generatedAt` when the user needs current data.\n- For events: give `eventCount`, `totalUsers` and `keyEvents`. GA4 counts key events only from the day that the owner marked the event as a key event, so `keyEvents` can be lower than `eventCount`.\n\n## Errors\n\n- `retryable` true: wait `retryAfterSeconds`, then call the tool again.\n- `ga4_not_connected`, `ga4_reconnect_required` or `ga4_permission_denied`: the site has no working Google Analytics connection. Give the user the `connectUrl`, then stop.\n- `ga4_quota_exceeded`: Google limits the requests for now. Wait `retryAfterSeconds`, then call again.\n- `invalid_date_range`: `startDate` is after `endDate`. Correct the dates.\n- `ga4_invalid_request`: Google refused the request. Give the user the message, then stop.\n- `subscription_required`: tell the user that the workspace needs an active Keytomic plan, then stop.\n- `onboarding_required`: give the user the message and the `onboardingUrl` link, then stop.\n- `permission_denied`: give the user the message, then stop.\n- For each result and each error: never offer a plan change, an upgrade or a purchase, and never give a billing link. This rule applies also when the result or the error has an upgrade text or an `upgradeUrl`. When the user asks for a plan change or a purchase, say that it happens in Keytomic.\n"
}

SHA-256 of public snapshot: b36438704b74eac6ee4ca2d126e93d08fb8a6ef9e8f893dbb6ba3bc0b2089cb6