One small script.
Privacy on by default.
Add Ephemetry directly to your page or through a tag manager. Pageviews work automatically on traditional and single-page applications.
Install
Create a site in your dashboard, then paste its generated snippet before </head>.
<script defer
data-site="YOUR_SITE_ID"
src="https://ephemetry.com/tracker.js"></script>The script is deferred, dependency-free, and under 2 KB compressed. It sends nothing when Global Privacy Control or Do Not Track is enabled.
Custom events
Measure business outcomes with a short event name and up to five non-sensitive properties.
window.ephemetry("event", "Signup", {
plan: "starter",
placement: "hero"
});Names are case-sensitive, may be up to 40 characters, and can contain letters, numbers, spaces, dots, underscores, and hyphens. Keep one stable name for one outcome; changing Signup to Signed up creates a separate goal signal.
Email addresses, names, account IDs, search terms, free-form text, and persistent user or account identifiers do not belong in analytics properties. Ephemetry blocks common sensitive keys and email-like values.
How goals work
Every accepted custom event automatically becomes a goal. There is no separate activation step: send Signup, then open the dashboard’s Goals tab to see its event total and same-day visitors. A goal event can be sent from a click handler, after a successful form response, or when your application confirms an outcome.
// Fire after the outcome succeeds—not merely when a button is clicked.
window.ephemetry("event", "Trial started", {
plan: "starter"
});Goal events count every accepted custom event. Goal visitors counts distinct site-day visitor hashes that reached at least one custom event. Goal rate is goal visitors divided by pageview visitors for the selected range. Because identity resets at 00:00 UTC, a returning visitor contributes again on a later day; Ephemetry cannot build a cross-day profile.
Send a purchase goal after payment confirmation, a signup goal after account creation, and a lead goal after the server accepts the form. Avoid firing the same outcome from both the browser and server.
Goal troubleshooting
- Confirm the pageview appears first; that proves the site ID and allowed hostname are correct.
- In browser developer tools, confirm the goal’s
POST /erequest returns202. - Check the exact event spelling and case in the Goals tab.
- Disable DNT only while testing; the tracker intentionally sends nothing when DNT or GPC is enabled.
Custom-event funnels
A funnel answers how many daily visitors reached a sequence of 2–8 goals and where they stopped. In the dashboard, open Goals, choose Create funnel, name the journey, and enter event names in order. Event names already observed on the site appear as suggestions, but you can define a future event before it fires.
Ordered matching allows unrelated events between funnel steps. Strict matching requires each funnel step to be the very next collected event. Reports show reach, conversion from the prior step, overall conversion, drop-off, and average completion time.
All funnel steps must occur for the same daily visitor hash before the UTC identity reset. A step today and another tomorrow are deliberately never linked. Reporting date labels still follow the site timezone.
Funnels are available on every plan. They are computed from retained custom events and update when you change the dashboard date range; deleting a funnel removes only its definition, never the underlying events.
Core Web Vitals and heatmaps
The same tracker observes LCP, INP, CLS, FCP, and TTFB for real page loads. Measurements are rounded into bounded buckets at the collector and immediately added to daily histograms; no raw sample or visitor key is retained. The dashboard reports approximate p75 values overall and for the most-measured paths.
Heatmaps count primary pointer interactions in a 12 × 20 page-relative grid and broad mobile, tablet, or desktop class. The tracker excludes inputs, text areas, selects, options, and editable content. It never reads or sends DOM text, selectors, classes, page screenshots, exact pointer coordinates, or a sequence tied to one visitor. A selected map’s cells stay hidden until at least 10 clicks are present.
Experience telemetry uses POST /m, does not read the network address or user agent for identity, and writes directly into aggregate counters. GPC and DNT disable it together with ordinary analytics.
Connect ChatGPT or Claude
Ephemetry exposes a remote Model Context Protocol server at https://ephemetry.com/mcp. It uses OAuth 2.0 authorization with S256 PKCE and gives each approved connection read-only access to the currently selected workspace.
- Enable Developer mode in ChatGPT under Settings → Security and login.
- Open ChatGPT Plugins, add an MCP connection, and enter
https://ephemetry.com/mcp. - Sign in to Ephemetry, confirm the workspace, and allow read-only access.
- Open Settings → Connectors in Claude and choose Add custom connector.
- Enter
https://ephemetry.com/mcpas the remote MCP server URL. - Complete the Ephemetry sign-in and read-only authorization screen.
Start by asking the assistant to list your sites, then ask questions such as “Compare traffic with the previous 30 days,” “Which pages contribute most goal visitors?” or “Summarize Core Web Vitals and available heatmaps.”
The connector can list sites and read aggregate analytics or thresholded heatmaps. It cannot create or delete sites, change funnels, manage the team or billing, export raw events, or bypass heatmap privacy thresholds. Revoke a connection at any time under Data, team & settings.
Collection model
The collector validates the sending origin, removes query strings after extracting three campaign tags, redacts obvious identifiers in paths, reduces referrers to hostnames, and never persists IP addresses. A same-day visitor count is derived with a random per-site salt. Salts expire within 48 hours, which makes cross-day identity linking impossible from retained event rows. Experience telemetry has no pseudonym at all: it retains only metric-bucket and coarse-cell counts.
Content Security Policy
Allow the script and collectors in your policy:
script-src 'self' https://ephemetry.com;
connect-src 'self' https://ephemetry.com;Verify setup
- Open your site in a private window with DNT disabled.
- In browser developer tools, confirm
POST /ereturns202. - Open the dashboard. A first pageview normally appears within seconds.