Skip to content

Website analytics · no cookie

Cookie-free analytics. The visit still counts after Reject.

Website analytics without a cookie. Pageviews, the source, the campaign, and a named goal. One script, under 1 KB. Free with a link on your site, or €4 a month to take the link off. Run it next to Google Analytics for a week.

No card. Two minutes.

Sample data, last 30 days

2,578 pageviews · sample data, same script you install

Unique visitors reset at midnight UTC. A visit is the same person within 30 minutes.

Over time

Click a tile to add its line · vs previous 30 days

1326611 Oct19 Oct27 Oct4 Nov10 Nov

Notes on the chart

  • 11 OctGo live

  • 12 OctCampaign: launch

  • 9 NovHacker News

Top pages

  • /1,090
  • /pricing733
  • /docs564
  • /signup191

Referrers

  • Direct970
  • Google684
  • X324
  • Newsletter308

Same tiles and chart. Filters, live, and the rest of the board are in the full demo.

View sample dashboard

Live in two minutes.

  1. 01

    Create an account

    Sign in and add your site. Two minutes. No credit card.

  2. 02

    Paste one script

    One file, before the page closes. Hobby shows a Cookie Free Analytics link. Starter takes it off from €4. Serving it from your own hostname is optional — that recipe is on /docs.

  3. 03

    Read the dashboard

    Pageviews show up as they happen. Watch, first byte, Search Console, and Stripe charges sit on the same board when you connect them. No tag manager.

After they land, the site still has to answer.

Watch

Around the clock we check that your site still answers. More than a ping: Frankfurt every window; Dublin confirms a fail or a slow response; London only after a fail. Down means both Frankfurt and Dublin failed. A status page they can open without a login. On Starter and Growth.

First byte and Lighthouse

A Frankfurt GET we run, then Google lab scores 0–100. We only show the LCP Google measured.

A note for Monday

Period briefing from the tiles you already see. Weekly mail is the same numbers. No extra tracking.

What Watch checks

Watch is more than a ping. Each check is an HTTP GET from Europe — not a real browser. It is included on Starter and Growth, on a hostname you already added.

  • Three European cities

    Frankfurt checks every window. Dublin runs when Frankfurt failed, or when Frankfurt answered but first byte was slow. London is a third sample only after a fail — not for slowness.

  • DNS

    Each check resolves the hostname (IPv4, then IPv6 when needed) before it requests the URL. If the address set moves, we mail you.

  • HTTP status

    The response must match the status you expect. The default is 200–399. You can require a single code.

  • Redirects

    A redirect that leaves your hostname fails the check.

  • Page content

    You can require a short phrase in the body, or forbid one. A keyword check is its own row — the page can be up while the phrase is missing.

  • Speed

    We record first byte (TTFB) and total load time. Slow is based on first byte. The default threshold is 3 seconds; 0 turns Slow off.

  • Daily sitemap

    Once a day we fetch /sitemap.xml (or the path you set) and visit the first 40 URLs on the same hostname. Off-host URLs are skipped. A bad result is checked again after 30 minutes before we alert. Not an HTML crawl.

  • Certificate

    On a successful HTTPS check we read the leaf certificate visitors see. Mail at 14 days left, an incident at 3. We do not walk the full chain or grade ciphers.

  • Domain expiry

    Once a day we look up the registry (RDAP). Mail at 30 days left, an incident at 7.

  • Visitor 404s and 500s

    Watch counts cfa('404') and cfa('500') events from real visitors in the last hour. Over the threshold (default 10; 0 is off) we mail you. The hostname can still be Up.

  • Heartbeat

    On Starter and Growth you can POST a heartbeat for a cron or a job. If no beat arrives within the grace you set (minimum 60 seconds, maximum 24 hours), Watch opens a heartbeat incident. Empty grace is off.

  • TCP port

    You can add a TCP check for one port on a hostname you already added. That is a connect, not a port scan.

  • What Watch is not

    Watch is not a real browser and not a transaction test. It does not run JavaScript or click through a checkout.

A single slow sample never sends mail. Slow mail goes out only after Dublin confirms slowness in two consecutive windows. A real outage — two windows where Frankfurt and Dublin both failed — alerts promptly. One city down and one up stays Up.

Starter checks every 3 minutes (10 pages). Growth checks every minute (25 pages). Hobby shows the Watch tab; checks start on Starter.

Ping vs Watch

  • What it sends

    A simple ping
    Often ICMP echo, or one HTTP request
    Watch
    An HTTP GET — not a rendered page
  • Where from

    A simple ping
    Usually one location
    Watch
    Frankfurt every window; Dublin confirms a fail or a slow first byte; London only after a fail
  • What counts as up

    A simple ping
    Any answer may count as up
    Watch
    DNS, the status you expect (default 200–399), and no redirect off your hostname. Optional must-contain or must-not-contain phrases.
  • Speed

    A simple ping
    Sometimes round-trip time
    Watch
    First byte and total load time. Slow is first byte over your threshold (default 3 seconds).
  • Certificate and domain

    A simple ping
    No
    Watch
    Leaf certificate: mail at 14 days, incident at 3. Registry expiry (RDAP, once a day): mail at 30 days, incident at 7.
  • Sitemap and visitor errors

    A simple ping
    No
    Watch
    Daily sitemap, first 40 same-host URLs. Hourly visitor 404 and 500 rates from cfa('404') and cfa('500').
  • Cron jobs

    A simple ping
    No
    Watch
    Optional heartbeat on Starter and Growth. Empty grace is off.
  • When it alerts

    A simple ping
    Often on the first failed ping
    Watch
    Down after two windows where Frankfurt and Dublin both fail. Slow after two windows where both are slow. One slow sample never mails.
  • Browser checkout test

    A simple ping
    No
    Watch
    No — Watch does not run JavaScript or click through a checkout.

