
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_upgradedwithproperties.to = 'premium'overupgraded_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
| Event | Emitted when |
|---|---|
email_sent | Notify function dispatches an email via AWS SES. |
email_delivered | SES reports successful delivery (SNS). |
email_opened / email_clicked | Open pixel / click tracker fires. |
email_bounced / email_complained | SNS feedback loop. |
unsubscribed | Customer uses the one-click unsubscribe link. |
journey_entered / journey_exited | Any journey run starts or ends. |
order_created / order_completed | Commerce 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.