Analytics
What LinkNest records for each visit and tap, the Insights screen, where location data comes from on each host, and the rules behind the recommended next steps.
3 min readUpdated Oct 17, 2026Applies to LinkNest 1.0.0
On this page
Every view of a public page and every tap on a link is stored in Postgres (page_views and link_clicks). There is no third-party analytics script and no cookie, and IP addresses are not stored.
What is recorded
| Field | Source |
|---|---|
| Time | Server clock |
| Traffic source | Instagram, TikTok, YouTube, X, Facebook, Google, direct or other, from the referrer and utm_source |
| Country, region, city | Request headers from Vercel or Cloudflare, or a guess from the visitor's timezone. See below. |
| Device, browser, OS | The User-Agent header: mobile, tablet or desktop; Chrome, Safari, Firefox, Edge, Opera or other |
| Language and timezone | Sent by the visitor's browser |
| Local hour | The hour on the visitor's clock |
| Table | For table QR scans, the station, with the source table:<code> |
| A/B variant | For taps on a link under an A/B title test |
Views are counted on every page load, including the creator's own, with no de-duplication and no bot filtering. Treat the numbers as a trend, not an audit.
The Insights screen
Insights in the studio shows, for the last 7, 14 (default), 30 or 90 days:
- views, taps and the share of views that led to a tap;
- the top links by taps;
- where people came from (traffic source);
- clicks and views by place: open a country for its regions, then a region for its cities;
- devices, browsers, operating systems and languages;
- "When people show up": activity by the visitor's local hour, not the creator's;
- up to three recommended next steps.
Home repeats this week's views and taps, the top link and one thing to fix. The admin Overview counts views across all pages.
Where location comes from
| Host | Country | Region | City |
|---|---|---|---|
| Vercel | Yes, from x-vercel-ip-country |
Yes | Yes |
| Behind Cloudflare | Yes, from cf-ipcountry |
Guessed for some US time zones | No |
| VPS without either | Guessed from the visitor's timezone, for 36 common time zones | Guessed for some US time zones | No |
The timezone guess maps, for example, Asia/Kolkata to India and America/Chicago to the United States (Illinois). A visitor whose timezone is not on the list has no location. If accurate places matter to your creators, run behind Cloudflare or on Vercel, or add a GeoIP lookup in src/lib/grove/visitor.ts.
Recommended next steps
Insights picks up to three tips from fixed rules in src/lib/grove/insights.ts, which has tests:
| Tip | When it appears |
|---|---|
| Share the page once today | No views and no taps in the range |
| People look, then leave | 8 or more views and no taps |
| Put the top link first | One link has at least 40% of all taps |
| Too many choices | 20 or more views and under 10% tap anything |
| Cut the page down | 8 or more live links |
| Most people come from Instagram | Instagram is the top source with 5 or more views |
| Write one line for the top country | The top country has 5 or more views |
| Keep titles short | 70% or more of views are on phones |
| Post around the peak hour | The busiest local hour has 4 or more views and taps |
| Collect emails while they're here | Email capture is off and there are 10 or more views |
| Use your own domain | The page has no custom domain |
The Instagram tip suggests adding ?from=ig-story to links; in 1.0.0 the source classifier does not read a from parameter, so use utm_source=instagram plus your own campaign tags instead.
Data retention
Visits and taps are kept indefinitely. There is no retention setting or purge job in 1.0.0. To trim old rows:
delete from page_views where viewed_at < now() - interval '13 months';
delete from link_clicks where clicked_at < now() - interval '13 months';