virling
AGPLv3Open source, written in Rust

Your traffic came from X. Your money came from somewhere else.

Virling joins every visit to the payment that followed, so you see which channels bring paying customers. One binary, no database to run.

You're in. We'll email you when the first build is ready.
Self-hosting is free forever First 50 hosted customers get 40% off for life
yourproduct.com
Share of visitorsShare of revenue
Visitors, 30 days19,070
Revenue$1,740
Revenue per visitor$0.09
Paying customers60

X sent 44% of visitors and 10% of revenue. A visitor from ChatGPT was worth 24 times one from X. Example data.

Every payment has a path.

Click any payment to see the visits before it: where they first came from, what they read, and what made them buy.

Credit goes to the last channel that wasn't direct, or the first touch if you prefer. Renewals keep the source of the first payment.

$29.00Stripe, Oct 9
  1. Hacker News first visit
    / → /pricing
  2. Direct
    /docs/self-host
  3. ChatGPT credited
    /pricing → signup
  4. 18 days after first visit

One file. No Postgres, no ClickHouse, no Redis.

Download it, start it, add the script tag. Events and settings live in embedded storage next to the binary, so a backup is a file copy.

Runs on
Linux x86_64 and arm64, macOS, Docker
Storage
Embedded DuckDB and SQLite
Script
Under 5 KB gzipped
Visitor IPs
Used for country lookup, never stored
License
AGPLv3
$ curl -fsSL https://virling.com/install | sh
$ virling serve
  listening on http://0.0.0.0:8080

# then add one tag to your site
<script defer src="https://stats.you.com/v.js"
        data-site="you.com"></script>

Paste a read-only key. That's the whole integration.

Virling pulls payments and refunds itself. No webhooks to set up, no write access to your account.

StripePayment Links tagged automatically
Dodo PaymentsBuilt in, not bolted on
PolarOrders and refunds
LemonSqueezyOrders and renewals

Stop posting where it feels busy. Post where buyers come from.

Join the waitlist