Features · Watch · What the script sends

Built in Europe

A European product, written here. Not a US analytics company with a GDPR checkbox on the pricing page.

Frankfurt and Ireland

Beacons hit Frankfurt. Pageviews sit in Ireland, not Virginia plus a DPA. Vercel is a US company. The split is on /europe.

No transfer for ads

We do not sell, enrich, or ship your traffic to a US advertising warehouse. The dashboard is the product.

Measured against 1 KB

930 B

gzipped · 1,515 B raw · budget 1,024 B · measured from /cf.js on this build.

94 B left in the default file. Clicks are a second script.

Five fields from the browser. Same-day visitors, no cookies, no fingerprint, no replay. How we count a person is on the method page if you want it.

How a visitor is counted

The consent gap

Consent reject is not “no visit”.

We count the landing, the source, and the named goal. Ads platforms still do conversion tags. Many sites run both.

Cookie reports go dark. Campaign UTMs never land. Cookie Free Analytics records the load.

Read the argument

If you searched for an alternative.

Not an ads suite, not replay, not open source. Funnels are a straight path on one UTC day, on Growth.

Questions people actually type.

What is cookie-free analytics?
Cookie-free analytics counts the pageview without a cookie, a localStorage id, or a lasting fingerprint. Pageviews, the source, and a named goal. One script, under 1 KB. No cookie banner for this script. If you still load Google Ads, Meta, or GA4, keep the banner for those tags. Your counsel owns the final call.
What happens when someone clicks Reject?
Cookie-based tools typically cannot set their identifier, so that person does not show up as a visitor or a conversion in those reports. Consent mode can model some of the hole; a model is not a count. Cookie Free Analytics does not set a cookie, so the pageview still records.
What is Cookie Free Analytics, exactly?
We count the landing, the source, and the named goal. Ads platforms still do conversion tags. Many sites run both.
Do I need a cookie banner for Cookie Free Analytics?
No cookie banner for this script. If you still load Google Ads, Meta, or GA4, keep the banner for those tags. Your counsel owns the final call.
Do I need a developer?
No for pageviews. On WordPress, paste the snippet in your theme header or any header-scripts plugin. Named goals take one line of code or data-cfa.
Does Hobby put a link on my site?
Yes. Starter and Growth turn it off.
Is Cookie Free Analytics a Google Analytics alternative?
We count the landing, the source, and the named goal. Ads platforms still do conversion tags. Many sites run both. For pageviews, sources, campaigns, and goals — yes. It is not an ads or attribution suite.
How much does cookieless analytics cost?
Hobby is free: 3 sites, 90 days, owner plus one viewer, a badge. Starter starts at €4 for 10k pageviews. Growth is €8 at that volume. A million Starter views is €26.
Where is Cookie Free Analytics hosted?
No cookies, just insights. Made and hosted in the EU. Beacons hit Frankfurt; pageviews sit in Ireland Postgres. Vercel is still a US company. Not forwarded to a US ad graph. Split on /europe.
Do you watch if the site is up?
Yes, on Starter and Growth. Watch is more than a ping: an HTTP GET from Frankfurt every window, Dublin to confirm a fail or a slow first byte, and London only after a fail. It also checks DNS, the status you expect, off-host redirects, optional page phrases, first byte and total time, the certificate, domain expiry, a daily sitemap, visitor 404/500 rates, and optional heartbeats. Not a real browser. Down only if Frankfurt and Dublin both fail twice. Hobby sees the tab. Recipe: /docs/watch.
Do goals count toward the volume?
No. Named events are included. Starter and Growth meter pageviews. Hobby is uncapped on pageviews — the cap is sites, history, and a badge.
Is Watch a second product?
No. More than a ping: HTTP, TLS, and DNS on a hostname you already added, plus a daily sitemap, visitor 404/500 rates, and optional heartbeats. Frankfurt every window; Dublin confirms a fail or a slow first byte; London only after a fail. Down only when both fail, twice. Slow means both cities were slow, two checks in a row — not one spike, and not down. It does not run JavaScript or click through a checkout. On Starter and Growth — it follows the invoice, no extra SKU.
Do you put Lighthouse in the 1 KB script?
No. First byte is a Frankfurt GET we run. Lighthouse scores come from Google PageSpeed Insights — lab, not field. Refresh always runs a new audit. We only show the LCP Google measured.

Count the load, not the Accept click.

Hobby is free and shows a Cookie Free Analytics link on your site. Starter removes it from €4 / month. No cookies, just insights. Made and hosted in the EU. 🇪🇺

Shipped August 2026. Run it next to GA for a week before you rip anything out.

1% of each paid charge goes to Stripe Climate (Frontier carbon removal). Not a neutrality badge. Hobby has no invoice, so no 1%.