Privacy-first web analytics
Counts footsteps. Never faces.
GhostMetrics tells you which pages people visit, where they came from and what they finish. In Lightweight mode the script leaves nothing on their device and the server keeps no IP address. You get the numbers. Your visitors stay strangers.
We track 0 websites and store more than 0 pageviews.
Chapter 1 · The pact
Four rules the ghost keeps
Every ghost story has rules. Ours are written in the code, so you can check them. The steps get taller as they go, because the last one matters most.
- RULE 01
Count footsteps, not faces
A pageview is a footstep: a path, a referrer, a country, a kind of device. No names, no emails, no profiles stitched across sites.

- RULE 02
Pass through, leave nothing
The Lightweight script sets no cookies and writes nothing to localStorage. It sends one small beacon per page and goes.

- RULE 03
Carry a lantern, not a camera
We light up totals and trends. If you switch on session replays in Advanced mode, you choose which parts of the page get hidden from the recording.

- RULE 04
Forget on schedule
Every event gets an expiry date when it arrives. Your plan sets the window. After that, the ghost forgets.

Chapter 2 · X-ray
What the ghost actually carries
Drag the lens across the visitor. Behind the blur there is a person. Through the lens there are only the fields our script really sends, copied from its source.
DRAG OR USE ARROW KEYS
// POST /pixel-track/{pixel_key} via navigator.sendBeacon // from pixel-header.js (Lightweight) { "type": "landing_page", "url": "https://your.site/pricing?utm_source=newsletter", "data": { "path": "/pricing", "referrer": "https://news.example/", "utm": { "source": "newsletter", "medium": null, "campaign": null }, "resolution": { "width": 1440, "height": 900 }, "timezone": "Europe/London", "theme": "dark" } }
// Advanced mode adds what it needs to tell sessions apart:
// a random visitor ID kept in the browser's localStorage
// (pixel-visitor-and-events.js). No cookie.
// The server masks IP digits as *** unless the admin AND the
// site owner both switch IP storage on (PixelTrack.php:402).
// Heatmaps and session replays only run when enabled per site.
- [email protected]never sent
- Ada Lovelacenever sent
- 81.2.69.142read for country, not keptmasked by default
- cookie: _id=3f9ano cookie
The browser always shows its IP address to any server it talks to. GhostMetrics reads it once to look up country and city with a local GeoLite2 database. In Lightweight mode it is not written to the database.
Chapter 3 · The lantern
Realtime, without the peeping
This is a toy. Press the button and a pretend visitor walks into a pretend shop. The real Realtime view works the same way: footsteps arrive, bars climb, and nobody gets a name.
THIS IS THE ONLY ANGLE WE SHOOT FROM
Chapter 4 · The house
Rooms in the haunted house
Each room is a real part of the app. Where a feature needs Advanced mode or a plan that includes it, the room says so.
Pageviews, visitors, sessions
Footsteps
Every page someone opens becomes a footstep. See totals, landing pages, exit pages and how long sessions last.
- Pages, landing and exit pages
- Visitors and sessions (Advanced)
- Date ranges and comparisons
Source: Pageviews.php, Visitors.php, Statistics.php, Annotations.php

Referrers and UTM
Doorways
Which doors people came through: other sites, search, newsletters, social posts and your tagged campaigns.
- Referrer hosts and paths
- utm_source, utm_medium, utm_campaign
- Optional query-string tracking per site
Source: PixelTrack.php:247 to 251, WebsiteUpdate.php:82

Countries and cities
Map room
Country, region and city from a local GeoLite2 lookup on our server. The lookup happens once and the IP is not kept in Lightweight mode.
- Continent, country, region, city
- Browser language and timezone
Source: PixelTrack.php:215 to 228

Devices, browsers, OS
Wardrobe
Desktop, tablet or phone, which browser, which operating system, screen size and light or dark theme.
- Device type, OS, browser
- Screen resolution
- Visitor colour theme
Source: PixelTrack.php:231 to 243

