Website Analytics
Count visits on your website with one script tag, anonymously by default, and link visitors to contacts.
Coming soon
Website Analytics is coming soon. Until then it is opened to selected workspaces for early access, and its endpoints are described here rather than in the API Reference. The script and the API work for a workspace once the service has been opened for it and installed. Ask for early access from Contact us in the app.
Website Analytics counts page views, time on page, scroll, exits, clicks and where each visit came from. The script is a tracking beacon, not a widget: it renders nothing, unless you turn on the optional consent banner. Visits are counted anonymously by default, with nothing stored on the visitor's device. Websites published with the AI Website Builder get the script automatically, so this guide is for websites you host yourself.
Add the script
In the dashboard, open Website Analytics -> Install, add your website and copy its script line. Paste it into the <head> of every page.
<script src="https://app.softsolz.uk/softsolz.js" data-service-id="web-analytics" data-public-key="pk_live_your_key" defer></script>- The public key only works on the addresses you added for the website. Adding
example.comalso coverswww.example.com, overhttps://only. - Single-page apps are handled: the script counts a new page view when the address changes without a reload.
- Adding the script twice on a page is harmless; it only runs once.
- The script loads from and sends visits to
https://app.softsolz.uk. If your site sets a Content Security Policy, allow that origin inscript-srcandconnect-src. Visits carry your public key in the request address, because browsers cannot add headers to the requests sent as a page closes. The key is public by design and only works on your addresses.
Track clicks and your own events
Links to other websites, downloads, mailto: and tel:links and form submits are recorded on their own. A form submit records the form's name (or id), never the values typed into it. To track any other element, give it a data-ss-track label:
<button data-ss-track="pricing-cta">Start free trial</button>Send your own events from code. Names are trimmed to 80 characters.
window.Softsolz.analytics.track('quote_requested')Calls made after softsolz.js has run are held until the tracker is ready, so you do not need to wait for it. Leave pages out entirely with Pages never counted on the Install page, for example /admin/*.
Privacy modes and consent
Each website has a privacy mode, set on the Install page. Visits are counted anonymously in every mode.
- Ask first (default) - a visitor is remembered only after they agree.
- Remember every visitor - visitors are remembered unless they decline. Use this only where your privacy notice and the law allow it.
- Never remember - nobody is remembered and nothing is stored on the device.
Remembering keeps a random visitor key in the browser's local storage, so later visits link up. If you already have a cookie banner, tell the script what the visitor chose:
window.Softsolz.consent('granted')
window.Softsolz.consent('denied')
window.Softsolz.consentState()consent('denied') also removes the visitor key. consentState() returns 'granted', 'denied' or null when the visitor has not chosen. The page also receives a softsolz:consent event on window with the choice in event.detail.decision.
No cookie banner? Turn on Show a consent banner on the Install page. The script reads the setting each time a page loads, so there is nothing to copy again, and SoftSolz shows a small Accept or Decline banner to visitors who have not chosen yet. It only shows in Ask first mode. To keep it off one page while it is on for the rest of the site, add one attribute to the script on that page:
<script src="https://app.softsolz.uk/softsolz.js" data-service-id="web-analytics" data-public-key="pk_live_your_key" data-consent-banner="off" defer></script>Remembering is cookie law
Storing a visitor key on the device needs the visitor's agreement in the UK and the EU, and a mention in your privacy notice. Browsers sending Do Not Track or Global Privacy Control are not counted at all, whatever the mode. Only the host of a referring site is recorded, never the full address, and IP addresses are never stored.
Link a visitor to a contact from your server
Visitors who fill in a SoftSolz form, join your newsletter or sign in through Customer Auth are linked to their contact automatically. When someone signs in to your own app instead, link them yourself: read the visitor token in the browser, send it to your server with the signed-in session, and call the API with a secret key that holds service.web-analytics.manage.
const visitorToken = window.localStorage.getItem('softsolz.wa.vt')curl -X POST https://app.softsolz.uk/api/v1/services/web-analytics/visitors/identify \ -H "Authorization: Bearer sk_live_your_key" \ -H "Content-Type: application/json" \ -d '{"visitor_token":"wv...","contact_id":"9d0f2c1e-7a54-4cf8-9b55-0d6c2b8f1a10"}'A visitor token starts with wv and only exists once the visitor is remembered. The reply is {"data":{"identified":true,"visitor_id":"...","contact_id":"..."}}. Linking is refused with a clear code when it cannot be done:
400 visitor_token_requiredorcontact_id_required- a field is missing.422 visitor_token_invalidorvisitor_not_found- the token is not one of this workspace's remembered visitors.404 contact_not_found- the contact is not in this workspace.409 visitor_not_recent- the visitor has not been on the website in the last hour.409 identify_limit_reached- the visitor was linked to too many different contacts today.
Linked visits then appear on the contact's timeline in the dashboard.
Endpoints
All under https://app.softsolz.uk/api/v1/services/web-analytics. Reports accept days (1 to 400, default 30) or from and to (YYYY-MM-DD, inclusive), compare (previous, year or none), and the filters site_id, country, channel and device.
GET /sites,/overview,/pages,/sources,/countries,/events- scopeservice.web-analytics.view.GET /visitors,/visitors/:visitor_id- scopeservice.web-analytics.visitors.view.POST /visitors/identify,DELETE /visitors/:visitor_id- scopeservice.web-analytics.manage.
curl "https://app.softsolz.uk/api/v1/services/web-analytics/overview?from=2026-09-01&to=2026-09-30&compare=previous" \ -H "Authorization: Bearer sk_live_your_key"Webhooks
web-analytics.visitor_identified- a remembered visitor was matched to a contact.web-analytics.contact_returned- a known contact started a new visit after time away.web-analytics.key_page_viewed- a known contact viewed one of your key pages, once per visit.
Next
Signing and retries in Webhooks, and the product walkthrough on docs.softsolz.uk.