Skip to content

For AI agents: this page as Markdown; every page and guide as Markdown is listed in llms.txt.

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

docs · guide 3 of 27

Pick your road

Which way your site's leads, bookings and payments should reach Skald, by the kind of site you run: what each road gives you, what it cannot see, and what to set.

For AI agents: this guide as Markdown · llms.txt

The roads

Skald always reads your web server's log: visits, pages, sources, AI assistants and bots. Conversions come in by four other roads. Pick the ones that fit your site.

RoadWhat it isSet up in
The script tagOne line in every page's head. It reports form steps, phone and email clicks, booking widgets and button clicksTracking script
The lead hookYour site's own server tells Skald "a lead was made", in a signed messageSend leads from your backend
Tool hooksCalendly, Cal.com, Stripe, HubSpot, Typeform, Zapier or Make send their own signed messagesWebhooks
The lead databaseSkald reads your site's own lead store, with no change to the websitethe server's config (leads.db)

The lead database road reads SQLite only: a Payload-style submissions table. It cannot read MySQL, Postgres or a WordPress database. For those, use the lead hook.

By kind of site

Your siteRoadWhat you getWhat you do not getWhat to set
WordPress or another CMS with a form pluginScript tag, plus the json hook through Zapier or Make (or the plugin's own webhook, if it can sign)Forms started and sent, phone and email clicks, each lead with its sourceThe lead's later status (won, lost), unless your CRM sends itThe tag on every page; data-skald="contact" on the contact form; a Zap or scenario that posts to the json hook
Next.js on VercelScript tag, plus the signed lead hook from an API route or server actionEvery lead your server makes, with its first and last touchThe visit figures, until Vercel's logs reach Skald through a log drainThe tag; the hook secret in Vercel's environment variables; a log drain (docs/CDN-LOGS.md)
A site with a Postgres or MySQL backendThe signed lead hook from the backendEvery lead, on the server's word, even when a browser blocks scriptsForm steps, unless you add the script tag tooThe hook secret in the backend's environment
A site that keeps leads in SQLite (Payload CMS)The lead databaseEvery lead, its status (won, lost, spam) and its touches, with no codeLeads from other placesleads.db in the server's config
No-code site (Webflow, Squarespace, Wix)Script tag, plus Zapier or Make to the json hookForm steps and clicks from the tag; the form's leads from Zapier or MakeAnything the builder will not let you add to the page headThe tag in the site's custom code; a Zap that posts to the json hook
Calendly or Cal.comThe tool's hook, plus the embed through the script tagBookings, cancellations, reschedules and no-shows; opened and time chosen when embeddedOpened and time chosen when you only link to the booking pageSee Demo bookings
StripeThe stripe hookEach paid checkout, and one paid later by a slow methodRefunds, subscriptions, customer details (never read)The endpoint's signing secret (whsec_...), pasted on the Integrations page; the visitor ID as the session's client_reference_id
HubSpotThe hubspot hook, or Zapier to the json hookNew contacts, booked meetings, deals wonAnything HubSpot does not sendThe app's client secret, pasted on the Integrations page
Zapier, Make, n8nThe json hookAny lead any tool knows about, up to 100 in one messageNothing by itself: it sends what the Zap sendsMake secret for json, and the signing step in the Zap

Never sign a hook in the browser. The secret must stay on a server. A browser can only use the script tag.

What each road costs in privacy

  • Visitor IDs are off by default. Then the script tag makes no ID, and a hook's vid is dropped before anything is kept. Journeys, abandoned forms and assisted sources need the IDs on. Your privacy notice must say so.
  • Names and emails are kept only when Leads' names and emails is full (Settings > Data retention > People). That is the default for a new install; an install upgraded from before 2.4.0 keeps none until an admin turns it on. Then the name and the primary email only. Nothing else, ever: no phone, no address, no message.
  • Addresses and browsers. A lead hook may send the visitor's address and browser once. Skald looks up the country and the device, then drops both.
  • The log itself. With Keep visitors' IP addresses on (also the default for a new install), each visit in the log is kept with its address, so admins can look a person up. See Privacy.
  • The lead database is opened read-only. Only the columns Skald needs are read.

One lead, one road

Send each lead through one road only. Each tool keeps its own row, so the same lead sent through two (for example the lead hook and Zapier, or the lead hook and the lead database) counts twice.

Settings > Integrations > Status flags it: "One lead, two tools", with the leads it saw. Turn one of the two roads off for those leads.

Check it

  • On the server: sudo traffic-intel doctor (Docker: docker exec skald traffic-intel doctor). It lists every part with OK or NEEDS ATTENTION, and the fix.
  • In the dashboard: Settings > Integrations > Status shows the same lines for the roads in, and each hook says "ready", "never received" or "last received 2 h ago".

$ 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