Metrics / nutzaps / mint_active_users
mint_active_users
Monthly active nutzap senders PER MINT: distinct sender pubkeys with at least one payment on the mint in each UTC calendar month - the Monthly Active Users chart of each nostrolo.gy/nutzaps/mints page (pass mint_url), for any window and every mint.
unit
users
grain
month (UTC)
series
sparse, full history
key
nutzaps.mint_active_users@month
Parameters
| param | accepted values |
|---|---|
| grain | month - default month (omit to get the default) |
| from | optional inclusive ISO UTC calendar day (YYYY-MM-DD); omit for the series start |
| to | optional inclusive ISO UTC calendar day (YYYY-MM-DD); omit for today UTC (that day still in progress) |
| mint_url | optional Cashu mint URL as nutzaps.mint_leaderboard lists it (e.g. https://mint.minibits.cash/Bitcoin); narrows rows to that mint. Scheme and host case, a default port and a trailing slash are normalized and a URL with no scheme is read as https, but the PATH is case-sensitive; an excluded (test or private) mint returns no rows |
| format | csv | markdown |
Query it
MCP tool call against https://nostrolo.gy/mcp (connect your agent):
{
"name": "nostrology_query_metric",
"arguments": {
"metric": "mint_active_users",
"domain": "nutzaps",
"grain": "month"
}
} Windowed (inclusive UTC days; both optional):
{
"name": "nostrology_query_metric",
"arguments": {
"metric": "mint_active_users",
"domain": "nutzaps",
"grain": "month",
"from": "2026-07-01",
"to": "2026-07-31"
}
} Response: a plain-text envelope (window, freshness, column contract, this page's
caveats) followed by the data table (csv, or format: "markdown") at month grain.
Response columns
| name | type | description |
|---|---|---|
| period_start | date | UTC start of the calendar month (the 1st) |
| mint_url | text | the mint's normalized URL - the value the mint_url filter takes |
| active_users | integer | distinct sender pubkeys with a payment on this mint in the month |
What is counted
The population is the kind-9321 (nutzaps) PAYMENTS in this archive (NIP-61 (nutzaps): zaps whose value moves as Cashu ecash inside the event) - events carrying at least one Cashu proof in a `proof` tag, valued as the sum of those proofs in sats (never the `amount` tag, which was often millisats). Events without such a proof (the 2024 draft format, encrypted payloads, bare cashu tokens, zero-ecash events) are not payments. Test and private mints are excluded: hosts a recipient elsewhere cannot reach (loopback, private-network and other non-public names) and public test mints reviewed as running a fake Lightning backend or no longer running; any other mint counts, reviewed or not. A mint_url filter narrows within this population, so an excluded mint returns no rows. This is exactly the population nostrolo.gy/nutzaps draws.
Caveats
- Distinct-sender counts are not additive: summing buckets does not give a longer period's count, and summing mints over-counts senders who use more than one mint. The network-wide active-user count (DAU/WAU/MAU across all mints) is the PAID nutzaps.active_users on the nostrology_query_nutzaps tool.
- Months only: daily and weekly active users are not served per mint.
- Months are keyed by their UTC START (the 1st); a from/to window includes exactly the months STARTING inside it, each whole - a month that began before 'from' is excluded even if it overlaps the window, and one starting before 'to' is included even if it extends past it.
- The page's per-mint chart covers the trailing 365 days on a TIMESTAMP cutoff, so its oldest month is partial; compare from the month after it. The final month is still accumulating until it ends.
- The mint_url column is the mint's normalized URL (lowercase scheme and host, no default port, no trailing slash, PATH CASE KEPT - https://mint.minibits.cash/Bitcoin and /bitcoin are different mints); it is what the mint_url filter takes, and it is third-party text copied from the senders' `u` tags.
- The event time (created_at) is sender-declared and unverified, as everywhere in Nostr; days are UTC calendar days of it.
- Responses are capped at 2,000 rows with an explicit truncated: line; pass from/to or mint_url to keep a response small. Series is sparse: a (month, mint) row exists only where the mint had a sender.
Freshness in every response is data-derived: latest kind-9321 (nutzaps) event time.