Skip to content
New storyWe built Skald to count visitors. It caught an AI-key thief.
SkaldEvery visit, truly told.

Lead attribution · signed, then joined

Lead attribution: every page a lead read before they booked

Lead attribution in Skald starts with a signed message from your booking, form or payment tool, or from your own server. Switch on visitor IDs and each lead opens to the visits before it, so you see the whole path behind the last click.

Lead attribution is working out which sources, campaigns and pages brought each lead. Skald counts leads from signed webhooks, your server's lead push, your lead database or the script tag, and sets them beside the visits in your server log: first touch, last touch and the sources in between.

30-day free trial · no card · we set it up within one working day · free to self-host

one lead, joined to its visits · sample

script tag · page views, one browser

  1. Mon 09:14/docs/setup/from chatgpt.comskv_Q2xh…
  2. Mon 09:16/pricing/same visitskv_Q2xh…
  3. Wed 18:40/compare/plausible/from google.comskv_Q2xh…
  4. Wed 18:47/pricing/same visitskv_Q2xh…

your server · signed lead push · Wed 18:51

POST /traffic-hooks/example.com/lead
{"external_ref": "L-1001", "action": "signup",
 "vid": "skv_Q2xhc3NpY0V4YW1wbGVJRA"}

signature checked · kept once · same visitor ID

  • 4 pages read before the sign-up
  • 2 visits; the sign-up came 2 days 9 hours after the first page
  • first visit from chatgpt.com, the second from google.com

Sample. The ID is random, made by the browser; it holds no name or email. Visitor IDs are off until you switch them on.

[01] first, last, assisted

Last-click reports give the AI answer that started it no credit at all

One sample lead read your site four times, from four places, before asking for a demo. A last-click report names only Google. Skald shows first touch, last touch and every source that assisted, side by side, so you never pick one model and forget the rest.

switch the credit
  1. Mon 09:14AI assistantchatgpt.com, landed on /docs/setup/
  2. Tue 12:30Social medialinkedin.com, landed on /blog/server-logs/
  3. Thu 08:05Emailthe newsletter, landed on /pricing/
  4. Thu 08:20Search enginegoogle.com, then the demo request: the lead
Credit by source for this one lead (sample)
SourceFirstLastAssisted
AI assistant101
Social media001
Email001
Search engine010

First touch is where the lead first came from, as the lead's sender recorded it. Here: an answer in ChatGPT. A touch nobody sent is "Not recorded", never a guess.

Sample lead, sent by your server with its first and last touch and its visitor ID. Skald reads the visits before it from the same browser's page views.

[02] where leads come from

Four ways leads reach Skald, each counted on its own

Your booking and payment tools send signed webhooks: a message to Skald the moment someone books or pays, with a code made from a secret only the tool and Skald hold, so a fake is refused. Your server can push each lead. The script tag sees forms inside the page. Skald can read your site's own lead database. Use one or all, but send each lead one way: Skald never adds two roads together, so a lead sent twice counts twice.

One person signs up as L-1001. Which roads tell Skald? switch roads on

conversions · one row per site, tool, reference and stage

toolreferencestage
leadL-1001completed

Counted as 1 lead

One road, one row, one lead.

Sample. A booking or payment tool's reference is its own (Calendly's invitee address, Stripe's Checkout Session id), so it never collides with yours. Settings › Integrations › Status lists every lead that arrived from two tools.

[03] the journey behind a lead

No journeys until you switch on visitor IDs. Leads count either way.

A visitor ID is a random ID the browser makes: no name, no email, no fingerprint. It is what joins a lead to the pages before it. It is off by default, switched on per site, and your privacy notice should say so. Off, the lead keeps no visitor ID from any road, and you still get every lead, its source and its country.

flip it

Leads

74

from every road

Demos booked

12

from your booking tools

Source of the visit it came in on

from what each road sent

last touch

Country

21 countries

from the tool or the address, then dropped

Pages read before each lead

not recorded4 pages, 2 visits

in each lead's drawer

Abandoned

not recorded9

forms started, not sent in 24 h

