One restricted key, one webhook
Subscription payments, Checkout purchases, and supported refunds arrive on their own, with each currency kept separate. Card numbers never touch Kehai.
Set up StripeA ninety-second tour recorded on demo data. Nothing in it is a customer, and the figures are a generated shop rather than real customer traffic.
how it works
Cookieless analytics works like this: Kehai tells visitors apart with a hash built from things every request already carries, salted daily and scoped to one site. Visits end at midnight UTC. The recorded events stay for the site's full retention window.
A fresh random value replaces yesterday's. New visitor codes use the new salt; earlier codes remain in the events already recorded.
blake3(salt, site, ip, user agent) becomes a4f09c2e. Raw IP addresses stay out of analytics rows. Rate controls and declared-bot records have separate limits.
Same inputs, same hash, counted once. On any other Kehai site the same person hashes to something unrelated.
Tomorrow the same person is counted under a new visitor code. Activity on the next UTC day belongs to a new visit with its own source. Earlier events stay for the site's retention window.
the entire integration
<script defer src="https://stats.kehai.io/k.js?site=yoursite"></script>Counts initial loads and SPA navigations. Sends with sendBeacon, so it never blocks a click or a close.
Walk into your kitchen at night and you know someone's there before you see them. A floorboard, a warmth, a change in the air. You'd swear to the presence. You couldn't name the person.
That's kehai, and it's the exact shape of the measurement problem. A site owner needs to know how many people came, where from, and what they did. None of that requires knowing who a single one of them was. Analytics spent two decades collecting the person to count the presence. Kehai counts the presence and lets the person stay in the dark, where they were standing anyway.
The kanji is the mark. The philosophy is the architecture. Everything below is just the two of them, applied.
the panel
Twenty-six reports, one panel, measured and modeled figures labeled. Turn a module off and it disappears everywhere: menu, API, and all.
No analytics cookie or visitor identifier in browser storage. The script reads page and device data. Assess consent for your installation using the cookie statement.
A visitor code is scoped to one site and one UTC day. Visits end at midnight UTC, so a new day's activity starts with a new visit code and its own source. Earlier events stay for the site's retention window.
Measured reports do not sample stored events. Forecasts stay separate. Blockers, failed delivery, and intake limits can leave gaps in collection.
Stored declared-bot events stay out of human metrics and carry their matching rule. Earlier rejections and delivery losses are outside that ledger.
Visits sent by ChatGPT, Claude, or Perplexity land in their own channel, classified ahead of search so they don't drown in organic.
The AI you already use reads the same defined reports the panel does: one URL, one key, read-only. Your key controls the site and reports your assistant can read.
Export reports or your full site archive on any plan. Send eligible sales to Google Ads by CSV or HTTPS feed.
Analytics rows live in Warsaw, Poland, run by us under EU law. Raw IP addresses stay out of the analytics database. Rate controls briefly hold them in memory, and infrastructure processes requests.
One request, one file. Count pages, SPA navigation and Web Vitals. Query exclusions are enforced server-side - change them in Settings without replacing the tag.
And the quieter rest: local hour and weekday segments, referrers cut to hostnames, browser and device classes, products and coupons, imports from GA4, Plausible, and Umami, batch reports for BI, and five panel palettes. Each one measured, none of them an add-on: the plan table below says which plan carries which.
Bring confirmed sales into Kehai from the checkout you already use. Choose one commerce source per site, with the Ecommerce module included in Commerce.
Subscription payments, Checkout purchases, and supported refunds arrive on their own, with each currency kept separate. Card numbers never touch Kehai.
Set up StripeVisits on WordPress, confirmed sales and supported refunds from WooCommerce - installed and configured from one card in Kehai, no FTP, no manual copying.
Install the WordPress pluginA read-only key is all it takes. Confirmed payments and supported refunds reach your commerce reports on their own.
Set up WixA site API key brings supported sales and refunds into Kehai, with tax and shipping kept separate from the products.
Set up SquarespaceOne module measures visits and queues confirmed orders. Credit slips wait for your confirmation inside PrestaShop itself.
Install the PrestaShop module01forecasting
Two models compete against simply repeating last week, tested over your own history. The winner draws the line, and the line admits it's a guess.
winner damped holt · baseline repeat last week
an example forecast · your own history picks the model
Launch week drove 18,240 visits, 61% from the campaign tag, and checkout conversion held at 3.1%.
kehai · campaigns · 2026-08-10 → 2026-08-16
/pricing took 41% of campaign entries and /docs/get-started another 18%.
kehai · pages · filtered by campaign
an example exchange · your assistant, one URL, one key, read-only
02mcp and api
Kehai serves MCP, so the assistant you already use reads the same defined reports the panel does. Prefer code? The REST API streams everything raw.
url https://app.kehai.io/api/mcp · Authorization Bearer $KEHAI_KEY
03your data
Lock-in ends where the export begins. Every number you see can walk out the door with you, and there's no paid tier guarding the exit.
GET /api/v1/export?dataset=events&from=2026-01-01
Before you continue
We and our 1,437 partners store and access cookies on your device to process personal data, build a profile of your interests, and measure ad performance. You can withdraw consent at any time in settings.
analytics cookies 0 · ad audiences 0
04cookieless collection
Kehai sets no analytics cookie and writes no visitor identifier to browser storage. Reading page and device information can still fall under consent rules. Your legal team can assess the actual installation using the published field inventory.
analytics cookies 0 · visitor storage 0
05revenue
A browser pixel sees the order a visitor's ad blocker lets it see. Kehai takes the sale from the shop after payment is confirmed, and the refund when it happens, so the number in the report is the number in your books. Included in Commerce.
Stripe · WooCommerce · PrestaShop · Wix · Squarespace · or POST /api/v1/commerce
the switch
Leaving an analytics tool usually means abandoning its history. Kehai imports yours instead, and keeps it labeled with the system that measured it.
years of history moved
reports that read it
line for you to paste
extra for any of it
Connect Google from the Imports screen and Kehai's own app asks for read-only access to Analytics, nothing else. Plausible and Umami connect with a key from your own account, and every credential is sealed before it is stored. Moving from another Kehai site instead? Upload its export file and the whole site comes back.
Your daily history arrives as its own series, with your old tool's definitions attached. Those days sit beside what Kehai counts and are never added to them.
Keep both tools on the site for a few weeks and read the same days in each. Every day says which tool measured it, so a day Kehai counted is never quietly folded into a day GA4 reported.
Keep one collection script after the switch. Your imported days stay in the reports for as long as your plan keeps history. What arrives depends on what the old tool's API gives us, and imports do not recreate raw events.
pricing
What changes is what you do with the numbers. The table below is the whole truth, including what a plan does not have.
or do not run it at all
invoiced, quoted from your measured volume
The same product, with someone who runs it. For teams who want the measurement to be right without owning the job of keeping it right.
Talk to usPay yearly and get two months free. Prices in EUR or USD, excluding VAT. Business customers only.
Over the band two months in a row? We write to you and agree a plan from the next period. Nothing is blocked and no measured row is ever dropped.
A visit is priced for up to 10 pages on average. Above that two months in a row, we write to you the same way, and nothing is blocked.
Longer history without changing plan: 5 years for €49, 7 years for €69, 10 years for €99 a month, on any plan, added from the billing screen in your plan's own cadence and currency.
Operator: for more than 15 sites or 10 people, a retention window up to 10 years, and support agreed in your offer, from €999 a month. Quoted, not charged online.
questions
Straight answers, including the ones a pricing page usually hides. Anything else, ask by email.
Yes, for Solo, Core, Growth, and Commerce. You pick a plan, prove you control the domain with one DNS record, and enter a card in Stripe Checkout, which takes nothing for the first 7 days. The owner invitation lands in your inbox a moment later. Operator stays sales-led, because a negotiated scope needs a conversation before it needs a card.
Yes. Every plan starts with 7 days free. Checkout asks for a card and takes nothing for 7 days, so you see your own numbers before you pay for them. Cancel from the billing portal inside the trial and nothing is charged. Keep going and the card is charged the plan's price on day 8.
Kehai sets no analytics cookie and writes no visitor identifier to browser storage. Its script still reads page and device information. Whether your installation requires consent depends on the configuration and applicable law. The privacy policy and cookie and storage statement give your counsel the technical facts to assess it.
Kehai counts daily visitors exactly and refuses to fake the rest. A visitor code is scoped to one site and one UTC day. Over a month you get visitor days, named that, because Kehai does not use a stable visitor identifier to count one person across days. The daily codes remain in the recorded events for the site's retention window.
Classified at intake from the declared device string and removed before any human metric is computed. They get their own report, with the exact rule that caught each one. A bot that impersonates a browser is counted as a person: we remove what identifies itself, which is most of it and not all of it.
In Warsaw, Poland, under EU law, run by us rather than by a hyperscaler. Cloudflare proxies the intake hostname, so we won't tell you nothing leaves our servers. What we will tell you: raw IP addresses are kept out of the analytics database. Rate controls briefly hold them in memory, and infrastructure providers process the request. The privacy policy describes those boundaries.
Yes. GA4, Plausible, and Umami importers translate daily history into vendor-labeled series with their definitions attached. Imported days sit beside Kehai's counts and are never added to them.
Any day. Every report screen downloads as one file with every card on it, the API streams the raw datasets, and one button exports the whole site as a single file that another Kehai can read back. There's no paid export plan.
Choose your plan in minutes, verify your domain, drop in one script, and that's the whole setup. The first 7 days are free, and nothing is charged until day 8.