<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Feasible</title>
    <link>https://feasible.lol/</link>
    <description>Simple, privacy-friendly website analytics. One page, no cookies, no banner. Unlimited sites and users, a million pageviews a month, $99 a year — not $1,390.</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>&#169; 2026 Cloudmanic Labs, LLC</copyright>
      <lastBuildDate>Sat, 05 Sep 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://feasible.lol/feed.xml" rel="self" type="application/rss+xml" />
      <item>
        <title>We wanted analytics, not a ransom note</title>
        <link>https://feasible.lol/blog/we-wanted-analytics-not-a-ransom-note/</link>
        <pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/we-wanted-analytics-not-a-ransom-note/</guid>
        <description>We loved Plausible. An unexpected traffic increase, a forced upgrade, and a warning that came too late led us to build Feasible. Here's the story.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;I paid for a year of analytics in March. By summer, the dashboards I&amp;rsquo;d already bought were behind a bigger number.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s a strange way to thank a paying customer.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s also how we accidentally started an analytics company. Which, I want to be clear, was nowhere on my list.&lt;/p&gt;&#xA;&lt;h2 id=&#34;twenty-years-of-not-finding-it&#34;&gt;Twenty years of not finding it&lt;/h2&gt;&#xA;&lt;p&gt;At &lt;a href=&#34;https://cloudmanic.com?utm_source=feasible.lol&#34;&gt;Cloudmanic Labs&lt;/a&gt; we&amp;rsquo;d been shopping for analytics we actually liked for most of two decades. It went about how you&amp;rsquo;d expect.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;What we used&lt;/th&gt;&#xA;          &lt;th&gt;How it ended&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Google Analytics&lt;/td&gt;&#xA;          &lt;td&gt;Checking three numbers took a scavenger hunt&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://clicky.com/&#34; rel=&#34;nofollow&#34;&gt;Clicky&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Genuinely good for years. We drifted apart&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Self-hosted &lt;a href=&#34;https://matomo.org/&#34; rel=&#34;nofollow&#34;&gt;Matomo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Congratulations, you now maintain a database&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;That last one deserves a note. Self-hosting didn&amp;rsquo;t save us money so much as convert money into chores. We already had plenty of chores.&lt;/p&gt;&#xA;&lt;p&gt;Then we found &lt;a href=&#34;https://plausible.io/&#34; rel=&#34;nofollow&#34;&gt;Plausible&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;One page. The numbers we wanted. No cookies. A product you could open, understand, and close. Somebody had built a small useful thing and resisted the urge to turn it into a cockpit, and I respected that enormously. I liked it immediately. I liked paying for it more.&lt;/p&gt;&#xA;&lt;p&gt;I want that on the record before anything else, because everything after this is going to sound like a complaint.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-ladder&#34;&gt;The ladder&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the part where a story about analytics becomes a story about arithmetic.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;When&lt;/th&gt;&#xA;          &lt;th&gt;What we paid&lt;/th&gt;&#xA;          &lt;th&gt;Why&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Year one&lt;/td&gt;&#xA;          &lt;td&gt;~$100/year&lt;/td&gt;&#xA;          &lt;td&gt;The plan we signed up for&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Later&lt;/td&gt;&#xA;          &lt;td&gt;~$200/year&lt;/td&gt;&#xA;          &lt;td&gt;Features we wanted moved up a tier&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Then&lt;/td&gt;&#xA;          &lt;td&gt;~$400/year&lt;/td&gt;&#xA;          &lt;td&gt;A free plugin got popular&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The jump to $200 stung a little. I paid it anyway, partly because the features were useful and partly because I wanted the company to exist. Voting with your wallet, and all that.&lt;/p&gt;&#xA;&lt;p&gt;Then we released &lt;a href=&#34;https://herdrplus.com/&#34;&gt;herdr plus&lt;/a&gt;, an open-source plugin. We put it out into the world and went back to work.&lt;/p&gt;&#xA;&lt;p&gt;People liked it. The site got traffic.&lt;/p&gt;&#xA;&lt;p&gt;Nice problem to have.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Our pageview count doubled. Our revenue from those pageviews stayed exactly zero.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Between the plugin&amp;rsquo;s site and our other small ones, we sailed past the allowance. The next rung on the ladder was about $400 a year.&lt;/p&gt;&#xA;&lt;p&gt;That was my limit. I&amp;rsquo;d already stretched what I thought this was worth at $200. I wasn&amp;rsquo;t going to double it again because we gave something away for free and it worked.&lt;/p&gt;&#xA;&lt;p&gt;I understand the argument for charging more as customers grow. More traffic often means more business. It&amp;rsquo;s a reasonable model and I&amp;rsquo;m not going to pretend otherwise.&lt;/p&gt;&#xA;&lt;p&gt;It just didn&amp;rsquo;t describe us. Our traffic doubled. Our bank account did not get the memo.&lt;/p&gt;&#xA;&lt;p&gt;Plenty of customers look at that bill and find it perfectly fair. Good for them, sincerely. It wasn&amp;rsquo;t fair for us.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-part-that-actually-made-me-leave&#34;&gt;The part that actually made me leave&lt;/h2&gt;&#xA;&lt;p&gt;The price alone would have moved us eventually. The way I found out moved us immediately.&lt;/p&gt;&#xA;&lt;p&gt;To be completely fair: Plausible publishes the policy. It&amp;rsquo;s right there. Its &lt;a href=&#34;https://plausible.io/docs/subscription-plans#traffic-spikes-and-overages&#34; rel=&#34;nofollow&#34;&gt;current documentation&lt;/a&gt;, checked September 5, 2026, says one month over the limit is fine. Two consecutive months over triggers an upgrade notice. A week after that notice, dashboards can be locked if you haven&amp;rsquo;t upgraded. Collection keeps running, settings stay accessible, and usage coming back under the limit can restore dashboards at the next billing cycle.&lt;/p&gt;&#xA;&lt;p&gt;So there&amp;rsquo;s a grace period. A generous one, honestly.&lt;/p&gt;&#xA;&lt;p&gt;I just didn&amp;rsquo;t know I was standing in it.&lt;/p&gt;&#xA;&lt;p&gt;I hadn&amp;rsquo;t gotten an early warning email. I hadn&amp;rsquo;t seen a banner telling me we were over while there was still time to do something. The first message I received was the one telling me the upgrade was now required.&lt;/p&gt;&#xA;&lt;p&gt;Which is a bit like being handed a speeding ticket by a cop who&amp;rsquo;s been following you silently for two months.&lt;/p&gt;&#xA;&lt;p&gt;We run a bunch of sites. I log in, look at one number, answer the question I came in with, and leave. I do not sit there mentally adding up pageviews and custom events across every property like a man doing his taxes for fun. The combined usage total exists in account settings. It was not part of my Tuesday.&lt;/p&gt;&#xA;&lt;p&gt;An email after month one would have solved this entire post out of existence:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve gone over. Here&amp;rsquo;s what&amp;rsquo;s driving it. Here&amp;rsquo;s how long you have.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it. That&amp;rsquo;s the whole fix. I could have untracked the plugin&amp;rsquo;s website in about ninety seconds. I didn&amp;rsquo;t care about its analytics. I cared about the four sites I&amp;rsquo;d been happily paying for since forever.&lt;/p&gt;&#xA;&lt;p&gt;By the time I knew there was a problem, dialing traffic back down wouldn&amp;rsquo;t undo the upgrade requirement in front of me. The choice on the table was: pay more, or lose the dashboards.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-word-for-that&#34;&gt;The word for that&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;d already paid for the year. In March. Up front.&lt;/p&gt;&#xA;&lt;p&gt;Canceling wouldn&amp;rsquo;t hand back the months of dashboard access I thought I&amp;rsquo;d bought. Paying more would let me keep using the thing I&amp;rsquo;d already paid for. I was also told I could downgrade later once usage dropped, and the difference would be credited as extra time.&lt;/p&gt;&#xA;&lt;p&gt;I didn&amp;rsquo;t want extra time. I wanted the time I&amp;rsquo;d already bought.&lt;/p&gt;&#xA;&lt;p&gt;There is a word for &amp;ldquo;pay us more or you don&amp;rsquo;t get your stuff back,&amp;rdquo; and it&amp;rsquo;s the title of this post.&lt;/p&gt;&#xA;&lt;p&gt;I wrote to support and laid it all out. I said we were probably an edge case. I offered to pull the extra site off tracking. Our actual business hadn&amp;rsquo;t changed, and one free side project had briefly made us look like a bigger customer than we are.&lt;/p&gt;&#xA;&lt;p&gt;The replies were slow, in my experience, and the answer left me facing the same upgrade.&lt;/p&gt;&#xA;&lt;p&gt;That landed harder than it would have from a company I didn&amp;rsquo;t care about. I&amp;rsquo;d liked supporting a business funded by customers instead of investors. I&amp;rsquo;d assumed that meant there was a human on the other end with room to say &amp;ldquo;yeah, that&amp;rsquo;s silly, let&amp;rsquo;s sort it out.&amp;rdquo;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A published policy can still treat a customer badly. Being able to point at the rule doesn&amp;rsquo;t make the outcome feel fair.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And look, I know the size of this. A couple hundred dollars. A dashboard. Nobody&amp;rsquo;s house burned down. I&amp;rsquo;m aware of exactly how this sounds.&lt;/p&gt;&#xA;&lt;p&gt;But small problems are cheap opportunities to make a customer glad they picked you. This one got resolved by the rulebook instead, and the rulebook lost you a customer who was writing you checks and telling his friends.&lt;/p&gt;&#xA;&lt;h2 id=&#34;everything-i-tried-instead-of-building-this&#34;&gt;Everything I tried instead of building this&lt;/h2&gt;&#xA;&lt;p&gt;I want to be honest about how badly I did not want to be here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Self-host the open-source edition.&lt;/strong&gt; Plausible ships one, so I read through the backend and priced out what I&amp;rsquo;d need to rent to run it properly. The savings weren&amp;rsquo;t there. For our setup I was getting uncomfortably close to just paying for hosted analytics again, except now I&amp;rsquo;d also be the on-call engineer.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;d already lived the self-hosted analytics chapter. I did not want a sequel with a bigger cast.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Switch to &lt;a href=&#34;https://usefathom.com/&#34;&gt;Fathom&lt;/a&gt;.&lt;/strong&gt; Pricing felt more reasonable to me. It was missing a few things I wanted, and I didn&amp;rsquo;t love how the dashboard looked.&lt;/p&gt;&#xA;&lt;p&gt;So I wrote a &lt;a href=&#34;https://github.com/Feasible-Analytics/fathom-plausible-theme&#34;&gt;Chrome extension to restyle it&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Read that again. I built and shipped a browser extension so that I could be comfortable giving somebody else money. That is how much I wanted this to be anyone&amp;rsquo;s problem but mine.&lt;/p&gt;&#xA;&lt;p&gt;Eventually a friend had to point out that I&amp;rsquo;d spent more effort avoiding the obvious next step than the obvious next step would take.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-we-built-it&#34;&gt;So we built it&lt;/h2&gt;&#xA;&lt;p&gt;We&amp;rsquo;ve been building software at Cloudmanic Labs for twenty years. We&amp;rsquo;ve run big systems. Keeping an analytics service online is not exotic work for us, and building software that runs on a modest amount of hardware is a thing we&amp;rsquo;re genuinely good at.&lt;/p&gt;&#xA;&lt;p&gt;The more I stared at the pricing, the less I could talk myself into it. &lt;a href=&#34;https://plausible.io/#pricing&#34; rel=&#34;nofollow&#34;&gt;Plausible Business&lt;/a&gt; at a million monthly pageviews is $1,390 a year, checked September 5, 2026, and includes up to ten sites. We weren&amp;rsquo;t anywhere near that volume. I was looking at where the ladder went.&lt;/p&gt;&#xA;&lt;p&gt;I don&amp;rsquo;t know anybody&amp;rsquo;s profit margin, and a server bill isn&amp;rsquo;t the whole cost of running a company. Support costs money. Development costs money. Backups, uptime, and answering emails at 11pm all cost money. We pay those bills too, so I&amp;rsquo;m not going to stand here and pretend the number should be zero.&lt;/p&gt;&#xA;&lt;p&gt;But we also know exactly &lt;a href=&#34;https://feasible.lol/blog/what-it-costs-to-count-a-million-pageviews/&#34;&gt;what it costs to store and count this much traffic&lt;/a&gt;, because we wrote it all down. We ran the math on charging a fraction of that price and still having a business at the end of it.&lt;/p&gt;&#xA;&lt;p&gt;The math worked. So here we are.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://feasible.lol/pricing/&#34;&gt;Feasible is $99 a year&lt;/a&gt;. Unlimited sites. Unlimited teammates. A million pageviews and custom events a month, combined. A dashboard that fits on one page and doesn&amp;rsquo;t require an afternoon.&lt;/p&gt;&#xA;&lt;div class=&#34;my-8 border-l-[3px] border-flag bg-surface p-6&#34;&gt;&#xA;    &lt;p class=&#34;font-display text-xs font-extrabold uppercase tracking-[0.08em] text-flag-700&#34;&gt;&#xA;      The part I care about most&#xA;    &lt;/p&gt;&#xA;  &lt;div class=&#34;[&amp;&gt;*:first-child]:mt-0 [&amp;&gt;*+*]:mt-4&#34;&gt;&lt;p&gt;Because I know precisely what it feels like to discover a grace period after it&amp;rsquo;s over, we send usage emails at &lt;strong&gt;70%&lt;/strong&gt;, &lt;strong&gt;85%&lt;/strong&gt;, and &lt;strong&gt;100%&lt;/strong&gt;. If you stay over, &lt;a href=&#34;https://feasible.lol/help/what-happens-if-i-go-over-a-million-pageviews/&#34;&gt;we ask you to reply&lt;/a&gt;. Replying stops the lock timer so an actual person can talk it through with you.&lt;/p&gt;&#xA;&lt;p&gt;We have limits too. We&amp;rsquo;d just like you to hear about ours while you can still do something about them.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;Yes, &amp;ldquo;Feasible&amp;rdquo; is a poke at &amp;ldquo;Plausible.&amp;rdquo; The &lt;code&gt;.lol&lt;/code&gt; is us not being subtle about it.&lt;/p&gt;&#xA;&lt;p&gt;I wanted analytics at a price I felt good about paying, from a company I felt good about paying. I couldn&amp;rsquo;t find both in the same place anymore.&lt;/p&gt;&#xA;&lt;p&gt;Now that&amp;rsquo;s our job.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
      <item>
        <title>Why we don&#39;t charge per site</title>
        <link>https://feasible.lol/blog/why-we-dont-charge-per-site/</link>
        <pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/why-we-dont-charge-per-site/</guid>
        <description>Per-site and per-seat pricing tolls the moment you'd install a tool again. We count pageviews and custom events - here's what everyone else counts.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;You launch a second site. It gets four hundred visitors a month. You go to add it to your analytics, and the answer is a bigger plan.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s the moment this post is about. Not the price - the shape of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-per-site-pricing-costs&#34;&gt;What per-site pricing costs&lt;/h2&gt;&#xA;&lt;p&gt;Published list prices, annual billing, checked September 3, 2026.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Vendor and plan&lt;/th&gt;&#xA;          &lt;th&gt;Per year at 1M pv/mo&lt;/th&gt;&#xA;          &lt;th&gt;Sites&lt;/th&gt;&#xA;          &lt;th&gt;Seats&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Starter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$690&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Owner only&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Growth&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$1,040&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Business&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$1,390&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://usefathom.com/pricing&#34;&gt;Fathom&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$600&lt;/td&gt;&#xA;          &lt;td&gt;75&lt;/td&gt;&#xA;          &lt;td&gt;Not published&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.simpleanalytics.com/pricing&#34;&gt;Simple Analytics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$600&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://matomo.org/pricing/&#34;&gt;Matomo Cloud&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$2,040&lt;/td&gt;&#xA;          &lt;td&gt;30&lt;/td&gt;&#xA;          &lt;td&gt;30&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pirsch.io/pricing&#34;&gt;Pirsch Standard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$540&lt;/td&gt;&#xA;          &lt;td&gt;50&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://umami.is/pricing&#34;&gt;Umami Pro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$240&lt;/td&gt;&#xA;          &lt;td&gt;20&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Feasible&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;$99&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Some of those are generous, and worth saying so. Pirsch gives you fifty sites and unlimited teammates on the cheap plan. Fathom sells extra sites in packs of fifty for $100 a year, which is a fair price for a real thing. Umami&amp;rsquo;s twenty sites for $240 is good value by any reading.&lt;/p&gt;&#xA;&lt;p&gt;But look at the first three rows as a ladder rather than three products. One site. Three sites. Ten sites. The site count is the thing that moves you up it, and at Simple Analytics the same is true of people - one user is included and each additional seat is $240 a year.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s our objection, and it&amp;rsquo;s structural, not personal. &lt;strong&gt;A per-site price puts a toll booth at the exact moment a customer is about to make you more useful to them.&lt;/strong&gt; The second site is when a tool stops being a thing you check and starts being the thing you check. The fifth colleague you add is the one who makes it hard to leave. Metering both is metering the habit you spent all that money acquiring.&lt;/p&gt;&#xA;&lt;p&gt;A second site costs us almost nothing. A million pageviews a month is &lt;a href=&#34;https://feasible.lol/blog/what-it-costs-to-count-a-million-pageviews/&#34;&gt;about 3.5 GB a year and 0.4 writes a second&lt;/a&gt;, and splitting that across nine sites instead of one doesn&amp;rsquo;t change the arithmetic. Neither does a sixth login. So we don&amp;rsquo;t charge for either, and if that ever stops being true we&amp;rsquo;ll tell you what changed instead of quietly adding a tier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;compare-the-billing-unit&#34;&gt;Compare the billing unit&lt;/h2&gt;&#xA;&lt;p&gt;This matters more than the site count, and almost nobody puts it on a comparison table.&lt;/p&gt;&#xA;&lt;p&gt;Those vendors don&amp;rsquo;t all count the same thing. Sourced from each vendor&amp;rsquo;s own pages and FAQs, checked September 3, 2026:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Vendor&lt;/th&gt;&#xA;          &lt;th&gt;What counts against the limit&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;pageviews + custom events&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://usefathom.com/pricing&#34;&gt;Fathom&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;pageviews + custom events - their FAQ says those requests are &amp;ldquo;counted as if they were pageviews&amp;rdquo;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.simpleanalytics.com/pricing&#34;&gt;Simple Analytics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;datapoints&lt;/strong&gt; - pageviews, events, and &lt;em&gt;each stored event property&lt;/em&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://umami.is/pricing&#34;&gt;Umami&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;events&lt;/strong&gt; - pageviews, custom events, and each stored property&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pirsch.io/pricing&#34;&gt;Pirsch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;pageviews + custom events + 10% of session-extension events; deleted domains keep counting until the limit resets&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://matomo.org/faq/general/what-is-a-hit/&#34;&gt;Matomo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;hits&lt;/strong&gt; - &amp;ldquo;a tracked page view, an event tracking, a download, an outlink, an onsite search or a content tracking request&amp;rdquo;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Feasible&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;pageviews + custom events&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Now put that next to a normal Tuesday afternoon decision: &lt;em&gt;let&amp;rsquo;s start tracking outbound clicks.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;On Matomo&amp;rsquo;s definition, every outbound click is a hit. So are downloads. So are site searches. A site with all three turned on can generate two or three hits per pageview, which means a million-pageview site can need Matomo&amp;rsquo;s 2M or 5M tier - $399 or $975 a month rather than $204 (&lt;a href=&#34;https://matomo.org/pricing/&#34;&gt;matomo.org/pricing&lt;/a&gt;, checked September 3, 2026). Your traffic didn&amp;rsquo;t change. Your instrumentation did.&lt;/p&gt;&#xA;&lt;p&gt;On the datapoint model it&amp;rsquo;s finer-grained still. A pageview carrying five properties can bill as six datapoints. Add a property to an event you fire on every page and you&amp;rsquo;ve just multiplied your bill by a number you&amp;rsquo;d have to sit down to work out.&lt;/p&gt;&#xA;&lt;p&gt;None of that is hidden - every one of those definitions is on the vendor&amp;rsquo;s own site, which is why we can link it. It&amp;rsquo;s just that it&amp;rsquo;s on a FAQ page and the price is on a pricing page, and you make the decision looking at the second one.&lt;/p&gt;&#xA;&lt;p&gt;The practical effect is a slow tax on describing your business. Every extra field on an event is a line item somewhere, so the tool asks you to think about the bill every time you consider measuring something properly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;So here&amp;rsquo;s ours, plainly. We count pageviews and custom events.&lt;/strong&gt; That&amp;rsquo;s the same unit Plausible and Fathom use, and it includes the outbound clicks, file downloads and form submissions our script fires on its own. Turn on outbound-click tracking and our number moves too. We&amp;rsquo;re not going to run a page that pretends otherwise.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;What we don&amp;rsquo;t count is the describing.&lt;/strong&gt; Properties are free, however many you hang on an event. So are the engagement and scroll pings behind time-on-page and scroll depth, because you can&amp;rsquo;t switch those off. So are sites, seats, goals and funnels. A sixth field on your purchase event costs nothing here and a tier somewhere else.&lt;/p&gt;&#xA;&lt;p&gt;Two units, both of which you can count yourself before you buy. That&amp;rsquo;s as simple as we could make it and still be telling the truth.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-the-limit-is&#34;&gt;What the limit is&lt;/h2&gt;&#xA;&lt;p&gt;A million pageviews and custom events a month, between them. Per account, per calendar month, UTC. Unlimited sites, unlimited teammates, unlimited properties, five years of retention. $9.99 a month or $99 a year.&lt;/p&gt;&#xA;&lt;p&gt;A limit has to exist somewhere. Storage is real, CPU is real, and a plan with no number on it is a plan that gets repriced the first time someone points a firehose at it - usually by adding a tier and moving everyone up one. We&amp;rsquo;d rather publish the number now.&lt;/p&gt;&#xA;&lt;p&gt;What we care more about is what happens when you cross it, because that&amp;rsquo;s where a pricing page stops being marketing.&lt;/p&gt;&#xA;&lt;p&gt;Emails at 70%, 85% and 100%. &lt;strong&gt;One full month over costs you nothing at all.&lt;/strong&gt; Two consecutive complete months over and we email asking you to reply, with fourteen days on the clock. Only if nobody replies does the dashboard lock - and even then collection never stops, nothing is deleted, and export keeps working. Come back in range, or reply to the email, and it unlocks straight away. There&amp;rsquo;s no overage charge in the product because we didn&amp;rsquo;t write one.&lt;/p&gt;&#xA;&lt;p&gt;Compare that to a policy on the other side, and this is a real published one: Pirsch states that &amp;ldquo;If you reach the usage limit before the end of your billing period, your access will be limited to the day you reached the limit,&amp;rdquo; with five days to upgrade or wait for the reset (&lt;a href=&#34;https://pirsch.io/pricing&#34;&gt;pirsch.io/pricing&lt;/a&gt;, checked September 3, 2026).&lt;/p&gt;&#xA;&lt;p&gt;And credit where it&amp;rsquo;s due, because Fathom&amp;rsquo;s policy here is better than most and we&amp;rsquo;re not going to pretend otherwise. Theirs: &amp;ldquo;We&amp;rsquo;ll never turn your analytics off for occasional traffic spikes… if you go over for two months in a row, we&amp;rsquo;ll let you know we&amp;rsquo;re upgrading you&amp;rdquo; (&lt;a href=&#34;https://usefathom.com/pricing&#34;&gt;usefathom.com/pricing&lt;/a&gt;, checked September 3, 2026). That&amp;rsquo;s the right instinct. The difference is what the upgrade costs.&lt;/p&gt;&#xA;&lt;p&gt;One last thing that belongs in a pricing post more than a features post. &lt;strong&gt;Raw event export is a button here&lt;/strong&gt;, in every plan and every copy of the software, hosted or self-hosted - one ZIP with the roll-up CSVs and the raw rows. At Plausible, scheduled raw event export is an Enterprise line item (&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;plausible.io&lt;/a&gt;, checked September 3, 2026), which means there&amp;rsquo;s no published price at which you can get your own raw events out on a self-serve plan.&lt;/p&gt;&#xA;&lt;p&gt;Getting your data out shouldn&amp;rsquo;t require the expensive plan. You should be able to leave without a project.&lt;/p&gt;&#xA;&lt;p&gt;Above a million pageviews a month, email &lt;code&gt;sales@feasible.lol&lt;/code&gt; and we&amp;rsquo;ll work it out. Everything else is on &lt;a href=&#34;https://feasible.lol/pricing/&#34;&gt;the pricing page&lt;/a&gt;, and the &lt;a href=&#34;https://feasible.lol/compare/&#34;&gt;comparisons&lt;/a&gt; have the rest of the ladders with their sources.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
      <item>
        <title>One page, no menus, on purpose</title>
        <link>https://feasible.lol/blog/one-page-no-menus-on-purpose/</link>
        <pubDate>Mon, 31 Aug 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/one-page-no-menus-on-purpose/</guid>
        <description>Fifteen metrics, six tiles, one screen and no report builder. What we left out of the dashboard, and why leaving it out was the hard part.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;The Feasible dashboard is one screen. Six numbers across the top, one graph, four report cards, one wide card underneath. No menu. No report list. No place to go.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;ve either got what you came for by then or the product has failed, and we&amp;rsquo;d rather find that out than hide it behind navigation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fifteen-metrics&#34;&gt;Fifteen metrics&lt;/h2&gt;&#xA;&lt;p&gt;There are fifteen metrics in the entire product: visitors, visits, pageviews, events, bounce rate, visit duration, views per visit, time on page, scroll depth, exit rate, conversion rate, group conversion rate, total revenue, average revenue, revenue per visitor.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it. There&amp;rsquo;s no sixteenth waiting behind a menu.&lt;/p&gt;&#xA;&lt;p&gt;Six of them are on screen the moment the page loads - unique visitors, total visits, total pageviews, views per visit, bounce rate, visit duration - and each tile is a button that redraws the graph with that metric. The other nine live where they mean something: time on page and scroll depth on pages, conversion rate on goals, revenue on revenue goals.&lt;/p&gt;&#xA;&lt;p&gt;A metric list is a product decision disguised as a feature list. Every number you add is a number somebody has to rule out before they trust the one they wanted. Fifteen is already more than most people use.&lt;/p&gt;&#xA;&lt;p&gt;The graph under the tiles is hand-drawn SVG. The whole dashboard has two runtime dependencies - React and React DOM. No chart library, no map library, no router, no state library. The map is generated country outlines and the flags are Unicode characters, so opening your stats page makes no request to anyone but us.&lt;/p&gt;&#xA;&lt;h2 id=&#34;filters-stay-on-the-page&#34;&gt;Filters stay on the page&lt;/h2&gt;&#xA;&lt;p&gt;The other way products get big is by growing a second screen for narrowing things down. A segment builder. A saved-view list. A modal with three dropdowns.&lt;/p&gt;&#xA;&lt;p&gt;We put filters on the page as a row of pills, and you build them by clicking things.&lt;/p&gt;&#xA;&lt;p&gt;Click a country on the map and you&amp;rsquo;re filtered to that country. Click a page row and you&amp;rsquo;re filtered to that page. Click a browser and a channel and now you&amp;rsquo;re looking at Firefox users from organic search on one URL, still on the same screen, still with the same six tiles at the top comparing against the previous period.&lt;/p&gt;&#xA;&lt;p&gt;Six operators, no more: is, is not, contains, does not contain, matches regex, does not match regex. Repeated filters combine with AND, multiple values inside one filter combine with OR. Escape clears the lot.&lt;/p&gt;&#xA;&lt;p&gt;And the filters live in the URL as readable parameters, which is the part that turns out to matter most in practice. &lt;code&gt;?f=is,country,DE&amp;amp;f=is,device,Mobile&lt;/code&gt; is a link. You can paste it into Slack and the person who opens it sees what you saw. That&amp;rsquo;s the feature that replaced saved segments, and we think it&amp;rsquo;s the better one - but you should know we don&amp;rsquo;t have saved segments, because some people want them.&lt;/p&gt;&#xA;&lt;p&gt;There are thirteen date-range presets and every one has a single-key shortcut. &lt;code&gt;W&lt;/code&gt; is last 7 days. &lt;code&gt;F&lt;/code&gt; is last 28. &lt;code&gt;L&lt;/code&gt; is last 12 months. &lt;code&gt;X&lt;/code&gt; toggles comparison. &lt;code&gt;?&lt;/code&gt; lists them all. A keyboard shortcut is the cheapest speed you can give somebody, and nobody has to discover it for the product to work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;scope-changes-the-conversion-rate&#34;&gt;Scope changes the conversion rate&lt;/h2&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s the specific, unglamorous thing we care most about getting right.&lt;/p&gt;&#xA;&lt;p&gt;Custom properties in Feasible are declared as &lt;strong&gt;event-scoped&lt;/strong&gt; or &lt;strong&gt;session-scoped&lt;/strong&gt;, and you pick when you create them. Event scope means the property describes one hit - the plan name on a checkout event, the file name on a download. Session scope means it describes the whole visit - the logged-in plan tier, the A/B variant, the country of the account.&lt;/p&gt;&#xA;&lt;p&gt;That choice sets the denominator on every conversion rate you&amp;rsquo;ll ever read off that property.&lt;/p&gt;&#xA;&lt;p&gt;Say you fire &lt;code&gt;signup&lt;/code&gt; with a property &lt;code&gt;source=email&lt;/code&gt;, and you want the conversion rate for email traffic. If the property is event-scoped, the only events carrying &lt;code&gt;source=email&lt;/code&gt; are the signups themselves - so your denominator is signups, and your conversion rate is 100%. It&amp;rsquo;s a true number and it&amp;rsquo;s useless, and worse, it looks fine. If the property is session-scoped, it&amp;rsquo;s attached to the visit, so the denominator is everyone who arrived from email and the rate is the one you wanted.&lt;/p&gt;&#xA;&lt;p&gt;Same data. Same query. Two very different numbers, and only one of them is the question you asked.&lt;/p&gt;&#xA;&lt;p&gt;Most tools let you attach a property and figure this out later, usually in a meeting, usually loudly. We make you say which one it is at creation time and we show the scope next to the property name in the report, because a conversion rate with an unexamined denominator isn&amp;rsquo;t a metric, it&amp;rsquo;s a rumor.&lt;/p&gt;&#xA;&lt;p&gt;The same instinct shows up elsewhere. Ask for bounce rate broken down by page and Feasible refuses the query rather than answering it - bounce is a property of a visit, not of a page, and a number that quietly redefines itself to fit your breakdown is worse than an error message. And events that didn&amp;rsquo;t carry a property land in a labeled &lt;code&gt;(none)&lt;/code&gt; row instead of silently vanishing from the total, so the column adds up to what you think it adds up to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-give-up&#34;&gt;What you give up&lt;/h2&gt;&#xA;&lt;p&gt;Plainly, because you&amp;rsquo;ll find out anyway. Every argument for &lt;a href=&#34;https://feasible.lol/simple-web-analytics/&#34;&gt;simple web analytics&lt;/a&gt; has a bill attached, and this is ours.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;You can&amp;rsquo;t build an arbitrary custom report.&lt;/strong&gt; There&amp;rsquo;s no report builder, no drag-and-drop dimension canvas, no saving a view and naming it. If your job is to answer a question nobody has asked before, in a shape nobody has used before, this is the wrong screen.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There&amp;rsquo;s no saved segment list, no session replay, no heatmaps, no cohort or retention report, and no A/B testing.&lt;/strong&gt; Referrer is a filter, not its own report card. There&amp;rsquo;s no search-terms report either - you can connect a Search Console account, but nothing pulls the data across and nothing would read it back if it did.&lt;/p&gt;&#xA;&lt;p&gt;Some of those are missing because we haven&amp;rsquo;t built them. Some are missing because we don&amp;rsquo;t think they belong in a tool this size, and session replay is the clearest case: a recording of one person&amp;rsquo;s session is a different product with a different privacy story, and the UK&amp;rsquo;s own analytics exemption draws the line in that place.&lt;/p&gt;&#xA;&lt;p&gt;The escape hatch is that we didn&amp;rsquo;t lock the door. The &lt;a href=&#34;https://feasible.lol/features/&#34;&gt;Stats API&lt;/a&gt; is in every plan and every build - there&amp;rsquo;s no plan check in that code at all - and raw event export is a button that produces a ZIP with the roll-up CSVs and the raw rows. So when you do need the arbitrary report, you take your data and build it somewhere designed for arbitrary reports. That&amp;rsquo;s a better answer than us growing a worse version of that product inside this one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;who-shouldnt-use-this&#34;&gt;Who shouldn&amp;rsquo;t use this&lt;/h2&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re an analyst who lives in explorations, you&amp;rsquo;ll be bored in an hour. If you need session recordings or heatmaps to do your job, we don&amp;rsquo;t have them and won&amp;rsquo;t pretend otherwise. If you have a genuine attribution modeling problem across paid channels, that&amp;rsquo;s a different category of tool and you should buy it.&lt;/p&gt;&#xA;&lt;p&gt;If you run a site, and once a week you want to know which pages people read, where they came from, and whether the thing you changed worked - that&amp;rsquo;s the whole design brief, and it fits on one screen.&lt;/p&gt;&#xA;&lt;p&gt;The trade was never &amp;ldquo;fewer features, cheaper price.&amp;rdquo; It was that every feature we add is a feature somebody has to walk past on the way to their answer. We just decided to count that as a cost.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://feasible.lol/features/&#34;&gt;See what&amp;rsquo;s in it&lt;/a&gt;, or &lt;a href=&#34;https://feasible.lol/pricing/&#34;&gt;what it costs&lt;/a&gt;.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
      <item>
        <title>So do you need a cookie banner?</title>
        <link>https://feasible.lol/blog/so-do-you-need-a-cookie-banner/</link>
        <pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/so-do-you-need-a-cookie-banner/</guid>
        <description>What ePrivacy Article 5(3) says, what the UK's new analytics exemption requires, and what Feasible stores on a visitor's device.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;Article 5(3) of the ePrivacy Directive doesn&amp;rsquo;t contain the word &amp;ldquo;cookie.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s not a technicality. It&amp;rsquo;s why most of what you&amp;rsquo;ve read about consent banners is aimed slightly to the left of the actual rule, and why &amp;ldquo;we&amp;rsquo;re cookieless, so you don&amp;rsquo;t need a banner&amp;rdquo; is a weaker sentence than the people saying it think.&lt;/p&gt;&#xA;&lt;p&gt;We sell an analytics tool, so everything below is either a quote from the rule or a link to the regulator - and we&amp;rsquo;ll say plainly where our own product doesn&amp;rsquo;t clear a bar.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-the-rule-says&#34;&gt;What the rule says&lt;/h2&gt;&#xA;&lt;p&gt;Directive 2002/58/EC, Article 5(3), as amended in 2009. This is the sentence everything hangs on:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Member States shall ensure that the &lt;strong&gt;storing of information, or the gaining of access to information already stored, in the terminal equipment&lt;/strong&gt; of a subscriber or user is only allowed on condition that the subscriber or user concerned has given his or her consent… This shall not prevent any technical storage or access for the sole purpose of carrying out the transmission of a communication…, or as &lt;strong&gt;strictly necessary&lt;/strong&gt; in order for the provider of an information society service &lt;strong&gt;explicitly requested&lt;/strong&gt; by the subscriber or user to provide the service.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;(&lt;a href=&#34;https://www.legislation.gov.uk/eudr/2002/58/article/5&#34;&gt;legislation.gov.uk&lt;/a&gt;, checked September 3, 2026.)&lt;/p&gt;&#xA;&lt;p&gt;Three things to take from that.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The trigger is &amp;ldquo;information,&amp;rdquo; not &amp;ldquo;personal data.&amp;rdquo;&lt;/strong&gt; The rule bites even when nothing you store is personal. A random number counts.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s technology-neutral.&lt;/strong&gt; Cookies, &lt;code&gt;localStorage&lt;/code&gt;, &lt;code&gt;sessionStorage&lt;/code&gt;, IndexedDB, cache tricks - none of them are named, because it&amp;rsquo;s about the act of storing, not the mechanism.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;There are two exemptions:&lt;/strong&gt; storage needed to carry the communication, and storage strictly necessary for a service the user explicitly asked for.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-strictly-necessary-doesnt-cover-analytics&#34;&gt;Why &amp;ldquo;strictly necessary&amp;rdquo; doesn&amp;rsquo;t cover analytics&lt;/h2&gt;&#xA;&lt;p&gt;Analytics fails the second exemption on the same word every time: &lt;em&gt;explicitly requested&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Your visitor asked for the article. They didn&amp;rsquo;t ask to be counted. So under the classic EU reading, measurement has never fitted exemption two, no matter how privacy-respecting the tool is. A vendor telling you otherwise is arguing a position, not reporting a rule.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cookieless-doesnt-settle-the-question&#34;&gt;Cookieless doesn&amp;rsquo;t settle the question&lt;/h2&gt;&#xA;&lt;p&gt;&amp;ldquo;&lt;a href=&#34;https://feasible.lol/cookieless-analytics/&#34;&gt;Cookieless&lt;/a&gt; means no banner&amp;rdquo; rests on a claim that Article 5(3) is never engaged at all, because nothing is written to and nothing is read from the device.&lt;/p&gt;&#xA;&lt;p&gt;The European Data Protection Board tightened that in &lt;em&gt;Guidelines 2/2023 on the Technical Scope of Article 5(3)&lt;/em&gt;, &lt;a href=&#34;https://www.edpb.europa.eu/system/files/2024-10/edpb_guidelines_202302_technical_scope_art_53_eprivacydirective_v2_en_0.pdf&#34;&gt;version 2.0 adopted October 7, 2024&lt;/a&gt;. Their reading is broad:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Storage and access &amp;ldquo;&lt;strong&gt;do not need to be both present&lt;/strong&gt;&amp;rdquo; - either one engages the rule (§30).&lt;/li&gt;&#xA;&lt;li&gt;JavaScript that &amp;ldquo;instructs the browser of the user to send asynchronous requests with the targeted information&amp;rdquo; is access, and &amp;ldquo;clearly falls within the scope&amp;rdquo; (§33).&lt;/li&gt;&#xA;&lt;li&gt;A hashed unique identifier doesn&amp;rsquo;t escape it, because the browser was instructed to send it (§63).&lt;/li&gt;&#xA;&lt;li&gt;The storage medium is irrelevant - hard disk, SSD, RAM, even CPU cache (§38).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But the EDPB also says the thing every summary leaves out. From §56: &amp;ldquo;the applicability of this article &lt;strong&gt;does not systematically mean that consent needs to be collected&lt;/strong&gt;… in each case it would have to be assessed if a consent is needed or whether an exemption under Article 5(3) ePD could apply.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;So the question isn&amp;rsquo;t &lt;em&gt;does this tool touch the device&lt;/em&gt;. It&amp;rsquo;s &lt;em&gt;what is it for, and can anyone be identified with it&lt;/em&gt;. Which is how the UK now writes it down.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-uk-analytics-exemption&#34;&gt;The UK analytics exemption&lt;/h2&gt;&#xA;&lt;p&gt;The Data (Use and Access) Act 2025, section 112 and Schedule 12, inserted a new &lt;strong&gt;Schedule A1&lt;/strong&gt; into PECR, in force &lt;strong&gt;February 5, 2026&lt;/strong&gt; (&lt;a href=&#34;https://www.legislation.gov.uk/ukpga/2025/18/schedule/12/enacted&#34;&gt;the statute&lt;/a&gt;, &lt;a href=&#34;https://www.legislation.gov.uk/uksi/2026/82/contents/made&#34;&gt;the commencement regulations&lt;/a&gt;). Biggest change in this area in years, and barely reported.&lt;/p&gt;&#xA;&lt;p&gt;Paragraph 5 exempts storage or access where the sole purpose is to &amp;ldquo;collect information for statistical purposes about how the service is used with a view to making improvements,&amp;rdquo; the information isn&amp;rsquo;t shared, the user gets &amp;ldquo;clear and comprehensive information&amp;rdquo; about the purpose, and the user has &amp;ldquo;a simple means of objecting, free of charge,&amp;rdquo; and doesn&amp;rsquo;t object.&lt;/p&gt;&#xA;&lt;p&gt;The ICO calls it the analytics exception and draws the boundary in one sentence: &amp;ldquo;&lt;strong&gt;It is about how your service is used, not about who uses it.&lt;/strong&gt;&amp;rdquo; Their published examples (&lt;a href=&#34;https://ico.org.uk/for-organisations/direct-marketing-and-privacy-and-electronic-communications/guidance-on-the-use-of-storage-and-access-technologies/what-are-the-exceptions/&#34;&gt;ICO guidance on storage and access technologies&lt;/a&gt;, last updated April 29, 2026):&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Covered&lt;/th&gt;&#xA;          &lt;th&gt;Not covered&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Visits page by page, traffic, user journeys&lt;/td&gt;&#xA;          &lt;td&gt;Logs or recordings of individual visitors&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Scroll depth and on-page interactions&lt;/td&gt;&#xA;          &lt;td&gt;Whether someone viewed or clicked an advert&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Device type, browser and OS versions&lt;/td&gt;&#xA;          &lt;td&gt;Linking a visitor ID to conversions shared with ad partners&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Referrer, search, campaign source&lt;/td&gt;&#xA;          &lt;td&gt;Tracking or profiling individuals&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Coarse geolocation at city or region level&lt;/td&gt;&#xA;          &lt;td&gt;Anything for online advertising&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Two conditions vendors skate past, and we won&amp;rsquo;t. The exemption &lt;strong&gt;requires&lt;/strong&gt; you to explain the analytics in your privacy notice, and it &lt;strong&gt;requires&lt;/strong&gt; a simple free way to object - a toggle that&amp;rsquo;s on by default is fine, browser settings alone are not. A site running &amp;ldquo;exempt&amp;rdquo; analytics with no disclosure and no opt-out isn&amp;rsquo;t covered by the exemption it&amp;rsquo;s claiming.&lt;/p&gt;&#xA;&lt;p&gt;Third-party tools are explicitly allowed - but your provider &amp;ldquo;must be a processor, not a joint controller,&amp;rdquo; must use the data only to improve &lt;em&gt;your&lt;/em&gt; service, and must not pool it with anything else.&lt;/p&gt;&#xA;&lt;h2 id=&#34;france-uses-self-assessment&#34;&gt;France uses self-assessment&lt;/h2&gt;&#xA;&lt;p&gt;CNIL&amp;rsquo;s audience-measurement exemption under Article 82 of the &lt;em&gt;loi Informatique et Libertés&lt;/em&gt; is narrower. A tracker&amp;rsquo;s purpose must be strictly limited to measuring that one site, for the publisher alone, producing anonymous statistics only - and it must not cross-reference with other processing, pass non-anonymous data to third parties, or let a person be followed across sites or apps (&lt;a href=&#34;https://www.cnil.fr/fr/cookies-et-autres-traceurs/regles/cookies-solutions-pour-les-outils-de-mesure-daudience&#34;&gt;CNIL, July 4, 2025&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;Their self-assessment tool is unusually specific: referrer limited to host or domain; no CRM or campaign IDs imported from URLs; browser and OS reduced to major version; and if a fingerprint is used at all, the hash must carry a site-specific component &lt;em&gt;and&lt;/em&gt; a time component, so it can&amp;rsquo;t follow anyone anywhere or for long.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Nobody can say &amp;ldquo;CNIL-approved&amp;rdquo; any more.&lt;/strong&gt; CNIL retired its published list of evaluated tools in July 2025 and replaced it with self-assessment, and it forbids the phrasing outright - you may not present a solution as &lt;em&gt;« certifiée »&lt;/em&gt; or &lt;em&gt;« validée par la CNIL »&lt;/em&gt;. A vendor claiming it is describing a program that no longer exists.&lt;/p&gt;&#xA;&lt;h2 id=&#34;gdpr-doesnt-go-away-either&#34;&gt;GDPR doesn&amp;rsquo;t go away either&lt;/h2&gt;&#xA;&lt;p&gt;Two rulebooks. Clearing ePrivacy doesn&amp;rsquo;t clear GDPR, and &lt;a href=&#34;https://feasible.lol/gdpr-compliant-analytics/&#34;&gt;what GDPR-friendly analytics means&lt;/a&gt; is written out on its own page.&lt;/p&gt;&#xA;&lt;p&gt;If a tool processes an IP address, even for a moment, that can be personal data - &lt;em&gt;Breyer&lt;/em&gt; (C-582/14, October 19, 2016) held a dynamic IP is personal data for a site operator &lt;strong&gt;if&lt;/strong&gt; that operator has legal means to identify the visitor using information held by the access provider. Conditional, not blanket. Where it applies you need an Article 6 basis, and legitimate interest under 6(1)(f) is the normal answer, which brings a balancing test and a right to object.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://feasible.lol/privacy-friendly-analytics/&#34;&gt;Privacy-friendly analytics&lt;/a&gt; doesn&amp;rsquo;t make GDPR stop applying. It makes it apply to a much smaller, shorter-lived pile of data with an easier case to make.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-feasible-stores&#34;&gt;What Feasible stores&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;No cookies.&lt;/strong&gt; None, ever, for visitors on a tracked site.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;We do use &lt;code&gt;localStorage&lt;/code&gt;, for two things.&lt;/strong&gt; Every event is written to a small retry queue before the request goes out, so a dropped connection doesn&amp;rsquo;t become a missing pageview; a successful response deletes it. And if you set &lt;code&gt;feasible_ignore&lt;/code&gt; yourself, we skip you. That&amp;rsquo;s storage on the device, and under Article 5(3) storage is storage. We&amp;rsquo;re not going to pretend it isn&amp;rsquo;t there to get a cleaner sentence.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;No visitor identifier is stored on the device at all.&lt;/strong&gt; The visitor hash lives on our side: a daily-rotating SipHash of user agent, IP and domain. The salt changes every UTC day and the old one is unrecoverable, so nobody - us included - can connect Tuesday&amp;rsquo;s visitor to Wednesday&amp;rsquo;s. It&amp;rsquo;s site-scoped, so it can&amp;rsquo;t follow anyone between sites.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It&amp;rsquo;s pseudonymous, not anonymous.&lt;/strong&gt; We won&amp;rsquo;t use the second word. Pseudonymous data is still personal data, and a vendor who upgrades that adjective is telling you something about the rest of their claims.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The raw IP never reaches disk.&lt;/strong&gt; Geolocation and hashing happen in the ingest tier and the address is discarded before anything is written. Geolocation is a local lookup against DB-IP Lite - country, region, city, no network call per pageview, nothing finer.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Where we don&amp;rsquo;t clear a bar:&lt;/strong&gt; we&amp;rsquo;re a US company in Oregon with no EU region, and transfers run on standard contractual clauses through &lt;a href=&#34;https://feasible.lol/dpa/&#34;&gt;our DPA&lt;/a&gt;. CNIL&amp;rsquo;s own suggested alternative for anyone worried about transfers is a tool that makes none, and that isn&amp;rsquo;t us. If EU-only hosting is your requirement, buy from someone who has it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;do-you-need-one&#34;&gt;Do you need one?&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Most sites running Feasible won&amp;rsquo;t need a consent banner.&lt;/strong&gt; The UK now has a statutory exemption written for this, and the practices it describes are the practices we implement. Elsewhere in the EU it&amp;rsquo;s a strong case rather than a settled one.&lt;/p&gt;&#xA;&lt;p&gt;Do two things either way, because both are cheap and both are conditions of the UK exemption: put a plain sentence in your privacy policy saying you measure traffic and how, and give people a simple free way to opt out.&lt;/p&gt;&#xA;&lt;p&gt;And if you&amp;rsquo;re somewhere strict, or regulated, or you&amp;rsquo;d just rather be certain - ask your own lawyer. &lt;strong&gt;We&amp;rsquo;re an analytics company, not your counsel, and nothing here is legal advice.&lt;/strong&gt; Every rule above is linked so they can start from the source instead of from us.&lt;/p&gt;&#xA;&lt;p&gt;More on the mechanism in &lt;a href=&#34;https://feasible.lol/docs/&#34;&gt;the docs&lt;/a&gt;, and the rest of what we don&amp;rsquo;t collect is on &lt;a href=&#34;https://feasible.lol/privacy/&#34;&gt;the privacy page&lt;/a&gt;.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
      <item>
        <title>Google Analytics is free. Here&#39;s the bill</title>
        <link>https://feasible.lol/blog/google-analytics-is-free-heres-the-bill/</link>
        <pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/google-analytics-is-free-heres-the-bill/</guid>
        <description>GA4 costs $0. It also costs a consent banner, a 148 KB script, thresholded rows you can't unhide, and the history Google deleted in 2024.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;Google Analytics 4 costs nothing. That part is true, and it&amp;rsquo;s why roughly everyone uses it.&lt;/p&gt;&#xA;&lt;p&gt;The bill arrives somewhere other than the invoice. Here are the line items we can source.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-consent-banner&#34;&gt;The consent banner&lt;/h2&gt;&#xA;&lt;p&gt;GA4 sets cookies. Cookies are storage on the visitor&amp;rsquo;s device, which puts the tag squarely inside Article 5(3) of the ePrivacy Directive, and in the EU and UK that means a consent request before the tag runs.&lt;/p&gt;&#xA;&lt;p&gt;Every visitor who declines is a visitor missing from your numbers.&lt;/p&gt;&#xA;&lt;p&gt;How many? We&amp;rsquo;re not going to give you a percentage, because the confident ones circulating don&amp;rsquo;t have a study behind them. The same goes for ad blocking: it varies enormously by audience - a mainstream consumer site might lose under 10%, a developer-heavy audience can lose more than half - and anybody quoting you a single number measured it on their traffic, not yours.&lt;/p&gt;&#xA;&lt;p&gt;What&amp;rsquo;s certain is the direction. Your GA4 total is smaller than your real total, by an amount nobody can tell you.&lt;/p&gt;&#xA;&lt;p&gt;There&amp;rsquo;s a second-order cost too. Since early March 2024, EEA advertisers have had to implement Consent Mode v2 to keep measurement working, and Google is explicit about the reach of that: &amp;ldquo;The requirements also apply if you are using Google Analytics data in Google Ads, Search Ads 360, or Display &amp;amp; Video 360&amp;rdquo; (&lt;a href=&#34;https://support.google.com/google-ads/answer/13695607&#34;&gt;support.google.com/google-ads/answer/13695607&lt;/a&gt;, checked September 3, 2026). Not implementing it &amp;ldquo;may lead to loss in data&amp;rdquo; - their phrasing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;missing-rows&#34;&gt;Missing rows&lt;/h2&gt;&#xA;&lt;p&gt;This is the one that costs you trust with whoever you report to.&lt;/p&gt;&#xA;&lt;p&gt;GA4 applies &lt;strong&gt;data thresholding&lt;/strong&gt;: when a report includes demographic data, or search query information, or just a narrow date range with low counts, it removes rows rather than showing them. Google&amp;rsquo;s own page is blunt about your options - &amp;ldquo;Data thresholds are system defined. You can&amp;rsquo;t adjust them&amp;rdquo; (&lt;a href=&#34;https://support.google.com/analytics/answer/9383630&#34;&gt;support.google.com/analytics/answer/9383630&lt;/a&gt;, checked September 3, 2026). The remedy Google offers is to widen your date range.&lt;/p&gt;&#xA;&lt;p&gt;Whole rows. Not noised, not estimated. Gone, with a small icon.&lt;/p&gt;&#xA;&lt;p&gt;Then &lt;strong&gt;sampling&lt;/strong&gt;. The event-level query quota is &amp;ldquo;10 million events for standard Google Analytics properties and up to 1 billion events for Google Analytics 360 properties&amp;rdquo; (&lt;a href=&#34;https://support.google.com/analytics/answer/13331292&#34;&gt;support.google.com/analytics/answer/13331292&lt;/a&gt;, checked September 3, 2026). You&amp;rsquo;ll read in a lot of places that standard reports are never sampled. Google&amp;rsquo;s own comparison of reporting surfaces groups Reports, Insights and Explorations together and marks sampling as &lt;strong&gt;possible&lt;/strong&gt; for all three. Only the BigQuery export is marked as never sampled.&lt;/p&gt;&#xA;&lt;p&gt;And &lt;strong&gt;cardinality&lt;/strong&gt;. A dimension with more than 500 unique values in a day is high-cardinality, and GA4 has a cardinality limit of 50,000 values (&lt;a href=&#34;https://support.google.com/analytics/answer/12226705&#34;&gt;support.google.com/analytics/answer/12226705&lt;/a&gt;, checked September 3, 2026). Past that, values collapse into a row called &lt;code&gt;(other)&lt;/code&gt;. If you have a lot of URLs, some of your URLs are now &lt;code&gt;(other)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Three separate mechanisms, all on by default, none of which you can switch off, and the escape hatch for all three is an export into a data warehouse.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fourteen-months&#34;&gt;Fourteen months&lt;/h2&gt;&#xA;&lt;p&gt;You can set GA4&amp;rsquo;s retention for user-level data to 2 months or 14 months. That&amp;rsquo;s the whole list (&lt;a href=&#34;https://support.google.com/analytics/answer/7667196&#34;&gt;support.google.com/analytics/answer/7667196&lt;/a&gt;, checked September 3, 2026). 26, 38 and 50 months exist only on 360.&lt;/p&gt;&#xA;&lt;p&gt;Get the scope right, because a lot of posts don&amp;rsquo;t: the setting &amp;ldquo;does not affect standard aggregated reports.&amp;rdquo; Your headline pageview chart survives. What hits the wall at 14 months is Explorations and funnel reports - the analysis you&amp;rsquo;d sit down to do. And Google notes that when a standard property becomes Large, the event-level retention setting is &amp;ldquo;automatically reduced to 2 months&amp;rdquo; and older data is &amp;ldquo;permanently deleted.&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;For comparison, since we&amp;rsquo;re a vendor and you should hear it from us plainly: Feasible keeps five years on the $99 plan, and Plausible&amp;rsquo;s Business plan keeps five (&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;plausible.io&lt;/a&gt;, checked September 3, 2026).&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-history-thats-already-gone&#34;&gt;The history that&amp;rsquo;s already gone&lt;/h2&gt;&#xA;&lt;p&gt;This is Google&amp;rsquo;s sentence, not ours.&lt;/p&gt;&#xA;&lt;p&gt;From the Universal Analytics sunset page, last updated July 16, 2025: &amp;ldquo;Starting the week of July 1, 2024: You will not have access to any current or historical Universal Analytics data.&amp;rdquo; The same page says the data would be &amp;ldquo;permanently deleted by Google and won&amp;rsquo;t be recoverable&amp;rdquo; (&lt;a href=&#34;https://support.google.com/analytics/answer/11583528&#34;&gt;support.google.com/analytics/answer/11583528&lt;/a&gt;, checked September 3, 2026).&lt;/p&gt;&#xA;&lt;p&gt;Standard UA properties had already stopped processing hits on July 1, 2023. Nothing migrated into GA4 - not goals, not configuration, not history. Anyone who didn&amp;rsquo;t export in that window lost a decade of numbers. &lt;a href=&#34;https://feasible.lol/migrate/from-google-analytics/&#34;&gt;Migrating off Google Analytics&lt;/a&gt; to anything has the same shape: export first, switch second.&lt;/p&gt;&#xA;&lt;p&gt;You can&amp;rsquo;t price that line. You can only notice that it happened, and ask what your current tool would do to you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-148-kb-script&#34;&gt;A 148 KB script&lt;/h2&gt;&#xA;&lt;p&gt;Measured on September 3, 2026, with &lt;code&gt;curl -H &#39;Accept-Encoding: identity&#39; &amp;lt;url&amp;gt; | gzip -9 | wc -c&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Script&lt;/th&gt;&#xA;          &lt;th&gt;Raw&lt;/th&gt;&#xA;          &lt;th&gt;gzip -9&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Google &lt;code&gt;gtag.js&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;427,563 B&lt;/td&gt;&#xA;          &lt;td&gt;148,451 B&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Feasible&lt;/td&gt;&#xA;          &lt;td&gt;7,099 B&lt;/td&gt;&#xA;          &lt;td&gt;3,377 B&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Over the wire on the day we measured, &lt;code&gt;gtag.js&lt;/code&gt; came in at 147,179 bytes against our roughly 3.4 KB. About 43 times. And &lt;code&gt;gtag.js&lt;/code&gt; is only the first request - it pulls more payloads once it loads, so the real figure is worse than the table.&lt;/p&gt;&#xA;&lt;p&gt;Reproduce it yourself. Scripts change; that&amp;rsquo;s why we date ours.&lt;/p&gt;&#xA;&lt;p&gt;While we&amp;rsquo;re being straight about measurements: our script isn&amp;rsquo;t the smallest in the category. Plausible&amp;rsquo;s is 1,291 bytes gzipped, comfortably under half of ours. The 43× is against Google, and that&amp;rsquo;s the only script comparison we&amp;rsquo;ll make.&lt;/p&gt;&#xA;&lt;h2 id=&#34;your-visitors-behavior-funds-advertising&#34;&gt;Your visitors&amp;rsquo; behavior funds advertising&lt;/h2&gt;&#xA;&lt;p&gt;Google&amp;rsquo;s revenue is advertising. GA4 data flows into Google Ads, Search Ads 360 and Display &amp;amp; Video 360 - that&amp;rsquo;s not an accusation, it&amp;rsquo;s the reason the Consent Mode v2 requirement above is written the way it is.&lt;/p&gt;&#xA;&lt;p&gt;Now the part where we correct a claim that would help us.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Google Analytics isn&amp;rsquo;t illegal in the EU.&lt;/strong&gt; Between 2021 and 2023, data protection authorities in Austria, France, Italy, Denmark, Finland, Norway and Sweden all found against GA in specific cases - most with reprimands and no fine, though Sweden&amp;rsquo;s IMY fined Tele2 SEK 12 million in June 2023, upheld on appeal in October 2025 (&lt;a href=&#34;https://www.imy.se/en/news/four-companies-must-stop-using-google-analytics/&#34;&gt;imy.se&lt;/a&gt;, checked September 3, 2026). Every one of those decisions turned on EU-to-US transfers after &lt;em&gt;Schrems II&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;That ground moved on July 10, 2023, when the European Commission adopted the EU-US Data Privacy Framework adequacy decision. Google is certified under it, which removes the transfer basis every one of those decisions rested on. The General Court dismissed a challenge to the framework in September 2025, and an appeal is pending at the CJEU as Case C-703/25 P with no ruling yet.&lt;/p&gt;&#xA;&lt;p&gt;So the version: those rulings happened, they&amp;rsquo;re worth knowing about, and they aren&amp;rsquo;t a live prohibition today. Anyone still telling you GA4 is banned in Europe is running a page they haven&amp;rsquo;t updated since 2023.&lt;/p&gt;&#xA;&lt;p&gt;The durable objection isn&amp;rsquo;t legal. It&amp;rsquo;s that the analysis you can do is capped, the rows you can see are edited, the history has a shelf life, and the counterparty&amp;rsquo;s business is advertising.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-time-cost&#34;&gt;The time cost&lt;/h2&gt;&#xA;&lt;p&gt;The last line item is the one nobody puts on a slide. From r/GoogleAnalytics, March 12, 2026:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Google Analytics 4 boggles my mind. It&amp;rsquo;s overly complicated and some of the most useful data points are harder to find or missing altogether.&amp;rdquo;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;u/NowExciting, &lt;a href=&#34;https://www.reddit.com/r/GoogleAnalytics/comments/1rs072x/i_had_no_idea_analytics_had_gotten_so_bad/&#34;&gt;thread&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can find a thousand of those. What they have in common isn&amp;rsquo;t privacy - it&amp;rsquo;s that a small business owner wanting to know how many people read a page has to know which of several similar-looking metrics answers that question, and where the report lives.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s what &lt;a href=&#34;https://feasible.lol/features/dashboard/&#34;&gt;a one-page dashboard&lt;/a&gt; is for, and why we built ours the way we did.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-99-buys-instead&#34;&gt;What $99 buys instead&lt;/h2&gt;&#xA;&lt;p&gt;No banner for most sites. No thresholding, ever - if a row exists we show it. Five years of retention. A 3,377-byte script. Raw event export as a button, not a plan tier. Unlimited sites and unlimited teammates. A &lt;a href=&#34;https://feasible.lol/features/&#34;&gt;health panel&lt;/a&gt; that names every dropped event and why, because failing silently is the actual sin here.&lt;/p&gt;&#xA;&lt;p&gt;And a company whose revenue is your subscription, which is a shorter sentence than any privacy policy.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;re weighing it up, &lt;a href=&#34;https://feasible.lol/compare/google-analytics/&#34;&gt;the head-to-head is here&lt;/a&gt; and &lt;a href=&#34;https://feasible.lol/pricing/&#34;&gt;the price is here&lt;/a&gt;. If you&amp;rsquo;re staying on GA4 - plenty of people should, and the BigQuery export is good - export your data on a schedule anyway. July 2024 is the argument for that, and Google made it.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
      <item>
        <title>What it costs to count a million pageviews</title>
        <link>https://feasible.lol/blog/what-it-costs-to-count-a-million-pageviews/</link>
        <pubDate>Fri, 21 Aug 2026 00:00:00 +0000</pubDate>
        <guid>https://feasible.lol/blog/what-it-costs-to-count-a-million-pageviews/</guid>
        <description>A million pageviews a month is about 3.5 GB a year and a $6 server. Here's the measured arithmetic, and the published price lists next to it.</description>
        <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/">
          &lt;p&gt;A pageview, stored the way we store it, is 210 bytes. A million of them a month, kept for a full year, is about 3.5 GB.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s most of the post. But nobody&amp;rsquo;s analytics invoice looks like a 3.5 GB file, so it&amp;rsquo;s worth walking the rest of the way slowly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-one-million-pageviews-need&#34;&gt;What one million pageviews need&lt;/h2&gt;&#xA;&lt;p&gt;A million pageviews isn&amp;rsquo;t a million rows. Scroll and engagement pings ride along so you can have time-on-page and scroll depth, so the event count for a million-pageview month is about 1.39 million. Our benchmark stored 1,394,408 of them and the account database came to 293.8 MB, plus 4.2 MB for the system database that holds accounts, sites and sessions. Twelve of those months is about 3.5 GB.&lt;/p&gt;&#xA;&lt;p&gt;The write rate is the part people get wrong. A million pageviews a month &lt;em&gt;sounds&lt;/em&gt; like load. Spread over a month it&amp;rsquo;s about 0.4 writes a second.&lt;/p&gt;&#xA;&lt;p&gt;One Feasible process accepts around 6,000 events a second through the whole path - parse, geolocate, hash, drop the IP, commit. Median time to accept one is 13 microseconds, and it stays there regardless of what else is writing. So the machine is doing roughly one fifteen-thousandth of what it could.&lt;/p&gt;&#xA;&lt;p&gt;Reads are the same story, for a boring reason: the reports are built when the events arrive, not when you open the page. Twenty-eight days of top pages comes back in 81 to 111 milliseconds. Twelve months takes 0.4 to 0.7 seconds.&lt;/p&gt;&#xA;&lt;p&gt;The floor we publish is one CPU core, 512 MB of RAM and a gigabyte of disk. What we&amp;rsquo;d put a busy site on is two cores and 2 GB, because headroom is cheap and pager duty isn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;p&gt;Those figures are from &lt;code&gt;internal/bench/RESULTS.md&lt;/code&gt; in &lt;a href=&#34;https://github.com/Feasible-Analytics/app.feasible.lol&#34;&gt;our repo&lt;/a&gt;, measured on a laptop. The repo&amp;rsquo;s public and so is the benchmark. Run it and tell us if we&amp;rsquo;re wrong.&lt;/p&gt;&#xA;&lt;h2 id=&#34;server-cost&#34;&gt;Server cost&lt;/h2&gt;&#xA;&lt;p&gt;This part is just shopping. Prices below are list, checked September 3, 2026.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Host&lt;/th&gt;&#xA;          &lt;th&gt;Plan&lt;/th&gt;&#xA;          &lt;th&gt;RAM&lt;/th&gt;&#xA;          &lt;th&gt;Transfer&lt;/th&gt;&#xA;          &lt;th&gt;Per month&lt;/th&gt;&#xA;          &lt;th&gt;Per year&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.digitalocean.com/pricing/droplets&#34;&gt;DigitalOcean&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Basic, 1 vCPU&lt;/td&gt;&#xA;          &lt;td&gt;512 MiB&lt;/td&gt;&#xA;          &lt;td&gt;500 GiB&lt;/td&gt;&#xA;          &lt;td&gt;$4.00&lt;/td&gt;&#xA;          &lt;td&gt;$48&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.digitalocean.com/pricing/droplets&#34;&gt;DigitalOcean&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Basic, 1 vCPU&lt;/td&gt;&#xA;          &lt;td&gt;1 GiB&lt;/td&gt;&#xA;          &lt;td&gt;1,000 GiB&lt;/td&gt;&#xA;          &lt;td&gt;$6.00&lt;/td&gt;&#xA;          &lt;td&gt;$72&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://api.vultr.com/v2/plans&#34;&gt;Vultr&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;vc2-1c-1gb&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;1 GB&lt;/td&gt;&#xA;          &lt;td&gt;1 TB&lt;/td&gt;&#xA;          &lt;td&gt;$5.00&lt;/td&gt;&#xA;          &lt;td&gt;$60&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.hetzner.com/cloud/&#34;&gt;Hetzner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;CX23, 2 vCPU&lt;/td&gt;&#xA;          &lt;td&gt;4 GB&lt;/td&gt;&#xA;          &lt;td&gt;20 TB&lt;/td&gt;&#xA;          &lt;td&gt;€5.49 net&lt;/td&gt;&#xA;          &lt;td&gt;~€66 net&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;One note on that last row, because stale numbers circulate: Hetzner raised prices on June 15, 2026 - the CX23 went from €3.99 to €5.49, and their ARM boxes are now &lt;em&gt;more&lt;/em&gt; expensive than the Intel ones. Any Hetzner figure from an older blog post is wrong, including the ones we used to quote at each other.&lt;/p&gt;&#xA;&lt;p&gt;Then bandwidth. Our tracking script is 3,377 bytes gzipped, 7,099 raw. Assume a pessimistic 30% of pageviews fetch it fresh rather than from cache: 300,000 × 3,377 bytes is about 1 GB a month, against the 500 GiB that $4 droplet includes. It&amp;rsquo;s a rounding error, and it would still be a rounding error if we were ten times worse at caching.&lt;/p&gt;&#xA;&lt;p&gt;Storage fits on the $6 box. CPU is asleep. Bandwidth doesn&amp;rsquo;t register. The box is $48 to $72 a year.&lt;/p&gt;&#xA;&lt;p&gt;We don&amp;rsquo;t run one box, to be clear. Ingest is a separate tier from the app, and there&amp;rsquo;s more than one of each, because a single machine that reboots is an outage and we&amp;rsquo;d rather it weren&amp;rsquo;t. That&amp;rsquo;s a redundancy bill. It isn&amp;rsquo;t a large one, and it doesn&amp;rsquo;t scale with your pageviews the way an invoice does.&lt;/p&gt;&#xA;&lt;h2 id=&#34;other-architectures-cost-more&#34;&gt;Other architectures cost more&lt;/h2&gt;&#xA;&lt;p&gt;This is the caveat, and it cuts against us in one place.&lt;/p&gt;&#xA;&lt;p&gt;Plausible&amp;rsquo;s Community Edition runs three containers - their application, PostgreSQL and ClickHouse - and their README asks for &amp;ldquo;at least 2 GB of RAM&amp;rdquo; (&lt;a href=&#34;https://github.com/plausible/community-edition&#34;&gt;github.com/plausible/community-edition&lt;/a&gt;, checked September 3, 2026). ClickHouse&amp;rsquo;s own documentation recommends &lt;strong&gt;32 GB&lt;/strong&gt; and warns that below 16 GB &amp;ldquo;you may experience various memory exceptions because default settings do not match this amount of memory&amp;rdquo; (&lt;a href=&#34;https://clickhouse.com/docs/operations/tips&#34;&gt;clickhouse.com/docs/operations/tips&lt;/a&gt;, checked September 3, 2026).&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s not a knock on either. ClickHouse is a column store, and column stores are extraordinary at the queries analytics asks. On ClickBench - ClickHouse&amp;rsquo;s own benchmark, built on 100 million real pageview rows - ClickHouse stores a row in 145 bytes where SQLite takes 758. If we told you SQLite was more efficient on disk, we&amp;rsquo;d be lying to you by a factor of 5.2.&lt;/p&gt;&#xA;&lt;p&gt;What SQLite buys us isn&amp;rsquo;t bytes. It&amp;rsquo;s that there&amp;rsquo;s one file, one process, nothing to tune, no cluster to keep quorate, and a backup that&amp;rsquo;s a file copy. On a machine this small, that&amp;rsquo;s worth more than compression.&lt;/p&gt;&#xA;&lt;p&gt;And credit where it&amp;rsquo;s due before we talk about money: the privacy-friendly analytics companies got the important thing right, and got it right first. No cookies, no cross-site identity, no selling behavior to advertisers. They made that normal while everyone else was still arguing about it. The disagreement below is about a price, not about principles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vendor-prices&#34;&gt;Vendor prices&lt;/h2&gt;&#xA;&lt;p&gt;Annual list price, annual billing, at 1,000,000 pageviews a month. Checked September 3, 2026.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Vendor and plan&lt;/th&gt;&#xA;          &lt;th&gt;Per year&lt;/th&gt;&#xA;          &lt;th&gt;Sites&lt;/th&gt;&#xA;          &lt;th&gt;Seats&lt;/th&gt;&#xA;          &lt;th&gt;Retention&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://matomo.org/pricing/&#34;&gt;Matomo Cloud&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$2,040&lt;/td&gt;&#xA;          &lt;td&gt;30&lt;/td&gt;&#xA;          &lt;td&gt;30&lt;/td&gt;&#xA;          &lt;td&gt;Configurable&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Business&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$1,390&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;5 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Growth&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$1,040&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;3 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plausible.io/#pricing&#34;&gt;Plausible Starter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$690&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;Owner only&lt;/td&gt;&#xA;          &lt;td&gt;3 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://usefathom.com/pricing&#34;&gt;Fathom&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$600&lt;/td&gt;&#xA;          &lt;td&gt;75&lt;/td&gt;&#xA;          &lt;td&gt;Not published&lt;/td&gt;&#xA;          &lt;td&gt;Forever&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.simpleanalytics.com/pricing&#34;&gt;Simple Analytics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$600&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;3 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pirsch.io/pricing&#34;&gt;Pirsch Standard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$540&lt;/td&gt;&#xA;          &lt;td&gt;50&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://umami.is/pricing&#34;&gt;Umami Pro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;$240&lt;/td&gt;&#xA;          &lt;td&gt;20&lt;/td&gt;&#xA;          &lt;td&gt;10&lt;/td&gt;&#xA;          &lt;td&gt;2 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Feasible&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;$99&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;          &lt;td&gt;Unlimited&lt;/td&gt;&#xA;          &lt;td&gt;5 years&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Two things about that table that matter more than the ordering.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The plans aren&amp;rsquo;t the same plan.&lt;/strong&gt; Plausible&amp;rsquo;s $690 Starter is one site and no teammates, and custom properties, funnels and the Stats API all start on Business at $1,390. Comparing our price to Starter&amp;rsquo;s would be the same trick we&amp;rsquo;re complaining about, so we&amp;rsquo;ve listed all three.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The units aren&amp;rsquo;t the same unit.&lt;/strong&gt; Matomo bills in &lt;em&gt;hits&lt;/em&gt; - &lt;a href=&#34;https://matomo.org/faq/general/what-is-a-hit/&#34;&gt;their own definition&lt;/a&gt; counts &amp;ldquo;a tracked page view, an event tracking, a download, an outlink, an onsite search or a content tracking request.&amp;rdquo; Turn on download and outbound-link tracking and a million pageviews can be two or three million hits, which is a different row on that price list. Simple Analytics and Umami count each stored event &lt;em&gt;property&lt;/em&gt; as a unit of its own. We wrote a &lt;a href=&#34;https://feasible.lol/blog/why-we-dont-charge-per-site/&#34;&gt;separate post about billing units&lt;/a&gt;, because it&amp;rsquo;s the part of the bill nobody puts on the comparison page.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-the-gap-comes-from&#34;&gt;Where the gap comes from&lt;/h2&gt;&#xA;&lt;p&gt;Some of it is real. Not the privacy part - &lt;a href=&#34;https://feasible.lol/privacy-friendly-analytics/&#34;&gt;privacy-friendly analytics&lt;/a&gt; is a design decision, not a line on an invoice. But a stack with a column store, a relational database and a queue in front of it costs more to run than one binary and a file - genuinely, not as a rhetorical device. Support costs money. Salaries cost money. A company that raised outside money has a number it has to hit, and that number is set by the people who wrote the check, not by the server.&lt;/p&gt;&#xA;&lt;p&gt;Our costs are different because our company is different. One plan. No sales team. No investors. Twenty-odd years of &lt;a href=&#34;https://cloudmanic.com?utm_source=feasible.lol&#34;&gt;Cloudmanic Labs&lt;/a&gt; paying for itself. That isn&amp;rsquo;t a virtue, it&amp;rsquo;s a starting position - but it&amp;rsquo;s why $99 works here and might not work somewhere else.&lt;/p&gt;&#xA;&lt;p&gt;So: $48 to $72 a year for the machine. $99 to $2,040 a year for the service. We charge $99, both numbers are above, and we&amp;rsquo;re not going to draw the line between them for you.&lt;/p&gt;&#xA;&lt;p&gt;We registered a &lt;code&gt;.lol&lt;/code&gt; domain before we ran any of this. Running it didn&amp;rsquo;t change our minds.&lt;/p&gt;&#xA;&lt;p&gt;The arithmetic is all reproducible - &lt;a href=&#34;https://feasible.lol/pricing/&#34;&gt;the pricing page&lt;/a&gt; has our side of it, &lt;a href=&#34;https://feasible.lol/compare/&#34;&gt;the comparisons&lt;/a&gt; have theirs, and the benchmark is in the repo. If a number here is wrong, mail &lt;code&gt;help@feasible.lol&lt;/code&gt; and we&amp;rsquo;ll fix the page.&lt;/p&gt;&#xA;
        </content:encoded>
      </item>
  </channel>
</rss>
