Skip to content
Conveyor

Open source, MIT licensed

Web analytics without cookies, on Cloudflare's free tier.

Conveyor is a privacy-first, Umami-compatible analytics service. One Worker, one D1 database and static assets. No servers to run and no bill to pay at small scale.

Add this tag to your site
<script defer
  src="https://your-instance.example/script.js"
  data-website-id="…"></script>

Already use Umami? Keep your existing data-website-id snippet and umami.track() calls. They work as they are.

Features

Everything a small site needs to read its traffic.

  • Core metrics

    Pageviews, visitors, visits, bounce rate and visit duration, with top pages, referrers, channels and UTM parameters.

  • Realtime

    A live view of who is on your site right now and which pages they are reading.

  • Where visitors are

    Countries, regions and cities on a world map, plus browsers, operating systems and device types.

  • Custom events

    Track signups, clicks and anything else with conveyor.track(), or add a data-conveyor-event attribute.

  • Filters and comparison

    Narrow any report by page, source, country or device, and compare a period with the previous one.

  • Share and export

    Public share links for read-only dashboards, and CSV export when you want the numbers elsewhere.

  • Sites and users

    Track multiple websites from one instance and give each person their own login.

  • A small tracker

    About 1.4 KB gzipped, no CORS preflight, and it ignores bots and automated browsers.

Privacy

Count visits, not people.

Conveyor is designed so you don't need a cookie banner. It keeps no persistent identifier for a visitor, so there is nothing to follow across days or across sites.

This is a description of how the software works, not legal advice. Check the rules that apply to you.

  • No cookies

    The tracker sets no cookies and writes nothing to local storage.

  • No IP address stored

    IP addresses and raw user agent strings are used to derive country and device, then discarded.

  • Daily-rotating visitor id

    A visitor is a salted hash that changes every day. The salts are deleted daily, so yesterday's ids cannot be recomputed or linked to today's.

  • Your data, your account

    Everything lives in a D1 database in your own Cloudflare account. Nothing is sent to us.

Free on Cloudflare

Sized to stay inside the free plan.

There is no separate server or database service to pay for. Conveyor keeps its write volume low on purpose, so a personal site or small project can run without a bill.

Parts
One Worker, one D1 database and static assets for the dashboard and tracker.
Traffic
The free plan fits roughly 100,000 requests per day.
Writes
One event is one D1 row write. A typical event needs no reads.
History
Daily rollups are kept forever, so long-term charts stay cheap.
Raw events
Kept for 90 days by default, and configurable.

Deploy

Up and running in five steps.

You need a Cloudflare account, Node.js 22 or newer and Wrangler. Use a custom domain or route for production, because visit tracking relies on the Cache API, which is a no-op on workers.dev.

  1. Clone and install

    Terminal
    git clone <repository-url> conveyor
    cd conveyor
    npm install
  2. Create the database

    Copy the printed database_id into apps/worker/wrangler.jsonc.

    Terminal
    cd apps/worker
    npx wrangler d1 create conveyor
  3. Set two secrets

    AUTH_SECRET signs sessions. SETUP_TOKEN protects first-run setup.

    Terminal
    npx wrangler secret put AUTH_SECRET
    npx wrangler secret put SETUP_TOKEN
  4. Deploy

    Run it from the repository root. It builds the dashboard and tracker, applies migrations and deploys.

    Terminal
    npm run deploy
  5. Create the first admin

    Open /setup on your new URL and enter your SETUP_TOKEN. Then add your site and paste the tracking tag.

    Browser
    https://<your-worker-domain>/setup

See it with real data.

The demo is a live Conveyor instance. Look through the reports, filters and map before you install anything.

Open demo.conveyor.ing