Know where the money comes from.

Analytics that joins every Stripe charge back to the visit that earned it.

<script defer data-site="mf_pub_..." src="https://metricfly.app/t.js"></script>

One script tag. Anywhere your site already runs.

  • WordPress
  • Shopify
  • Webflow
  • Framer
  • Ghost
  • and anywhere else
The whole point

Your biggest channel is not your best one.

VisitorsRevenue
  • Google$2.26/ visitor
    1,917
    $4,336
  • ChatGPTAI$8.65/ visitor
    337
    $2,915
  • Reddit$0.37/ visitor
    842
    $310
  • Newsletter$10.20/ visitor
    118
    $1,204
3.8×more money per visitor from ChatGPT than from Google.Example figures.
The product

Every visit, joined to the money.

1.5KB

Tracker size, enforced by the build

0

Cookies, storage keys, IPs stored

4

AI referrers split out, not lumped in

3days

Free, no card asked for

Sixty seconds

Installed before your coffee lands.

01

Paste one line

A defer script tag in your head. It starts recording pageviews immediately — no build step, no SDK, no configuration file.

<script defer data-site="mf_pub_..."
  src="https://metricfly.app/t.js"></script>
02

Add two words to Checkout

Pass the visitor ref into Stripe. That is the whole integration, and it is what turns a visit into an attributable sale.

client_reference_id: metricfly.stripeRef()
03

Read the answer on Monday

The weekly email says which channel sent visitors and which channel sent money. Usually not the same one.

ChatGPT · 337 visitors · $2,915
Google  · 1,917 visitors · $4,336
What you get

Numbers you can act on, not just look at.

Other tools count visits. This one counts the ones that paid.

Revenue attribution

Connect Stripe read-only. Every charge joins back to the session that produced it.

ChatGPT337$2,915
Google1,917$4,336
Reddit842$310
Newsletter118$1,204

AI traffic, first-class

Their own category and their own trend, not folded into “other”.

ChatGPTPerplexityClaudeGeminiCopilot“other”

Privacy by architecture

No cookie, no storage key, no IP. That is why there is no consent banner.

  • IP address
  • User agent
  • Cookie
  • localStorage

1.5 KB, not 45

Zero dependencies, async, fails silently. The build fails if it ever grows.

METRICFLY1.5 KB
Plausible1.6 KB
GA445 KB

Funnels & journeys

Drop-off and revenue per step, over real sessions.

Landing4,182
Pricing1,924
Checkout502
Paid293

Live world map

Who is on your site right now, and where.

Both halves

No banner, because there is nothing to consent to.

What we store

  • A rotating daily hash
  • Page path
  • Referrer host
  • Country, region, city
  • Device, browser, OS
  • Timestamp

What we never store

  • IP address
  • User agent string
  • Cookie
  • localStorage key
  • Fingerprint
  • Anything cross-site

Enforced by a build step, not by a policy — npm run privacy:audit fails the deploy if any of the right-hand column ever appears.

Honestly

Two of these three columns are already fine.

METRICFLYPlausible-classGoogle Analytics
Revenue per source
AI referrers split out
No consent banner
No cookies
Script size1.5 KB~1.6 KB~45 KB
Setup1 line1 lineTag manager
Pricing

Traffic-based plans that match your growth.

Move the slider to your traffic. 3 days free, no card.

Up to 200k
10k10M+

Starter

$29/month

  • 200k monthly events
  • 1 website
  • 1 team member
  • 3 years of data retention
  • All analytics screens
  • Revenue attribution
  • AI referrer breakdown
  • Funnels & journeys
  • API, CLI & MCP
  • Social media mentions
  • X / Twitter link attribution
Start free

Growth

$59/month

  • 200k monthly events
  • 30 websites
  • 30 team members
  • 5 years of data retention
  • Everything in Starter
  • Social media mentions
  • X / Twitter link attribution
  • Priority support
Start free

Warned at 80% and 90%. Collection stops at 100%.

Questions

The ones that actually matter.

Really no consent banner?

A banner is required for storing something on a visitor’s device or processing personal data. We do neither — the full field list is published, so your lawyer can check it in five minutes.

What is the catch with the daily hash?

Someone visiting Monday and Tuesday counts twice, so there is no returning-visitor rate. That is a real cost. The alternative is a persistent identifier, which is exactly what makes a banner necessary.

How does revenue attribution work?

Pass metricfly.stripeRef() into Stripe Checkout as client_reference_id — two words in code you already have. We join the charge back to the session that produced it.

What about money you cannot match?

It gets its own row, labelled unattributed. We never spread it across your sources — that would make every figure slightly fictional.

Will it slow my site down?

1.5 KB, deferred, no dependencies, no layout reads. The build fails if it ever grows past 5 KB.

What if I go over my plan?

Collection stops at 100%, and resumes when the period resets or you upgrade. Warned at 80% and 90%, and the dashboard says so in words rather than showing a flat line.

What if my card fails?

24 hours to update it, with the deadline in the banner. Long enough that a card expiring overnight costs you nothing; short enough that it is not a free month.

Can I leave?

Export everything as JSON, or delete the account and its data, both from the billing screen. Neither needs to go through us.

Find out what actually converts.

Thirty days free. No card, no sales call, no consent banner to write.

Start free
<script defer data-site="mf_pub_..." src="https://metricfly.app/t.js"></script>