Getting started
Pulse counts visitors, pages and sales without cookies. Setup is one script tag, and you can check it works before you leave the page.
Quickstart#
- Create your account
Sign up with an email and a password (8 characters or more). The 14-day trial has every feature and needs no card.
- Add your site
Enter your domain (
example.com; a leadinghttps://orwww.is removed for you), a name, and your time zone. Reports and “today” follow that zone. - Paste the script into the head of every page
Replace
YOUR_SITE_IDwith the id Pulse shows you (also in Settings, Tracking, where the snippet is already filled in).html<script defer data-site="YOUR_SITE_ID" src="https://stats.shedi.app/script.js"></script>On a framework or site builder? See the install guides.
- Check it works
Open your site in another tab. The setup screen changes from “Waiting for the first visit” to “Receiving data” within a few seconds, and your visit shows up under Realtime.
- Connect your payment provider (optional)
This is what turns visitors into revenue by source. Start with revenue attribution.
How the script behaves#
- About 2 KB compressed (4.8 KB raw), loaded with
defer, sets no cookies and tracks no one across sites. - Sends a pageview when the page loads, and again on every route change in single-page apps (it listens to
history.pushState,replaceState,popstateandhashchange). A page is its path plus query string. Plain#anchorjumps never count; apps that route with#/pathare tracked, with the route as the page. - Sends the referrer with the first pageview only. UTM parameters and
?ref=on the landing URL are kept; other query strings are dropped by the server. - Skips
localhost,127.0.0.1,[::1]andfile:pages, automated browsers (navigator.webdriver), and browsers you excluded. - Stores two short values in the tab's
sessionStorage(the visitor id the server returned, and the first source), used to tag checkout links. They disappear when the tab closes. Longer attribution is opt-in.
Script options#
Set these as attributes on the script tag.
| Attribute | What it does |
|---|---|
data-site | Required. Your site id. Without it the script does nothing. |
data-api | Send events to this URL instead of /api/collect on the script's own origin. Used for a first-party proxy. |
data-auto="false" | Turn off the automatic download, outbound and checkout link events. Checkout links are still tagged. |
data-attribution | Opt in to remembering the visitor id and first source for 7d, 30d or 90d (for example data-attribution="30d"), so a buyer who pays days later is still attributed. This uses localStorage, which may need consent. See revenue attribution. |
data-allow-localhost | Track pages served from localhost and file:, for testing your setup. |
Where to go next#
Common issues#
- The setup screen keeps waiting
- Open your browser's Network tab and look for a
POSTto/api/collect.200means it worked.404 unknown sitemeans the site id is wrong.400 hostname does not match sitemeans the page's domain is not the domain you added. No request at all usually means an ad blocker, a Content-Security-Policy, or you are on localhost. See troubleshooting. - I see data in Network but not in the dashboard
- A
202answer means the request was dropped as a bot (no User-Agent, or one that looks like a crawler, uptime monitor, HTTP library or automation tool). - My own visits are inflating the numbers
- Use exclude your visits.