Venn Docs

Usage stats

Venn can count how it's used: how many polls are made and of which kind, how many get answers, and how many end with a date. These counts show what's working and what to improve, without tracking anyone.

Stats are off until the server has a STATS_TOKEN. That token also unlocks the stats page.

What's counted, and what isn't

Each count is a number for one day. For example, "3 polls created on 2026-10-26 to vote on dinner times, with 4–7 options". That's all that's stored:

Only the events and values listed in USAGE_EVENTS in src/usage.js are kept. The server drops anything else. The browser can't send the events the server counts itself (polls created, answers and so on).

Event Counted by Properties
poll.created Server kind (pick, free), detail (times, allday, trips, days, parts, hours), plan (dinner, trip…), options (1, 2-3, 4-7, 8-15, 16+), email, copy
poll.edited, poll.deleted, poll.finalized Server kind
answer.created Server kind, copy (asked for an email copy)
answer.updated, answer.deleted Server kind
notify.email, notify.webhook Server none
calendar.ics Server none
ai.used Server feature (draft, answer, summary, message)
view Browser page (chooser, pick, free, poll), as on polls (guest, answered, organizer)
share Browser from (created, poll, card: the "It's set" picture), how (sheet, copy, download)

Poll outcomes aren't counted. "Got answers", "date picked" and "guests per poll" are worked out when the stats are read, from the polls themselves.

Turning it on

  1. Make a long random token, for example with openssl rand -base64 32.

  2. Give it to the server as STATS_TOKEN. On Cloudflare:

    npx wrangler secret put STATS_TOKEN
    

    With Node, set it as an environment variable.

  3. Open /stats on your server and enter the token. It's kept in that browser until you choose "Forget the token on this device".

    The page shows the last 7, 30, 90 or 365 days: totals with the change on the period before, a trend chart a day (a week over a year) for polls, guest answers, poll views or shares, which days of the week are busiest, and what happened to the polls. It refreshes itself every few minutes while it's open.

GET /api/config reports "usage": true once stats are on. Browsers only send their counts then.

Reading the stats from code

curl -H "authorization: Bearer $STATS_TOKEN" "https://venn.example/api/stats?days=30"

It returns:

days is 1 to 365, and 30 if left out.

Turning it off

Remove STATS_TOKEN. Counting stops at once. To delete what's been counted, run DELETE FROM usage_counts on the database.

Edit this page on GitHub