Goals and events
Ledger
Mark a page visit, a scroll depth or a custom event as a goal and count how many footsteps reach it. Outbound clicks too.
- Pageview, scroll and custom goals
- Outbound link clicks
- Event children (Advanced)
Source: GoalsAjax.php, pixel-goals.js, pixel-outbound.js

Heatmaps (Advanced)
Warm rooms
See where clicks and scrolls gather on a chosen page. Needs Advanced mode and a plan that includes heatmaps.
- Click and scroll heatmaps per path
- Plan limit: websites_heatmaps_limit
Source: Heatmaps.php, pixel-heatmaps.js

Session replays (Advanced)
Echoes
Watch a recorded session to find where a form trips people up. The admin must enable it, the site owner must enable it, and you can name CSS selectors whose text is hidden from the recording.
- Per-site hide-text selector
- Plan time and retention limits
- Off unless switched on
Source: Pixel.php (sessions_replays checks), WebsiteUpdate.php:79

Teams
The haunt
Invite people to a website without sharing a password. Good for agencies and their clients.
- Team members per website
- Plan switch: teams_is_enabled
Source: Teams.php, Team.php

Email reports
Night letters
A weekly or monthly summary sent to your inbox, for people who will not open another dashboard. The platform sets the rhythm.
- Per-website switch
- Plan switch: email_reports_is_enabled
Source: WebsiteUpdate.php:80, Cron.php email_reports

Custom domains
Your own door
Serve the tracking script from your own domain so it reads as part of your site.
- Plan limit: domains_limit
Source: Domains.php, DomainCreate.php, Pixel.php:63

API and public stats
Back door
Pull numbers into your own tools with an API key, or publish a read-only stats page with an optional password.
- Account API keys (plan switch)
- Public statistics page, optional password
Source: AccountApi.php, ApiDocumentation.php, Statistics.php:40 to 70

Who it haunts for
Small teams with good manners
People who want to know what works on their site and would feel odd keeping files on strangers.




These photos are AI generated illustrations. They do not show real customers.
Chapter 5 · The graveyard
Where cookie banners go to rest
A small joke about the banners we all click past. It is not legal advice: the GhostMetrics script never sets a cookie, but your site may still need a banner for everything else it runs. Read the small print below.
The honest small print. GhostMetrics never sets a cookie from the tracking script. Lightweight mode also skips localStorage. Advanced mode keeps one random ID in localStorage so it can tell sessions apart, and some regulators treat that like a cookie. Whether your site needs a banner depends on everything else you run, so check with whoever advises you on GDPR and PECR.

API system
Developer ready
Fully featured & easy to use API system for developers.
- Websites
- Website statistics
- Goal conversions
- Pageviews
- Goals
- Visitors
Chapter 6 · Plans
Pick how much house you need
Plan names, prices and limits come straight from the app. Each plan sets the real switches: websites, monthly footsteps, retention, heatmaps, replays, teams and API access.

Plans are being set up
Pricing is published here as soon as the plans open. You can create an account now and start counting.
Start countingQuestions at the door
Ask the ghost
Does GhostMetrics use cookies?
The tracking script never sets one. Lightweight mode stores nothing on the device at all. Advanced mode keeps a random visitor ID in localStorage.
Do you store IP addresses?
Lightweight mode reads the IP once to find country and city, then drops it. Advanced mode stores it with every digit swapped for an asterisk, unless the platform admin and the site owner both switch full IP storage on.
Can I hide my own visits?
Yes. Add your IP to the site's excluded list and the script will not count you. Known bots can be filtered out too.
Will it slow my site down?
The core Lightweight script is about 2 KB minified, measured from the source files. Goals, scroll goals and outbound click tracking add a little more when you turn them on.
How long do you keep the data?
Each event is stamped with an expiry date the moment it arrives. The window comes from your plan. After that it is deleted.
Can I show my stats to a client?
Turn on the public statistics page for a website and share the link, with or without a password.
The last footstep
Let the ghost keep count
Add one script tag. Watch the bars climb. Nobody gets followed home.
Start counting