# Acme Analytics: CRM stack (fictional example of martech-context/stack.md)

This is the file the worked example reads first. It shows the fields the audit needs. A real one holds no secrets and no personal data.

## CRM

- HubSpot, Sales Hub Professional and Marketing Hub Starter (the plan is part of the fiction; check entitlements in the real account).
- One deal pipeline, "Sales Pipeline", with HubSpot's default stages.
- Enrolled in HubSpot's primary ID preservation beta for merged records (part of the fiction), so a merged record keeps the primary's Record ID. Without the beta, every merge returns a new ID.
- Internal email domain: example.com. Contacts on it are staff or tests and are excluded from every rate.

## Systems that create or change records

- Billing Sync (integration user "Billing Sync"): creates companies and contacts through the HubSpot API when a billing account opens, and sets itself as owner. Writes Billing Account ID on companies and Product User ID on contacts.
- Website forms: create contacts (Record source "Forms") and set them as marketing contacts.
- Event badge scans: imported after events with name, phone and company, often without email (Record source "Import", with the event import's name in Record source detail 1).
- List imports by sales ops (Record source "Import", with the list import's name in Record source detail 1).

## Identity and keys

- Product User ID on contacts: one per product login, written by Billing Sync. Unique.
- Billing Account ID on companies: one per billing account. Unique.
- Account boundary (decisions.md, 2026-10-12): one company per billing account. Business units of one group share a domain but keep separate companies.

## Owners and approvers (roles, not names)

- CRM owner: RevOps lead. Approves merges and bulk changes.
- Routing owner: sales manager. Decides owner reassignment.
- Privacy owner: legal and compliance lead. Decides consent questions in merges and suppression.
- Retention owner: RevOps lead with legal. Decides deletion.
- Finance: confirms amounts and close dates on won deals.

## Users export

- users.csv with Owner ID, Name, Email, Active and Kind (person, integration, queue). Owner IDs come from `search_owners` (the owner `id`, never `userId`), and active status from the Users and Teams export, joined on email. Jordan Blake left in September 2026 and was deactivated without reassigning records.
