Getting started

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#

  1. 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.

  2. Add your site

    Enter your domain (example.com; a leading https:// or www. is removed for you), a name, and your time zone. Reports and “today” follow that zone.

  3. Paste the script into the head of every page

    Replace YOUR_SITE_ID with 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.

  4. 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.

  5. 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, popstate and hashchange). A page is its path plus query string. Plain #anchor jumps never count; apps that route with #/path are 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] and file: 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.

AttributeWhat it does
data-siteRequired. Your site id. Without it the script does nothing.
data-apiSend 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-attributionOpt 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-localhostTrack 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 POST to /api/collect. 200 means it worked. 404 unknown site means the site id is wrong. 400 hostname does not match site means 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 202 answer 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.