Skip to content

Documentation

Everything you need to install, configure, and get the most out of Pulse.

Quick Start

Get Pulse running on your site in under 5 minutes.

1. Sign up

Create your account at pulse.hatched.digital/login. You'll get a 14-day free trial — no credit card required.

2. Add your site

In the onboarding flow, enter your site's URL. We'll generate a unique API key for you.

3. Add the tracker snippet

Add this single script tag to your site's <head>:

<script defer src="https://pulse.hatched.digital/t.js"
  data-site-id="YOUR_SITE_ID">
</script>

Replace YOUR_SITE_ID with the site ID shown in your dashboard. It's a public identifier — not a secret.

4. Verify

Click "Verify" in the onboarding flow. Pulse will check that events are coming through.

That's it — you're live. Your first AI report will arrive at the end of the week.

Tracker Reference

The Pulse tracker is a < 8KB JavaScript file that collects behavioural data without cookies or personal data.

Script Attributes

AttributeRequiredDescription
data-site-idYesYour site ID (shown in the dashboard)
data-endpointNoCustom endpoint URL (defaults to script origin)

Automatic Tracking

The tracker automatically collects:

Core events (v1):

  • Pageviews — path, referrer category, breakpoint, connection type, UTM parameters, isLanding flag
  • Scroll depth — milestones at 25%, 50%, 75%, 90%, 100%
  • Clicks — 10×20 grid coordinates (no personal data)
  • Rage clicks — 3+ clicks in same zone within 2 seconds
  • Dead clicks — clicks with no DOM response within 500ms
  • Form interactions — focus, blur, abandon, submit (field names only, no values)
  • Exit intent — mouse leaving viewport (fires once per session)

Advanced behavioural events (v2):

  • Scroll velocity — fast-scrolling segments that reveal content being skipped
  • Content exposure — time-in-viewport per section (using data-pulse-section)
  • CTA hesitation — hover over CTA > 2s without clicking (indicates friction)
  • First interaction — time from page load to first meaningful action
  • Copy text — fires when user copies text (captures nothing about the text itself)
  • Tab focus — visibility changes to detect multi-tab browsing patterns
  • Performance — Core Web Vitals sampled from real sessions
  • Outbound clicks — clicks on external links with destination domain

Element Tracking

Add data-pulse-track to any element to track visibility and clicks:

<button data-pulse-track="cta-hero">Get Started</button>

Section Time

Add data-pulse-section to measure time spent in viewport:

<section data-pulse-section="pricing">...</section>

Conversion Tracking

Fire custom conversion events from JavaScript:

window.pulse.track("signup_completed");
window.pulse.track("checkout_started");

SPA Support

The tracker automatically detects SPA navigation by intercepting pushState, replaceState, and popstate. No extra configuration needed for Next.js, React Router, Vue Router, etc.

Privacy

The tracker never collects:

  • IP addresses
  • Cookies
  • User agent strings (parsed to OS family + browser family only)
  • Form field values
  • DOM content
  • Full referrer URLs

Element Tracking

Track any element's visibility and click rate by adding a data-pulse-track attribute.

Setup

<!-- Track a CTA button -->
<button data-pulse-track="hero-cta">Start Free Trial</button>

<!-- Track a pricing card -->
<div data-pulse-track="pricing-pro">...</div>

<!-- Track a form -->
<form data-pulse-track="signup-form">...</form>

What gets tracked

For each tracked element, Pulse measures:

  • Visibility rate — % of sessions where the element was visible in the viewport
  • Click rate — % of sessions with a click on the element
  • Rage clicks — when users click the same element 3+ times rapidly

Dashboard

View element performance in the Elements tab of your dashboard. Elements are classified as:

  • 🟢 Healthy — good visibility and click rates
  • 🟡 Watch — underperforming on one metric
  • 🔴 Underperforming — needs attention

Limits

  • Starter plan: 20 tracked elements per site
  • Pro plan: 20 tracked elements per site
  • Scale plan: 20 tracked elements per site

Funnel Tracking

Define multi-step conversion funnels to see where users drop off.

Setup

