Yield
Self-hosted · one-time purchase

Stop counting pageviews.
Start seeing revenue.

Yield ties every visit, referrer and campaign to the payment it produced — on your own server. One number leads every report: what a visitor is actually worth.

1.8 KB gzipped script · no external requests · your database

The Yield overview: revenue per visitor, a visitors and revenue trend, and channels ranked by revenue

The core loop

Five steps, and everything else is a view on top

  1. 01

    Identify

    A first-party id, or a daily-rotating anonymous one in cookieless mode.

  2. 02

    Record

    Every pageview, referrer, UTM set and goal is tied to that id.

  3. 03

    Carry

    The id is stamped onto the checkout link, or set by your server.

  4. 04

    Stitch

    The payment webhook arrives and is matched back to the visit.

  5. 05

    Report

    Revenue per visitor, by channel, campaign and landing page.

What you get

A full analytics suite, with revenue in front

Revenue per visitor, first

The headline number is what each visitor is actually worth. Pageviews are context, not the point.

Attribution that survives checkout

The visitor id rides into the payment provider and comes back on the webhook, so revenue lands on the campaign that earned it.

Realtime with intent

See who is on the site now, what they are reading, and which sessions look like the ones that pay.

Funnels and goals

Ordered, multi-step funnels with per-step drop-off, and a reserved goal vocabulary your provider fills in automatically.

Cookieless when you need it

A daily-rotating anonymous id derived server-side. No cookie, no consent banner, same revenue reporting.

Public dashboards

Share a read-only report with a client or your audience. Password protect it, or hide revenue entirely.

Web and mobile

The same numbers, wherever you check them

A Livewire dashboard for the desk and a Flutter app for iOS and Android. Figures are formatted on the server, so the two surfaces can never disagree about what you earned.

  • Overview, realtime and channel reports
  • Per-visitor journey with payment history
  • Funnels with per-step drop-off
  • Public share links for clients
Get the app Android · 37.8 MB

Points at this demo install. iOS ships as source in the package; build it against your own server.

The Yield mobile app showing revenue per visitor and the realtime visitor feed

Native handlers for the gateways you already use

Signature-verified webhooks, with a generic Payment API for anything else.

Stripe Paddle Lemon Squeezy Polar Paystack Payment API

Reserved goals, understood out of the box

payment free_trial trial_converted subscription_started subscription_upgraded subscription_canceled refund

Questions

Where does my data live?

On your server, in your database. Yield is a script you install — nothing about your visitors or your revenue is sent anywhere else.

Will this slow my site down?

The tracking script is 1.8 KB gzipped, loads deferred, and never blocks rendering. The endpoint it posts to validates and queues, then returns.

Do I need a payment provider?

Only to see revenue. Traffic reporting works on its own. Stripe, Paddle, Lemon Squeezy, Polar and Paystack have native handlers, and anything else can post to the Payment API.

What happens when a payment has no visitor id?

It is still recorded, flagged as unattributed, and shown in the webhook log with the reason. A scheduled job retries attribution as soon as the missing identifier appears.

Can I run it on shared hosting?

Yes. It needs PHP 8.2+, MySQL or MariaDB, one cron entry and a queue worker. Mail goes over HTTPS rather than SMTP, which is what usually breaks on shared hosts.