Skip to content

Commit 8e33fa2

Browse files
yosriadyclaude
andcommitted
docs: align metrics with sessions/visitors rename + privacy accuracy
- Visitors = unique anonymous visitors (period-deduped, persistent first-party anonymous ID; comparable to GA4 Active users); Sessions = session count (session_id, daily-rotating, counted once per day). - Correct Current/Live Visitors (active sessions, 10 min), bounce rate (over sessions; 1 pageview, no engagement events incl. decoded logs, <10s), session duration (gap-aware, 30-min cap), transactions (first-seen date). - what-we-collect: unique visitors use the first-party anonymous ID; the daily-rotating IP/UA hash is for sessions; "no cookies" -> "no third-party cookies". - OpenAPI /v0/kpis: visitors example column -> sessions. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 6c92d56 commit 8e33fa2

5 files changed

Lines changed: 58 additions & 57 deletions

File tree

api/openapi.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5053,8 +5053,8 @@
50535053
"/v0/kpis": {
50545054
"get": {
50555055
"operationId": "getAnalyticsKpis",
5056-
"summary": "Get KPIs (visitors, pageviews, bounce rate, session duration)",
5057-
"description": "Time-series traffic KPIs with optional dimension breakdown. Returns visitors, pageviews, bounce rate and average session length.",
5056+
"summary": "Get KPIs (sessions, pageviews, bounce rate, session duration)",
5057+
"description": "Time-series traffic KPIs with optional dimension breakdown. Returns `sessions` (session count), pageviews, bounce rate and average session length. When `include_previous_period=true` without `group_by`, the response also includes `visitors` (unique visitors), `visitors_current` and `visitors_previous`.",
50585058
"tags": [
50595059
"Query"
50605060
],
@@ -5122,7 +5122,7 @@
51225122
"type": "String"
51235123
},
51245124
{
5125-
"name": "visitors",
5125+
"name": "sessions",
51265126
"type": "UInt64"
51275127
},
51285128
{
@@ -5142,23 +5142,23 @@
51425142
{
51435143
"date": "2025-10-15",
51445144
"project_id": "proj_abc",
5145-
"visitors": 412,
5145+
"sessions": 412,
51465146
"pageviews": 1187,
51475147
"bounce_rate": 0.31,
51485148
"avg_session_sec": 142.6
51495149
},
51505150
{
51515151
"date": "2025-10-16",
51525152
"project_id": "proj_abc",
5153-
"visitors": 487,
5153+
"sessions": 487,
51545154
"pageviews": 1402,
51555155
"bounce_rate": 0.28,
51565156
"avg_session_sec": 156.2
51575157
},
51585158
{
51595159
"date": "2025-10-17",
51605160
"project_id": "proj_abc",
5161-
"visitors": 533,
5161+
"sessions": 533,
51625162
"pageviews": 1610,
51635163
"bounce_rate": 0.26,
51645164
"avg_session_sec": 168.4

api/query/kpis.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ description: "Time-series traffic KPIs (visitors, pageviews, bounce rate, sessio
44
openapi: "GET /v0/kpis"
55
---
66

7-
Returns the same KPI series that powers the Formo dashboard's overview chart.
7+
Returns the same KPI series that powers the Formo dashboard's overview chart. Here `visitors` is the per-day session count (the overview's **Sessions** card), while `unique_users` (and `unique_users_current` / `unique_users_previous`) are unique anonymous visitors (the overview's **Visitors** card) — returned only when `include_previous_period=true` and no `group_by` is set.
88

99
Use `group_by` to break results down by `referrer`, `location`, `device`, `browser`, `os`, or any UTM dimension. Set `include_previous_period=true` to also receive the equivalent prior window for week-over-week comparisons.

data/metrics.mdx

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,26 @@ icon: chart-simple
55
iconType: solid
66
---
77

8-
### Current Visitors
8+
### Live Visitors
99

10-
How many unique visitors are currently interacting with your site or app.
11-
It includes all visitors who have viewed a page in the last 5 minutes.
10+
How many visitors are currently active on your site or app.
11+
It counts unique active sessions with a page view in the last 10 minutes.
1212

13-
### Unique Visitors
13+
### Visitors
1414

15-
How many daily / weekly / monthly unique visitors are interacting with your site or app across multiple page views and events.
16-
A visitor is only counted once within a 24 hour window. The 24 hour limit is necessary to comply with GDPR.
15+
How many unique visitors are interacting with your site or app across the selected period, spanning multiple page views and events.
16+
A visitor is identified by a persistent visitor ID (their anonymous ID) and is not stitched to a wallet, so this counts distinct visitors rather than connected wallets.
1717

18-
### New Users
19-
20-
Users who visit your site or app for the first time within the selected time period.
18+
In the overview, the **Visitors** chart shows the daily unique-visitor count (a visitor active on several days adds to each of those days), while the headline number is de-duplicated across the entire selected period, so a visitor active on multiple days is counted only once.
2119

22-
### Returning Users
20+
Comparable to Google Analytics' "Active users".
2321

24-
Users who have visited your site or app in previous time periods and return within the current period.
22+
### Wallets
2523

26-
### Resurrected Users
27-
28-
Users who were previously active, became inactive for a period of time, and then return after being inactive.
29-
30-
### Active Wallets
31-
32-
How many unique daily / weekly / monthly wallets are active on your site or app.
24+
Unique wallet addresses active with at least one session during the selected period.
3325

3426
We also collect other wallet details, such as the wallet address, wallet type, and wallet profiles.
3527

36-
### Wallet Connects
37-
38-
How many users have connected their crypto wallets to your app.
39-
4028
### Transactions
4129

4230
How many transactions have been made across your site or app.
@@ -48,22 +36,19 @@ How many times a page has been viewed across your site or app.
4836
### Sessions
4937

5038
A session (also known as a visit) is a set of actions that a user takes on your site.
51-
Each session is a 24 hour window. If a visitor returns after this window, a new session is counted.
52-
53-
This is useful for debugging and identifying problems on your site.
54-
For example, if visitors are not completing transactions, you can see which pages were visited and what events were triggered to identify a common problem on your site that is preventing visitors from completing.
39+
Formo counts unique session IDs. With the web SDK, each visitor's session is counted once per day, so one visitor can have multiple sessions across days.
5540

5641
### Session Duration
5742

58-
Session duration measures how long a visitor stays on your website or app during a single visit (session).
43+
Session duration measures the observed active time a visitor spends during a single visit (session).
5944

6045
##### How It's Calculated
6146

62-
1. Starting Point: When a visitor first lands on your site, the system records a timestamp.
47+
1. Per-event gaps: The system measures the time between each consecutive event in a session.
6348

64-
2. Ending Point: When the visitor performs their last action before leaving, another timestamp is recorded.
49+
2. Active time only: It sums those gaps but ignores any gap longer than 30 minutes (1800 seconds) — long inactivity is treated as the visitor leaving, not as time on site.
6550

66-
3. The Calculation: The system simply subtracts the first timestamp from the last one to determine how long the visitor stayed.
51+
3. Per-session duration: Adding the counted gaps gives the session's active duration. A session with a single event (e.g. one pageview) has a duration of 0.
6752

6853
4. Averaging: To get the average session duration shown in your reports, the system adds up all individual session durations and divides by the number of sessions.
6954

@@ -78,8 +63,8 @@ For most purposes, this calculation method provides an accurate and useful measu
7863

7964
### Bounce Rate
8065

81-
The bounce rate is the relative number of visitors who have left the site after a single page view, compared to the total number of unique visitors.
82-
Formo counts a "bounce" if the visitor visits only a single page and leaves without performing an engaging action.
66+
The bounce rate is the percentage of sessions that bounce, measured over sessions (not unique visitors).
67+
Formo counts a "bounce" when a session has a single pageview, no engagement events, and less than 10 seconds of observed activity. Engagement events are wallet connects, transactions, tracked custom events, and smart contract events (decoded logs).
8368

8469
### Referrers / Sources
8570

@@ -136,7 +121,7 @@ How many users are using a particular device such as desktop, mobile, tablet, et
136121

137122
Browser is the statistics of the browser used by the visitor. It is extracted from the User-Agent and Client Hints HTTP headers.
138123

139-
### Operating System
124+
### OS
140125

141126
Shows the operating systems used by your visitors.
142127

@@ -148,6 +133,32 @@ The date and time when a user or wallet was first observed interacting with your
148133

149134
The most recent date and time when a user or wallet was observed interacting with your app.
150135

136+
### User lifecycle
137+
138+
The lifecycle stage of each wallet or visitor (New, Returning, Power User, Resurrected, At Risk, or Churned), computed from their activity recency and frequency relative to a reference date.
139+
140+
See [User Lifecycle](/features/wallet-intelligence/wallet-profiles#user-lifecycle) for the exact rules and thresholds for each stage.
141+
142+
### New Users
143+
144+
Users who visit your site or app for the first time within the selected time period.
145+
146+
### Returning Users
147+
148+
Users who have visited your site or app in previous time periods and return within the current period.
149+
150+
### Resurrected Users
151+
152+
Users who were previously active, became inactive for a period of time, and then return after being inactive.
153+
154+
### At Risk Users
155+
156+
Established users who are still active but have been quiet for a stretch, and who had real activity before going quiet (so it is not a one-off visit).
157+
158+
### Churned Users
159+
160+
Users with no activity within the project's churn window.
161+
151162
### Events
152163

153164
Events are user-defined custom events. They have a name and optional metadata key/value pairs. When you expand the activity feed, you can view and filter the metadata.
@@ -200,10 +211,6 @@ The date and time of the first onchain activity detected for a wallet.
200211

201212
The most recent date and time of onchain activity detected for a wallet.
202213

203-
### Wallet Score
204-
205-
A score that indicates the quality and intent of a wallet address.
206-
207214
### Wallet Labels
208215

209216
Labels are assigned to a wallet address based on its past onchain activity and public information offchain.
@@ -250,10 +257,4 @@ This is a part of [revenue attribution tracking](/features/product-analytics/cus
250257

251258
### Customer Lifetime Value (CLTV)
252259

253-
CLV estimates the total revenue a user generates over their entire engagement with your crypto app.
254-
255-
### User lifecycle
256-
257-
The lifecycle stage of each wallet or visitor (New, Returning, Power User, Resurrected, At Risk, or Churned), computed from their activity recency and frequency relative to a reference date.
258-
259-
See [User Lifecycle](/features/wallet-intelligence/wallet-profiles#user-lifecycle) for the exact rules and thresholds for each stage.
260+
CLV estimates the total revenue a user generates over their entire engagement with your app.

data/what-we-collect.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ flowchart TD
3535

3636
**What the SDK sends:** event type, anonymous session ID, wallet address, chain ID, user agent, browser type, timezone, language, page URL, UTM parameters, screen and viewport dimensions (`screen_width`, `screen_height`, `screen_density`, `viewport_width`, `viewport_height`), referral parameters (`ref`, `referral`, `refcode`), and custom event properties.
3737

38-
**What the SDK does NOT send:** IP addresses, cookies, local storage data, device fingerprints, or social profiles.
38+
**What the SDK does NOT send:** IP addresses, third-party cookies, local storage data, device fingerprints, or social profiles.
3939

40-
**What happens server-side:** The server receives the IP address via standard HTTP headers (this is true for any HTTP request to any server, including GA4 and Umami). Formo uses the IP address only to compute a daily-rotating session hash for unique visitor counting, then discards it. The raw IP address is never stored in logs or databases.
40+
**What happens server-side:** The server receives the IP address via standard HTTP headers (this is true for any HTTP request to any server, including GA4 and Umami). Formo uses the IP address only to compute a daily-rotating session hash for session counting, then discards it. The raw IP address is never stored in logs or databases.
4141

4242
### What We Do NOT Collect
4343

@@ -65,15 +65,15 @@ Every HTTP request to any server (including GA4, Umami, and Plausible) includes
6565

6666
> We do NOT use device or browser fingerprinting.
6767
68-
We do not attempt to generate a device-persistent identifier because they are considered personal data under GDPR.
68+
We identify visitors with a first-party anonymous ID — a random identifier stored in a first-party cookie — rather than by fingerprinting the device or browser. The overview **Visitors** metric counts unique first-party anonymous IDs.
6969

70-
To count unique visitors, we generate a daily-changing identifier on the server using data from standard HTTP headers:
70+
For sessions, we additionally derive a daily-rotating identifier on the server from standard HTTP headers:
7171

7272
```
7373
hash(daily_salt + website_domain + ip_address + user_agent)
7474
```
7575

76-
This hash is a **one-way function** - it cannot be reversed to recover the original IP address or user-agent. The salt rotates every 24 hours, making cross-day correlation impossible.
76+
This session hash is a **one-way function** - it cannot be reversed to recover the original IP address or user-agent, and the salt rotates every 24 hours.
7777

7878
### NO Third-party Cookies
7979

features/product-analytics/key-metrics.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ View your core metrics by referrer to see where traffic originates:
189189
| Data | What it shows |
190190
|--------|---------------|
191191
| **Referrer** | The source domain (twitter.com, google.com, direct) |
192-
| **Visitors** | Page views from this source |
192+
| **Sessions** | Session visits from this source (the session count, not the overview's unique-visitor **Visitors** metric) |
193193
| **Wallets** | Wallet connects from this source |
194194
| **Transactions** | Completed transactions from this source |
195195
| **Volume** | Total transaction volume (USD) |

0 commit comments

Comments
 (0)