Audience
People & profiles

Events

Events are the behavioural spine of Pulse. Everything you do — segmentation, journeys, funnels, attribution — ultimately reads from the events table.

Shape

{
  "id": "uuid",
  "workspace_id": "uuid",
  "customer_id": "uuid | null",
  "name": "purchase_completed",
  "properties": { "order_id": "o_1", "total": 99.90, "currency": "USD" },
  "occurred_at": "2026-05-10T12:34:56Z",
  "received_at": "2026-05-10T12:35:01Z",
  "context": { "ip": "203.0.113.5", "ua": "Mozilla/5.0…" }
}

Naming conventions

  • Use snake_case and past tense: signup_completed, item_added_to_cart, subscription_cancelled.
  • Reserve a small set of standard names for common actions (page_viewed, session_started).
  • Avoid embedding values in event names. Prefer plan_upgraded with properties.to = 'premium' over upgraded_to_premium.

Properties

Properties are free-form JSON. Pulse indexes common shapes (strings, numbers, booleans) and surfaces them in the segment builder. Use consistent keys and types across events; mixing total: "99.90" and total: 99.90 will split your segment buckets in unexpected ways.

Standard events emitted by Pulse

EventEmitted when
email_sentNotify function dispatches an email via AWS SES.
email_deliveredSES reports successful delivery (SNS).
email_opened / email_clickedOpen pixel / click tracker fires.
email_bounced / email_complainedSNS feedback loop.
unsubscribedCustomer uses the one-click unsubscribe link.
journey_entered / journey_exitedAny journey run starts or ends.
order_created / order_completedCommerce webhook receives a new/paid order.

Events explorer

Under Events you can:

  • Filter by name, customer, and date range.
  • Inspect raw JSON payloads.
  • Pivot counts over time (hourly / daily / weekly buckets).

Retention

Events older than the workspace's data_retention_days (default 365) are deleted by a nightly job. Set this in Settings → Data to meet your compliance policy.