Description
Kantan Analytics is a self-hosted WordPress analytics plugin that tracks visitors, sessions, journeys, and conversions — without cookies, external services, or data ever leaving your server. Every metric lives in your own database. You own it.
Kantan keeps every metric in your own database and answers the questions you actually have: which pages convert, where visitors come from, who keeps coming back, and what changed this week. The dashboard installs in a few minutes and runs in the WordPress admin sidebar you already use.
Privacy by architecture
- No cookies. Browser localStorage only — no consent banner required in most jurisdictions, no cross-site tracking possible.
- No IP storage. Country and region are resolved from an offline GeoIP database at tracking time; the raw IP is never written to disk.
- Nothing phoned home. Every metric stays in your WordPress database and Kantan never sends your data to us. One optional integration — the Attribution Webhook, off by default — can forward conversions to a webhook URL you choose (e.g. your own CRM); see the Privacy section.
- Configurable retention. Raw session detail purges on the schedule you set (default 90 days). Daily aggregates live in a local SQLite file forever.
- Bots and admins filtered. Logged-in admins, common bots, and IPs you specify are excluded before anything is recorded — your numbers reflect actual humans.
What it tracks
- Sessions, pageviews, bounce, duration — trended across any date range, with device, browser, OS, and screen-resolution breakdowns
- Traffic sources & UTM capture — organic, direct, referral, social, paid; UTM parameters captured on first touch and attached to every conversion in the session
- Click heatmaps & scroll depth — recorded per-page, per-element, no external script
- User journeys with named visitors — every visitor gets a persistent ID and a generated three-part name (e.g. “Roaming Copper Wren”) so long journeys are actually legible across return visits
- Page-to-page flow — see exactly which path your best visitors walk, and where the rest drop off
- Conversion tracking — phone, email, directions, bookings, plus auto-detection of form submissions from Contact Form 7, WPForms, Gravity Forms, Formidable, Ninja Forms, Forminator, and others
- Long-term aggregate storage — daily totals kept indefinitely in a local SQLite file even when raw rows are purged on schedule, so five-year trend lines don’t require holding five years of personal data
AI-readable analytics
Kantan ships with a downloadable AI agent that reads your data through the WordPress REST API using an application password you generate. Ask it questions in plain English — “Which conversions came from organic traffic last month?”, “Who are my five most engaged returning visitors?”, “Draft me a paragraph about this week’s biggest spike.” It reads; you approve. Nothing it sees leaves your terminal unless you ask.
Built for self-hosting
- Free forever, GPL v2
- No accounts, no signups, no SaaS dashboard
- Runs on any standard WordPress install (5.0+, PHP 7.0+)
- ~2 MB plugin, 5–50 MB/year of data depending on traffic
- Extensible sidebar tab system — companion plugins like Kantan SEO snap in alongside the analytics tabs
Privacy
Kantan Analytics is built to collect the minimum needed to give you useful visitor insight, and to keep all of it on your own server.
What is recorded: page views, click positions (as percentages, not pixels), scroll depth, in-session navigation paths, traffic source and referrer, UTM parameters, conversions (form submissions, phone/email/directions clicks), and approximate device, browser, operating system, and screen resolution parsed from the request.
What is not recorded: Kantan does not set cookies and does not store visitor IP addresses. Country and region are resolved from an offline database at the moment of the visit, after which the raw IP is discarded. No data is ever transmitted to Kantan or the plugin author.
Optional data sharing (off by default): The Attribution Webhook is the only feature that can send data off your server, and it is disabled until you turn it on. When you enable it and provide a destination URL, Kantan forwards each conversion event — with any UTM/campaign and passthrough parameters you’ve allow-listed — to that endpoint, which is typically your own CRM or marketing-automation tool. You choose whether to enable it and where the data goes; nothing is sent until you do.
Retention: detailed session records are deleted automatically after a configurable window (default 90 days). Only anonymous daily aggregate totals are retained beyond that, in a local SQLite file.
Disclosure helper: Kantan registers suggested text with WordPress’ built-in Privacy Policy tool (Settings Privacy), so you can add an accurate disclosure to your site’s policy in one click.
Support
Questions, bugs, or feature requests? Email hello@trykantan.com — or use the Support & Bug Reports card in the dashboard’s Settings tab, which pre-fills your plugin, WordPress, and PHP versions plus your site URL so we can help faster. We read every message.
Screenshots





