Measure

Customer profiles

One page per customer with every click, visit, email, text and sale, their first and last source, and lifetime value. Needs Attribution mode.

Customer profiles show each person who signed up or bought, one page each. You see every visit, short link click, email or text click, event and sale over time. You also see their first and last source, their orders and what they spent in total (lifetime value).

Open a site, then the Customers tab. Customer profiles are on paid plans: Solo, Studio, Agency and Custom. Free does not include them.

What you need

  1. Attribution mode on the site. Profiles build on its first-party id (the _st_id cookie), which ties one person's visits together for 90 days. Switch it in the site's Settings tab. See Tracking modes.
  2. Consent, where the law asks. Attribution mode stores an id on the device. In the EU and UK this usually needs consent first. Turn on Wait for consent, and nothing is stored or identified until your banner says yes.
  3. One identify call where people give you their email: a signup form, a checkout, a booking.

Identify on your site

After your form is sent, tell Sporetag who this is:

JavaScript
sporetag('identify', { email: 'ann@example.com', name: 'Ann Lee' });

You can send email, phone, name and id (your own user id). Send at least one of email, phone or id.

  • It works only in Attribution mode, and only after consent when you wait for it. In Private mode the call does nothing and sends nothing.
  • Earlier visits from the same device join the profile. So the ad or short link that first brought them in becomes their first touch.
  • The same email from a phone and a laptop is one customer.

Identify from your server

Events you send with the Events API identify the customer too, when the site is in Attribution mode. Send any of email, phone, visitor.id (the _st_id cookie) or external_ids:

JavaScript
body: JSON.stringify({
  name: 'Purchase', event_id: 'order-1042', value: 49, currency: 'USD',
  email: order.email,
  visitor: { id: req.cookies._st_id },
  external_ids: { stripe_customer: order.customer },
}),

A sale with a value adds an order and its value to the customer. Revenue adds up in the customer's first currency.

Shopify and Stripe

The easiest way: connect Stripe or Shopify in the site's Integrations tab. Orders, refunds and subscriptions then join each customer on their own, with the last 90 days imported.

To send them yourself instead:

Shopify checkout

Send orders/paid webhooks to the Events API with the order email, as in From a Shopify webhook. Add external_ids: { shopify_customer: String(o.customer.id) }.

Stripe

Send checkout.session.completed to the Events API, as in From a Stripe webhook. Copy _st_id into metadata.st_id when you create the session, and send it back as visitor.id.

The customer page

  • Lifetime value, orders, first seen and last seen.
  • First touch and last touch: the source, campaign, ad platform and short link of their first and latest known visit. A direct visit never replaces a known one.
  • Journey: one list, newest first. Visits with their source, short link clicks, email and text clicks (visits tagged utm_medium=email or sms), custom events, server events, purchases with their value, and sends to Meta. Items from other tools show here too. Filter by source or by kind.
  • Seen on: countries and devices, and what the person is known by.

Visits and events are kept in detail for about 90 days. After that the journey shows less. The first touch, orders and revenue stay on the profile for as long as the customer does. The page says so when it applies.

The list

Search by email or name. Sort by last seen, revenue or first seen. Filter by source, ad platform, campaign or short link, for the first touch or the last touch. Export CSV downloads the list as it is filtered.

The attribution report counts customers per source and splits them into new and returning. Each count links to the customers behind it.

Matching and merging

A customer can be known by many things: an email, a phone number, a device id, your user id, and ids in other tools such as a Stripe customer id. When one call shows that two profiles are the same person, they merge into one. The page lists each merge and why.

Two different emails are never merged. If two people share a device, the device moves to whoever identified last.

Privacy

  • Emails and phone numbers are normalized and hashed with SHA-256, the way Meta asks. Raw phone numbers are never stored.
  • Show customer emails (on by default) keeps the email and name, encrypted, so you can see who is who. Turn it off under Privacy and data requests on the Customers tab. Stored emails and names are then deleted, and people show as a masked label such as a•••@g•••.com.
  • Emails, phones and names never go into your stats. Events carry only the random device id and a random customer id.

Delete a customer

Open the customer, then Delete this customer. The profile, its ids and its items are deleted. Its ids are never linked again on this site. Visits and events already recorded cannot be edited; they age out within about 90 days.

Forget this email

For a data request, use Forget this email under Privacy and data requests. It deletes the customer with that email, if there is one, and never links that email again on this site.

Something missing or wrong? Email hello@sporetag.com.