Open any customer and click the Activity tab. You’ll see a reverse-chronological feed of every change to the record: field edits, phase moves, task completions, comments, sync writes from your CRM, status flips, and Pi’s automated nudges. Each entry stamps the actor, the timestamp, and a diff if a value changed. The feed is the source of truth when something looks off and you need to figure out who did what.
The feed captures every write that touches the customer or its children. Major event types:
System-driven events (CRM syncs, Pi nudges) appear with the source’s icon so you can tell them apart from human edits at a glance.
The filter bar above the feed has three controls:
Filters stack, so “HubSpot writes in the last 7 days that changed plan” is Actor: HubSpot + Event: customer.field_changed + date range, then expand the entries to confirm the field.
Click the ⋯ menu at the top right of the tab and pick Export to CSV. The export respects your current filters, so filter first if you want a slice. Columns: timestamp, actor, actor_type, event_type, field, old_value, new_value, onboarding_id. Rows are line-per-event, one row per changed field on multi-field edits.
For programmatic access, hit GET /v1/customers/{id}/activity. Same data shape as the export.
If you deleted (not archived) a contact, every old activity entry that referenced them collapses to “removed contact” with no name. The event itself stays, but the actor or target becomes anonymous. This is why most teams archive instead. See manage contacts.
Email help@pivotal.app with a screenshot of where you got stuck and the customer or onboarding id from the URL.