Funnels are configured in the Pulse dashboard under Sites > Edit Site > Funnels.

Each funnel step is either:

  • Page — a URL path (e.g., /pricing)
  • Event — a conversion event name (e.g., checkout_started)

Example Funnel

StepTypeValueLabel
1Page/Homepage
2Page/pricingPricing page
3Eventcheckout_startedStart checkout
4Eventpurchase_completedComplete purchase

Analysis

Pulse's AI will analyse your funnel weekly and provide:

  • Drop-off rates per step
  • Behavioural context — what users did before dropping off
  • Fix suggestions — specific recommendations to improve conversion

Limits

  • Starter plan: 1 funnel per site
  • Pro plan: 5 funnels per site
  • Scale plan: 5 funnels per site

API Reference

Pulse exposes a REST API for managing sites, reports, and triggering analyses.

Authentication

All API calls require a valid session cookie (pulse_session). The cookie is set automatically when you log in.

Endpoints

#### Sites

MethodPathDescription
GET/api/sitesList all sites
POST/api/sitesCreate a new site
GET/api/sites/:siteIdGet site details
PATCH/api/sites/:siteIdUpdate site settings
DELETE/api/sites/:siteIdDelete a site

#### Reports

MethodPathDescription
GET/api/reportsList reports for active site
POST/api/reportsTrigger on-demand analysis
GET/api/reports/:reportIdGet full report

#### Auth

MethodPathDescription
POST/api/auth/signupCreate account
POST/api/auth/loginSign in
POST/api/auth/logoutSign out
GET/api/auth/meCurrent session
POST/api/auth/reset-passwordRequest/execute password reset

#### Actions

MethodPathDescription
GET/api/actionsList actions for active site
POST/api/actionsCreate an action
GET/api/actions/:actionIdGet action details
PATCH/api/actions/:actionIdUpdate action status

#### Analytics

MethodPathDescription
GET/api/analytics/attributionChannel attribution data
GET/api/billing/usageCurrent billing usage stats

#### Billing

MethodPathDescription
POST/api/stripe/checkoutCreate checkout session
POST/api/stripe/portalOpen billing portal
POST/api/stripe/change-planChange subscription plan

Agent JSON Export (Pro+)

Weekly AI reports include an agentManifest field with structured JSON suitable for developer tools:

{
  "schemaVersion": "1.0",
  "reportId": "...",
  "tenantId": "...",
  "site": "example.com",
  "generatedAt": "2026-02-20T02:00:00Z",
  "actions": [
    {
      "actionId": "...",
      "priority": "critical",
      "category": "ux",
      "targetUrl": "/pricing",
      "targetElement": ".cta-primary",
      "actionType": "increase_contrast",
      "currentState": "Low visibility button",
      "desiredState": "High contrast CTA above fold"
    }
  ]
}

Privacy & Compliance

Pulse is designed to be privacy-first from the ground up.

What we DON'T collect

  • ❌ IP addresses — never extracted from requests
  • ❌ Cookies — we don't set any
  • ❌ User agent strings — parsed to OS family + browser family only
  • ❌ Form field values — only field names are tracked
  • ❌ DOM content — never captured
  • ❌ Full referrer URLs — categorised as direct/search/social/email/other
  • ❌ Personal identifiers of any kind

Session handling

Sessions are created using a client-side UUID stored in sessionStorage. This means:

  • Sessions die when the tab is closed
  • No cross-session tracking
  • No cross-device tracking
  • No fingerprinting

Data storage

  • All data is stored securely in AWS (ap-southeast-1, Singapore)
  • Encrypted at rest (SSE-S3)
  • 13-month retention, then automatically deleted
  • S3 lifecycle: Standard → IA at 90 days → Glacier at 365 days → Deleted at 395 days

GDPR compliance

Since Pulse doesn't collect personal data, it doesn't require:

  • Cookie consent banners
  • DPA agreements with customers
  • Data Subject Access Requests (no personal data to access)
  • Right to Erasure requests (no personal data to erase)

Data Processing Agreement

For enterprise customers who want a formal DPA anyway, contact us at hello@hatched.digital.