Profile every known customer
Send aprofile when a customer signs up or logs in, and whenever a trait changes. Profiles are upserts. Sent keys overwrite their stored values; omitted keys are preserved. A plan change can send { email, plan: "growth" } without repeating the customer’s name and company. To clear a trait, send a replacement value rather than omitting the key.
userId is the durable customer identity key. Every profile must include email, which Glyph uses to display and contact the customer.
Useful traits usually include name, plan, company, and signup date. Skip fields that won’t affect how you interpret or respond to customer feedback.
Known customers only
Every message requires a stable, non-emptyuserId from your system. Use a database ID rather than an email address, since email addresses can change. Glyph does not support anonymous identities or ID aliasing. Make sure your privacy notice and consent choices cover the customer data sent to Glyph.
Tracking an event for a new userId creates the customer record automatically. A later profile fills in the traits. Send the profile early so the timeline has a name and email from the start.
Track the moments that carry meaning
Most products can start with four event categories:
Include friction and lifecycle events, not only successful actions. For example, repeated
Export failed events provide useful context for a survey response about unreliable exports.
Name events for reading, not querying
Event names appear verbatim on timelines. Use a past-tense phrase in sentence case, such asInvoice paid or Export failed. Avoid snake_case and screen-namespaced identifiers such as dashboard.button.click.
Keep the taxonomy stable: pick names once and reuse them exactly. Invoice paid and Paid invoice become two different signals.
Properties add context, not identity
Properties are free-form JSON that add event-specific context such as amounts, plan names, and error codes:Record account context
If customers belong to teams or companies, record that context withgroup:
Capture page views where they happen
The browser SDK exposespage for recording page views. A page view can add context to another event; for example, a Billing view before Payment failed. Instrument product areas that are useful on a customer timeline rather than every route.
Backfill with real timestamps
Every method accepts atimestamp option for historical data:
timestamp for live events; the SDK sets it automatically. For larger imports, follow the backfill guide for pacing, dry runs, and re-runnable scripts.
What not to send
Glyph only receives data you send explicitly. Leave out:- Secrets and credentials — passwords, API keys, session tokens.
- Payment details — full card numbers or bank details. Amounts and invoice IDs are fine.
- Sensitive personal data — health, government IDs, or anything your privacy policy doesn’t cover sending to a processor.
A working baseline
For a typical SaaS product, start with:profileon signup, login, and plan change — with email, name, plan.- Three to five core value events, tracked server-side where possible.
- Every friction event you can detect: failures, errors hit, downgrades.
- Lifecycle events: trial started, subscribed, upgraded, cancelled.
pageviews for the main product areas, from the browser.