Assisted sources

not recordedAI assistant 11 · Social 6

seen before the last touch

Pages seen before converting

not recorded/pricing/ 64% vs 9%

converting browsers vs the rest

Sample site, last 30 days. "Abandoned" also needs the script tag, which is the only road that sees a form start.

[04] lead quality by source

Which source brings leads your team actually qualifies

More leads from a source help only if your team qualifies them. With your site's lead database connected, Skald sets each lead's first-touch source beside the status your team gave it. The share is given only over at least 10 reviewed leads; below that it says "too few".

pick a period
Lead quality by first-touch source · sample
First-touch sourceLeads and demosNewContactedQualifiedWonLostQualified or won, of reviewedSpamDuplicates
AI assistant186452158.3%00
Search engine259643343.8%20
Email923211too few (7)00
Social media942102too few (5)60
Direct or unknown187521327.3%02

79 leads and demos · 51 reviewed · 8 spam and 2 duplicates left out of the leads

  • Reviewed is every lead no longer "new". The share is qualified or won, out of reviewed.
  • Statuses are as your team has them now. Change one in your admin and past days change with it.
  • Spam and duplicates are never leads: counted apart, and listed in full under Show left out.

Sample site. Read from your website's own lead database, opened read-only: the statuses are the ones your team set there.

[05] where it stops

Where lead attribution stops, said plainly

Each lead is counted from what its sender says. Here is what that cannot tell you.

What it does not do

  • A visitor ID is a browser, never a person: one person on a phone and a laptop is two.
  • Journeys need visitor IDs, which are off by default. Leads are counted either way.
  • The script tag adds the ID to Calendly links by itself. For Cal.com, Stripe, Typeform, HubSpot and your own forms, your page passes it on.
  • It never guesses a touch. A source the sender did not give is "Not recorded".
  • It never matches an address to a lead in the figures. Owners and admins can look one person up; that search is audit-logged, and a match by time is likely, never certain.
  • Each road keeps its own rows, and a payment or a deal is never a lead.
Skald visitor drawer with sample data: a visitor's two visits over 19 days, the pages of each, and the lead section
Sample data. Every visit of one visitor, and its lead, in one drawer.

questions

Lead attribution FAQ

Straight answers, including what Skald does not do.

What is lead attribution?

Lead attribution works out where each lead came from: the source, campaign and landing page of the first visit, of the visit it converted in, and the sources in between. Skald counts the lead from a signed message, then sets it beside the visits your server log recorded.

How does Skald join a lead to the visits before it?

Through an anonymous visitor ID: a random ID the browser makes, with no name, email or fingerprint in it. The script tag sends it with each page view and event, and adds it to Calendly links by itself. For Cal.com, Stripe, Typeform, HubSpot and your own forms, your page passes it on with skald('id'), in a hidden field or a metadata value. Visitor IDs are off by default and switched on per site. Without them, leads are still counted, but there are no journeys.

Which tools can send leads to Skald?

Calendly, Cal.com, HubSpot, Typeform and Stripe send signed webhooks. Zapier, Make and n8n post with a plain key. Your own server can use one file for PHP, Node or Python, and WordPress sites can use a plugin with no code. The lead file for your backend.

What are first, last and assisted touch?

First touch is where the browser first came from. Last touch is the visit the lead converted in. Assisted is a source seen earlier in a converting browser's journey that was not its last touch; each conversion counts once per source. Assisted needs visitor IDs.

Does Skald match a person to a lead by IP address?

The figures never match by IP address. Owners and admins can search for one person, and the search can show the visits that sent a form at a lead's time: a match by time, likely, never certain. Each search is written to the audit log.

Are payments and deals counted as leads?

They are counted apart. A lead is a form sent or a demo booked, once completed. Stripe payments and HubSpot deals won are shown on their own, and a lead counts once even when it is won or lost later.

$ tail -f access.log | skald

See what AI does with your site. Free for 30 days.

No card. We set up hosted Skald for you within one working day, or you self-host it free. Every line of your log, sorted and added up.

Start free trial Live demo