Installation and setup
There is no SDK to configure and no event schema to design. One script tag, and Jellyhook starts recording sessions, scroll depth, and form activity on its own.
Create a site
From your dashboard, register the domain you want to track. Enter it without https:// or www., for example yourdomain.com. Jellyhook generates a unique API key for it. This key is what authenticates every event the tracker sends, so nothing else can post fake data under your site.
Install the script on this exact domain. It is also what a teammate's work email gets matched against to join the site automatically, so a mismatch here can affect more than just tracking.
Install the tracker
Paste this before the closing </body> tag. Your setup page has the exact snippet with your real API key already filled in.
<script
src="your-domain/tracker.js"
data-key="YOUR_SITE_API_KEY"
></script>By default, with nothing else configured, the tracker assumes there is one form on the site that matters and listens for a submission on any form, anywhere on the site. That is enough for a simple site with a single contact form.
Recommended: label your conversion form
If the site has more than one form (a newsletter signup, a search box, a real contact form), tell Jellyhook which one is actually a lead. Two steps, no extra code beyond one attribute:
Step 1 Â Turn on "I'll label my form" when creating the site. This choice is made once, at creation, and cannot currently be changed afterward.
Step 2 Â Add one attribute to the form that should count as a conversion:
<form data-conversion="true">
...
</form>Once this is on, only forms carrying data-conversion="true" are recorded as leads. Everything else on the page is ignored, so a newsletter box or a search bar never shows up as a lead by mistake.
If it looks stuck on "Pending Verification"
Right after creating a site, the dashboard shows a "Listening for connection..." screen and checks every few seconds whether the tracker has ever actually run on your site. The instant one real event arrives with the right API key, the site is marked verified and the page moves on by itself. There is no separate approval step and nothing to wait on beyond the script actually loading.
If it stays on this screen, check, in order:
- The script is actually deployed and live, not just saved locally or sitting in a preview build.
- The page you are viewing is the same domain you registered, not a staging URL or a different subdomain.
- The
data-keyin the snippet matches exactly, no extra spaces or a key copied from a different site. - Nothing on the page (an ad blocker, a strict content security policy) is blocking the script from loading at all.
Registered the wrong domain entirely? Cancel and start over from the same screen, no site gets left behind half-configured.
Once it is verified
The tracker identifies each visitor and session, records every page view with scroll depth and time on page, and picks up form activity on its own from here. No further setup is required.
What gets collected
Exactly this, and nothing more. See Privacy for the full breakdown of storage and retention.
Session data
Session start and end, referrer, timezone, device type, approximate country from IP.
Page views
Page path, time on page, scroll depth, max scroll depth, page height, viewport height.
Form submissions
Name, email, phone, and any other fields the form collects, tied to the page and session it came from.
Form engagement
When a form was viewed, when it was started, and how long was spent on each field, even if it was never submitted.
Page structure
Heading text and position on each page, used to score page health.
Ingestion endpoints
Reference only. The tracker script calls these for you. Every request is authenticated with your site's API key.
/api/trackCore ingestion endpoint. Receives page view and session events from the tracker script./api/track-formReceives form submissions and stores them as leads, deduplicated within a short window./api/track-form-engagementReceives form view, start, field timing, submit, and abandon events./api/track-structureReceives page heading and layout metadata, used by page health scoring./api/site-configReturns per-site tracker configuration, for example whether form capture is restricted to specific forms.