Usage

Everything is managed from the dashboard at app.whatsmytraffic.com. Its main areas are Websites and Analytics, plus Admin and Settings.

Accounts

The dashboard is invite-only. If you have an invite link, signing up through it creates your account. Admins generate invite links under Admin.

Websites and tracking

Under Websites, add a website by its domain. The dashboard registers it with the analytics backend and assigns it a colour. Expand a website to find its tracking snippet, its forms, its auth apps, a share link, its colour and its mail configuration.

Paste the tracking snippet into the <head> of the site you want to track:

Tracking snippet Click to copy
<script defer src="https://whatsmytraffic.com/beacon.js"
        data-website-id="YOUR-WEBSITE-ID"></script>

The beacon is cookieless and respects Do Not Track / Global Privacy Control by default. See Beacon below for every option.

Mail configuration

Each website can have its own outgoing mail identity: SMTP host, port, username, password, plus a from address and an optional from name. All mail for things scoped to that website goes through it: form notifications, form confirmations, auth welcome emails and magic links. If left empty, mail falls back to the shared instance mail.

Port 465 selects implicit TLS, anything else (typically 587) uses STARTTLS. You need to set up SPF and DKIM for the from-address domain yourself, otherwise outgoing mail will land in spam. Use the "Clear" button to drop the mail configuration entirely.

Analytics

The Analytics tab shows traffic for your websites: page views, visits, a time series (switchable between bars and a cumulative view), a world map and the top pages, referrers, countries and browsers. Pick a time range (24 h, 7 days, 30 days, all time) and a resolution (hourly, daily, monthly). A realtime bar shows the last 30 minutes. X-axis times use your browser's timezone. From the Websites list, the chart icon on a website jumps straight to its analytics.

Share links

Each website can have a public, read-only share link, generated under Websites. Anyone with the link sees that website's analytics without a login. The same link with /data appended is a JSON API; see the API reference. Revoke a link at any time and the public page and the API stop working immediately.

Forms

Forms belong to a website. Expand a website and use its Forms section to create one, then expand the form for its embed snippet and settings. Point an HTML form at https://whatsmytraffic.com/f/YOUR-FORM-ID. Per form you can configure:

  • Webhook URL: submissions are POSTed there as JSON.
  • ntfy URL: a push notification per submission.
  • Notify emails: comma-separated addresses, sent through the website's SMTP (configured per website, see below).
  • Confirmation email: opt in to send a thank-you mail to the submitter (using the form's email field as recipient). Custom body with variables {form_name} and {timestamp}, optional Reply-To. Goes through the website's SMTP if configured, otherwise the instance mail.

Each form has its own submissions inbox, opened from the form. Submissions can be exported there as JSON or Markdown. A hidden honeypot field marks bot submissions as spam. Full endpoint details in the API reference.

If the beacon is loaded on the same page as the form, each submission is also tracked as a form_submit event in analytics, tagged with the form id. See Beacon for how to disable it.

Auth

The auth service adds a passwordless (magic-link) login to your own site. Expand a website and use its Auth section to create an auth app, then expand the app to set its redirect URLs (where users land after signing in) and allowed origins (the sites permitted to call it).

Drop the integration snippet into your site. The bundled SDK exposes wmtAuth.login(email), which emails a magic link, and wmtAuth.getSession(), which returns the signed-in user once they follow it. No end-user data is stored: the session is a signed token that lives in the visitor's browser. Endpoint details are in the API reference.

Per auth app you can opt in to a welcome email sent on a user's first sign-in to this app. Custom body with variable {app_name}. Goes through the website's SMTP if configured, otherwise the instance mail. A small marker remembers which email has signed in before so the welcome is only sent once.

If the beacon is loaded on the same page as the auth SDK, two events are tracked automatically: auth_request when a magic link is requested and auth_signin when a user comes back through the link. Together they form a sign-in funnel in analytics.

Bookings

The booking service adds Calendly-style scheduling to your own site. Expand a website and use its Bookings section to create a booking page, then configure its slot length, buffer between bookings, minimum notice, booking horizon, timezone and weekly availability.

Embed the SDK snippet: any element with data-wmt-booking opens the booking modal. Visitors pick a day and time (shown in their own timezone), enter name and email, and both sides receive a confirmation email with an ICS calendar invite and a cancellation link. The hosted page at https://whatsmytraffic.com/b/YOUR-PAGE-ID also works standalone as a link target. Endpoint details for custom UIs are in the API reference.

Per booking page you can configure a webhook URL (bookings and cancellations are POSTed there as JSON) and an ntfy URL (a push notification per booking), in addition to the confirmation emails.

Each booking page has its own bookings panel, opened from the page's calendar icon: upcoming and past bookings, with owner-side cancellation (the booker is notified and the event is removed from calendars). The panel also holds the calendar feed: a private ICS URL you subscribe to from Apple Calendar, Google Calendar, Outlook or Thunderbird. Confirmed bookings appear in your calendar automatically, with no account linking. The link can be rotated or revoked at any time; treat it like a password.

Double bookings are always prevented server-side: a confirmed booking blocks its slot. Optionally, with Google Calendar connected (under Settings), busy times in your Google calendar additionally block slots and confirmed bookings are created as events there. The booking service is fully functional without it.

If the beacon is loaded on the same page as the booking SDK, two events are tracked automatically: booking_open and booking_confirmed, forming a booking funnel in analytics.

Settings

Settings holds your personal preferences:

  • Notifications: opt in to a weekly analytics report by email, and to receiving every form submission by email. Both are off by default and are delivered through the shared instance mail (these are account-wide and don't belong to a single website).
  • Google Calendar: connect your Google account for the booking service (busy times block slots, bookings create events). One connection per account, enabled per booking page.
  • Embed badge: a small "Powered by whatsmytraffic" badge for your site's footer. Pick a colour, copy the snippet, paste it in. Pure SVG, links back to whatsmytraffic.com.

Outgoing mail (form notifications, confirmations, auth welcome mails, magic links) is configured per website under Websites, not here.

Beacon

The tracking beacon is a small wrapper around the Umami tracking script with consent gating, DNT/GPC support and a wmt() API. Configure it with data-* attributes on the script tag:

AttributeDefaultMeaning
data-website-idrequiredThe website ID from the dashboard.
data-hosthttps://whatsmytraffic.comAnalytics host.
data-domains—Comma-separated hostnames; tracking only runs there.
data-auto-tracktrueTrack page views automatically. false = manual only.
data-require-consentfalsetrue = track only after consent is granted.
data-respect-dnttrueRespect Do Not Track / Global Privacy Control.
data-track-formstrueAuto-track submits to /f/* as form_submit events.

JavaScript API

The beacon exposes a global wmt() function:

CallEffect
wmt('pageview')Track a page view manually.
wmt('event', name, data?)Track an event, optionally with a data object.
wmt('consent', 'grant')Grant consent; persisted, loads tracking.
wmt('consent', 'revoke')Revoke consent.