PageLens Analytics
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Cookieless web analytics and AI Visibility: traffic, funnels, errors, and which AI bots read you.
| Author | io.pagelens |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 219 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"PageLens Analytics": {
"url": "https://app.pagelens.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (23)
list_sitesread-onlyList the websites this key can access, with visitors in the last 24 hours.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
list_segmentsread-onlySaved segments (named filter sets such as "Paid traffic" or "Mobile in Germany") that can be applied to any report with segment_id.
Parameters:
site_id(required) — string — Site id from list_sites
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_overviewread-onlyHeadline metrics (visitors, sessions, pageviews, pages per session, bounce rate, average session duration) for a period, compared with the previous period of the same length, plus a time series.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filtersinclude_series— boolean — Include the per-day/hour series (default true)
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_breakdownread-onlyTop values of one dimension (pages, entry/exit pages, referrers, channels, UTM tags, countries, cities, browsers, OS, devices, languages, custom events, outbound links) with visitors and sessions.
Parameters:
site_id(required) — string — Site id from list_sitesdimension(required) — stringto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)search— string — Only values containing this textfilters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_pagesread-onlyPer-page metrics: visitors, pageviews, entries, bounce rate and time on page.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_realtimeread-onlyVisitors online right now (last 5 minutes) and what they are viewing.
Parameters:
site_id(required) — string — Site id from list_sites
Hints: read-only yes · destructive no · idempotent not declared · open-world no
list_sessionsread-onlyRecent sessions with entry/exit page, pages viewed, duration, source, location and device.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)kind— stringlimit— integer — Rows to return (default 10)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, taguser_id— string — Only sessions of this identified usertimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_sessionread-onlyEvery pageview and event in one session, in order.
Parameters:
site_id(required) — string — Site id from list_sitessession_id(required) — string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_eventsread-onlyCustom events (sent with pagelens.track) and outbound clicks with counts and their properties.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_errorsread-onlyJavaScript errors grouped by message, with occurrences, affected sessions and pages.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_web_vitalsread-onlyCore Web Vitals from real visitors (LCP, INP, CLS, FCP, TTFB) at p50/p75/p90, overall and per page.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_journeysread-onlyMost common page-to-page paths visitors take.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
run_funnelread-onlyConversion funnel: how many sessions completed each step. Steps are pages (path, * wildcard allowed), custom event names, or a page scrolled at least `threshold` percent (type scroll). mode: ordered (default; other pages may come in between), strict (each step right after the previous one) or flexible (middle steps may be skipped). compare_previous adds the same funnel over the previous period.
Parameters:
site_id(required) — string — Site id from list_sitessteps(required) — arrayto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)mode— stringperiod— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filterscompare_previous— boolean
Hints: read-only yes · destructive no · idempotent not declared · open-world no
list_goalsread-onlyGoals with conversions and conversion rate for the period, compared with the previous period.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
create_goalCreate a goal that counts sessions visiting a page, firing a custom event, or scrolling a page at least `threshold` percent (type scroll). Needs a write key and member access or higher.
Parameters:
site_id(required) — string — Site id from list_sitestype(required) — stringvalue(required) — string — Page path (wildcards allowed) or event namename— stringthreshold— integer — For scroll goals: percentage of the page scrolled, e.g. 75
Hints: read-only no · destructive no · idempotent not declared · open-world no
add_annotationMark a date on the charts (a release, a campaign, an outage). Needs a write key and member access or higher.
Parameters:
site_id(required) — string — Site id from list_sitesdate(required) — string — YYYY-MM-DDtext(required) — string
Hints: read-only no · destructive no · idempotent not declared · open-world no
get_retentionread-onlyCohort retention of identified users (pagelens.identify): share of each daily or weekly cohort that came back in later periods.
Parameters:
site_id(required) — string — Site id from list_sitesunit— stringtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)
Hints: read-only yes · destructive no · idempotent not declared · open-world no
list_usersread-onlyUsers active in the period: identified users (with traits) and anonymous visitors, with sessions, pageviews and first source.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)kind— stringlimit— integer — Rows to return (default 10)period— string — Time range (default 7d)search— string — Match user id, name or emailfilters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_userread-onlyProfile of one identified user (traits, first/last seen, totals) and their sessions.
Parameters:
site_id(required) — string — Site id from list_sitesuser_id(required) — string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_search_consoleread-onlyGoogle Search Console data for the site (when connected): clicks, impressions, CTR and average position in Google Search, by query, page, country or device, plus a daily series. Data lags about 2 days.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)limit— integer — Rows to return (default 10)period— string — Time range (default 7d)search— string — Only queries (or pages) containing this textfilters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)dimension— stringsegment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
delete_user_datadestructiveGDPR erasure: permanently delete all events, session replays and the profile of one user on a site. Needs a write key and admin access.
Parameters:
site_id(required) — string — Site id from list_sitesuser_id(required) — string — Identified user id, or "anon:<visitor_id>" for an anonymous visitor
Hints: read-only no · destructive yes · idempotent not declared · open-world no
get_bots_and_airead-onlyBot and AI traffic: AI crawlers (GPTBot, ClaudeBot…), AI assistants fetching pages, search engines, and human visits referred by AI assistants (ChatGPT, Perplexity, Claude…).
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_ai_visibilityread-onlyHow the site shows up in AI assistants, per AI company (OpenAI/ChatGPT, Anthropic/Claude, Perplexity, Google/Gemini…) and per page: crawler reads, live fetches while answering a person, human visits sent back, purchases and revenue, robots.txt access, and plain-language findings.
Parameters:
site_id(required) — string — Site id from list_sitesto— string — End date YYYY-MM-DD, inclusive (default today)from— string — Start date YYYY-MM-DD (overrides period)period— string — Time range (default 7d)filters— array — Optional filters "dimension:value" (is). Other operators go after the dimension: "page!:/x" is not, "page~:blog" contains, "page!~:blog" does not contain, "page^:/docs" starts with. Dimensions: page, title, hostname, referrer, channel, utm_source, utm_medium, utm_campaign, browser, os, device, screen, country (ISO code), city, language, event, tagtimezone— string — IANA timezone for days and hours, e.g. Europe/Berlin (default UTC)segment_id— string — Apply a saved segment (see list_segments); combines with filters
Hints: read-only yes · destructive no · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.