Installation
- Upload the plugin folder to the
/wp-content/plugins/directory, or install it through the Plugins screen in WordPress. - Activate the plugin through the ‘Plugins’ menu in WordPress.
- The database tables are created automatically on activation.
- View your analytics at Analytics in the admin menu.
FAQ
-
No. Kantan uses browser localStorage to recognise returning visitors, never cookies. No consent banner is required in most jurisdictions, and no cross-site tracking is possible.
-
Where is the data stored?
-
All data is stored in your WordPress database in
wp_kantan_*tables, with daily aggregates in a local SQLite file underwp-content/uploads/kantan/. Nothing is sent to external servers. -
How is traffic source detected?
-
The tracking script categorizes referrers automatically:
- Organic: Google, Bing, Yahoo, DuckDuckGo, Baidu
- Social: Facebook, Twitter, Instagram, LinkedIn, Pinterest, TikTok
- Referral: Other external sites
- Direct: No referrer or same domain
UTM parameters override referrer-based detection when present, and they stay attached to the visitor through every page and conversion in the session.
-
Does this slow down my site?
-
No. The tracking script loads asynchronously after page content and uses
sendBeaconfor exit tracking. There are no blocking requests, no third-party domains, and no external CDNs. Performance impact is well under 10ms. -
Is this GDPR / CCPA / ePrivacy compliant?
-
Kantan is designed for privacy-first compliance under modern privacy law: no cookies, no IP storage, no cross-site tracking, and — unless you switch on the optional Attribution Webhook — no data leaves your server. In most jurisdictions you do not need a consent banner to use it. We’re not lawyers — confirm with yours — but architecturally the tool is built for privacy-first compliance rather than retrofitting it.
-
Will this work with caching plugins (WP Rocket, W3 Total Cache, etc.)?
-
Yes. The tracking script is loaded via standard
wp_enqueue_scriptand runs client-side, so cached pages still record visits correctly. The only thing to watch for is plugins that delay or defer JavaScript so aggressively that visitors leave before the script fires — excludekantan-analytics/assets/tracking.jsfrom any “delay JS until interaction” rule and you’ll be fine. -
Can I import data from Google Analytics?
-
Not currently. Kantan starts tracking the moment you activate it, and historical GA data has a different structure that doesn’t map cleanly. If GAKantan import is something you need, drop us a note at https://trykantan.com.
-
What happens to my data if I deactivate the plugin?
-
Nothing — your data stays in the database. Deactivating just stops new tracking and hides the dashboard. If you uninstall (delete) the plugin, the tables remain unless you explicitly drop them; this is standard WordPress behavior and lets you reactivate without losing history.
-
How do I exclude my own visits, or specific staff IPs?
-
Logged-in admins are excluded by default. The Settings tab also lets you exclude specific IP addresses (one per line). Common bot user-agents are filtered automatically.
-
What’s the AI agent?
-
A downloadable
.mdfile from the dashboard that turns any AI coding agent (Claude Code, Gemini CLI, and compatible tools) into a read-only analyst for your site. It uses a WordPress application password you generate, calls the REST API, and answers questions in plain English. It only reads — nothing it sees leaves your terminal unless you ask. -
Does this work with WordPress multisite?
-
Yes — install at the network level or per-site. Each site gets its own tables and its own dashboard. There’s no aggregated network-wide view yet; that’s on the roadmap.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Kantan Analytics” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Kantan Analytics” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
2.20.1
- Security: the excluded-IPs and data-retention settings endpoints now require administrator access even for read requests.
- Change: the admin dashboard’s tooltip styles are now enqueued as a stylesheet instead of inlined.
2.20.0
- Hardening: every visitor-tracking, UTM, conversion, and form input is now unslashed and sanitized at the point it is read, and the values forwarded to integration hooks are sanitized arrays rather than the raw request.
- Security: diagnostics and configuration endpoints (status, conversion links, attribution webhook config) now require administrator access even for read requests.
- Change: all admin and front-end JavaScript is enqueued through WordPress — no inline script tags remain.
- Change: bundled Chart.js updated to 4.5.1.
2.19.0
- Hardening: comprehensive output escaping across the admin dashboard, timezone-safe date handling, and URL parsing through WordPress core wrappers — aligning the plugin with the official WordPress.org plugin coding standards.
- Change: minimum supported WordPress raised to 5.6.
- Docs: clarified the privacy documentation to disclose the optional Attribution Webhook, which sends conversion data to a CRM endpoint you configure — and only when you enable it.
2.18.0
- New: Business Profile — a canonical, editable record of your business facts (hours, offerings, address/phone, brand voice, claims to make or avoid) under Settings Business Profile. The downloadable AI agents now read it as ground truth before writing or rewriting content, so generated copy uses real facts and your voice instead of guessing. Your agent can even draft it from your site (“Draft my business profile”), and it’s the same source of truth for both the Analytics and SEO agents.
2.17.0
- New: Attribution Webhook — send every conversion to your email/CRM platform (HubSpot, GoHighLevel, Salesforce, Zapier, Make, and more) with its first-party campaign + journey attribution, keyed by an anonymous visitor id. HMAC-signed; no personal data leaves your site. Set it up under Settings Attribution Webhook / CRM, with a one-click “Send test”.
- New: passthrough parameter capture — Kantan now captures ad-click and CRM contact ids from inbound links (gclid, fbclid, msclkid, contact_id, mkt_tok and ~45 more) and includes them in the webhook, so your CRM can join the conversion to the right contact. The captured params are stripped from stored URLs.
2.16.1
- Improved: the downloadable AI agent now officially documents Gemini CLI alongside Claude Code (it’s the same Markdown format — drop it in ~/.claude/agents/ or ~/.gemini/agents/). The agent self-updates to this broadened version automatically.
- Improved: “Ask the agent” prompts now copy with the agent name prefixed, so the pasted prompt delegates to the right Kantan agent. Wording across the agent download is now tool-neutral.
- New: a “What about Codex?” explainer on the agent download covering why OpenAI Codex isn’t officially supported yet (and how to use Kantan with it today).
2.16.0
- New: Scroll Depth by Page — the Interactions tab now breaks scroll depth down per page (with a visual bar), so you can see which pages get read versus abandoned instead of just a site-wide average.
- New: click a visitor’s name on the Realtime tab (or in Visitor Profiles) to open their full visit history — every session, the pages they walked, durations, and conversions.
2.15.0
- New: Interactions drill-downs — click any Click Region to see exactly which elements were clicked there and on which pages, and click any row in Top Clicked Elements for its per-page breakdown.
- Improved: click tracking now records the actual link/button clicked (not the inner span or icon) with a clean, accessible-name-first label, and no longer captures whole-page text from stray clicks. Top Clicked Elements merges the same control across pages and filters out container/no-text noise — so the report finally reflects what visitors actually click.
2.14.1
- New: Top Referrers detail modal — click any referrer on the Overview dashboard to see its sessions, visitors, daily trend, landing pages, the exact referring URLs, and recent visitors.
- New: the Claude Code agent now keeps itself up to date — it checks for a newer version about once a week and refreshes in place, with no re-download and without ever rotating your API key. Added an “Update agent file” button and clearer “install once, use on every site” guidance.
2.14.0
- New: “Ask the agent” — a sparkle icon on dashboard data blocks (referrers, traffic sources, pages, journeys, interactions, devices, conversions) opens a modal of copy-paste, data-specific prompts for the Claude agent.
- New: AI-assistant referral attribution — visits are identified from utm_source as well as the referrer (catching empty-referrer ChatGPT/Perplexity/Claude links) and split per assistant; the Overview AI card shows the per-assistant breakdown.
- Fixed: Overview KPI cards lay out cleanly as 3-up / 2-up on laptop screens.
2.13.1
- New: an “AI Assistants” KPI card with sparkline on the Overview dashboard — shows visits referred by AI assistants and their share of total traffic at a glance.
2.13.0
- New: AI assistants (ChatGPT, Perplexity, Claude, Gemini, Copilot and more) are now a first-class traffic source. Visits referred by them are tracked and shown as their own “AI Assistants” category across Traffic Sources, sessions, the realtime tab, and conversions. Existing AI-referred visits are reclassified automatically on upgrade.
- New: the Claude Code agent gained an “AI Assistant Referral Traffic” workflow and an “Am I getting AI traffic yet?” starter prompt.
2.12.1
- New: a “Support & Bug Reports” card in Settings — a one-click email link that pre-fills your plugin, WordPress, and PHP versions plus your site URL, so reports arrive with the diagnostics we need to help. Settings and Support links now also appear in the WordPress plugins list.
2.12.0
- Fixed: the agent download dialog now caps its height and scrolls on short/laptop screens instead of overflowing off-screen.
- New: starter prompts in the Claude Code agent download — copy-to-clipboard example prompts (30-day summary, best/worst content, traffic-source ROI, visitor journeys) appear in the credentials modal and are written into the generated agent .md.
2.11.5
- Fixed: clicking a page row now opens the page-detail modal on every tab. The click handler was previously only present on the Overview tab, so page rows on Pages, Journeys, and the SEO tabs showed a hover state but did nothing when clicked.
- Fixed: the “Visits Over Time” chart on the Overview tab could render blank — the canvas had no sized container, so Chart.js collapsed it to zero height. It now renders in a fixed-height container.
- Fixed: IP exclusion and visitor IP logging now resolve the real client address through reverse-proxy/CDN headers (Cloudflare, nginx, load balancers) instead of always using the proxy’s own address. On proxied sites the “Your current IP” box previously showed a private hop (e.g. 127.0.0.1 or 192.168.x.x), and excluding it had no effect. When only a local/private address is available, the box now flags it and links to an external IP lookup.
2.11.4
- New: optional read-only dashboard access. A user granted the
kantan_view_dashboardcapability can view the dashboard and its data withoutmanage_options— every write, scan, and sync still requiresmanage_options. The dashboard menu capability is filterable viakantan_dashboard_capability. Inert on normal sites; powers a public read-only demo.
2.11.3
- Security/clarity: the Claude Code agent download now states plainly that the generated Application Password grants the full API access of your account (not read-only), with guidance to keep the file out of version control and how to revoke the password under Users Profile Application Passwords.
- Added: an
Update URIheader so the “Enable auto-updates” toggle appears for Kantan Analytics in the Plugins list. (The WordPress.org build omits this header so wp.org continues to own updates there.)
2.11.1
- Removed: Conversion Backfill tool in Settings — the underlying hostname-matching bug it patched was fixed back in 2.9.8, so the catch-up tool is no longer needed. The REST endpoint, dashboard UI, and
_backfillconversion-type display shim have all been removed.
2.11.0
- New: Conversions tab — see your conversions by type and by traffic source, with a recent-conversion log, right in the dashboard. Surfaces the conversion data Kantan already tracks via Settings Conversion Links.
- Dashboard assets (Tailwind CSS and Chart.js) are now bundled with the plugin instead of loaded from a CDN — the admin dashboard makes no third-party requests and works fully offline.
- New: Kantan contributes suggested text to WordPress’ built-in Privacy Policy generator (Settings Privacy), reflecting your configured data-retention window.
2.10.0
- New: Realtime tab — shows visitors active in the last 5 minutes with their current page, traffic source, session age, and “last seen” age. Auto-refreshes every 30 seconds with a visible countdown and a manual “Refresh now” button. Pauses polling when the browser tab is hidden.
- New: Live visitor count badge next to the “Realtime” item in the dashboard nav. Visible from every tab — the same 30s poll that drives the Realtime tab also keeps the badge current, with a pulsing green dot when at least one visitor is active.
- New: REST endpoint
GET /kantan/v1/realtime?window=5— returns{ count, window_minutes, visitors, timestamp }. Each visitor row includes the most recent pageview (current page), generated display name, traffic source, session age, and seconds since last activity.
2.9.9
- New: UTM parameters now surface on the Journeys tab alongside each named visitor’s session timeline — see campaign, source, and medium for pre-conversion visits (previously only visible aggregated on the UTM tab). REST
/visitorsand/journeysendpoints also expose the new fields, so the Claude Code agent and recommendations engine can attribute behavior to campaigns.
2.9.8
- Fix: conversion link matching corrected — hostname was being searched inside the full URL string (always -1); now checks href.startsWith(rule.domain) OR rule.domain contains hostname. Affected all conversion link click tracking since the feature launched.
- New: Conversion Backfill tool added to Settings. Scans historical click data and creates approximate conversion records for sessions likely missed by the bug. Matches anchor text against each rule’s label; backfilled records carry a
_backfilltype suffix. Idempotent — safe to run multiple times.
2.9.7
- Author renamed from “Kinda Useful Plugins” to “Try Kantan” across plugin header, readme, and updater comment.
- readme description and FAQ rewritten — full feature pitch with subsection structure; FAQ expanded from 4 to 10 items (caching, GDPR/CCPA, GA import, deactivation, multisite, agent, etc.).
2.9.6
- Fix: conversions endpoint now returns correct visitor_id for pre-2.9.4 records; query uses COALESCE(c.visitor_id, a.visitor_id) to recover attribution from the joined session record when the conversion row has a null visitor_id.
- Fix: version constant bumped to match header (was stuck at 2.9.4).
2.9.5
- Sidebar nav groups now accordion — clicking a group label collapses or expands it. The active group always starts expanded; inactive groups start collapsed. Keeps the nav usable on laptops when many SEO sub-tabs are registered.
2.9.4
- Persistent visitor attribution for conversions:
visitor_idcolumn added towp_kantan_conversionsso attribution survives beyond the 90-day raw-data retention window. - Form integrations now inject
kantan_visitor_idalongsidekantan_session_idon all detected forms (CF7, WPForms, Gravity, Formidable, Ninja, Elementor Pro, Fluent, Forminator). - Schema migration runs automatically on update — no manual action required.
2.9.3
- Update channel migrated to trykantan.com. Plugin URIs, SEO upgrade link, and auto-updater endpoint now point to the new domain.
2.9.0
- New: Split test tracking integration — pageviews can now record
test_idandvariant_idfrom a companion split-testing plugin. - New:
kantan_pageview_trackedaction hook fired after each pageview insert. - Database migration to add
test_idandvariant_idcolumns to the pageviews table.
2.8.0
- New: Clickable page URLs throughout dashboard — opens SEO page detail modal or upsell.
- New: Sparkline mini-charts on Overview stat cards.
- Surface recommendations engine on Overview, Interactions, and Journeys tabs.
2.7.0
- New: IP address exclusion for analytics filtering.
- Rebuilt Journeys tab with visitor profiles and generated names.
2.6.0
- New: Admin exclusion and bot filtering.
- New: Interactions endpoint for click heatmap and scroll depth data.
- New: Device breakdown endpoint and queries.
- Switched dashboard to left sidebar nav with grouped tabs.
2.0.0
- New: Click tracking, scroll depth tracking, and user journey analysis.
- New: Entry/exit page tracking and top-clicked-elements report.
- New: Automatic daily cleanup with configurable retention.
1.0.0
- Initial release: core visitor tracking and admin dashboard.
