> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pivotal.app/llms.txt.
> For full documentation content, see https://docs.pivotal.app/llms-full.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pivotal.app/_mcp/server.

# Customer history

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.

## What gets logged

The feed captures every write that touches the customer or its children. Major event types:

| Event type                           | Fired when                                                                              |
| ------------------------------------ | --------------------------------------------------------------------------------------- |
| `customer.field_changed`             | Any inline edit to `name`, `domain`, `owner`, `plan`, `status`, tags, or a custom field |
| `customer.status_changed`            | Status moves between `active`, `at_risk`, `churned`, `archived`                         |
| `customer.health_score_dropped`      | Score drops by 10 or more                                                               |
| `onboarding.phase_moved`             | An onboarding linked to this customer moves phases                                      |
| `task.completed` / `task.created`    | Any task on a linked onboarding changes state                                           |
| `contact.added` / `contact.archived` | Contacts on this customer change                                                        |
| `comment.added`                      | Comments anywhere on the customer or its onboardings                                    |
| `integration.sync_write`             | A CRM sync wrote to this customer                                                       |
| `pi.nudge`                           | Pi posted a risk or attention nudge                                                     |

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.

## Filter the feed

The filter bar above the feed has three controls:

* **Actor**. You, a specific teammate, an integration (HubSpot, Stripe, Slack), or Pi. Multi-select.
* **Event type**. Pick from the table above. Useful when chasing a specific change.
* **Date range**. Preset (7d, 30d, 90d) or custom.

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.

## Export the feed

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.

## The gotcha: deleted contacts in old entries

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](/product/customers/manage-contacts).

## Related

* [Edit customer details](/product/customers/edit-customer-details)
* [Manage contacts](/product/customers/manage-contacts)
* [Audit log](/product/onboardings/audit-log)

Email **[help@pivotal.app](mailto:help@pivotal.app)** with a screenshot of where you got stuck and the customer or onboarding id from the URL.