CRM
Your team's CRM updates itself. Every time someone is mentioned in a chat, in a Granola meeting note, or in an agent output, GrooveOS extracts the contact and adds them to your team's directory — with their name, company, role, and the conversation context — without anyone typing it twice.
The CRM is just another view on top of your team's memory. It uses the same team scope, the same truth levels, and the same audit trail. Team A's CRM cannot leak into Team B's.
What the CRM is for
Most CRMs ask you to keep them up to date. GrooveOS flips it: everything your team already discusses becomes the CRM. You don't enter "Bob from Acme called this morning" — you just have the conversation, and Bob shows up in the directory with the new context the next time you look.
You typically use the CRM to:
- Look up "who is Bob from Acme?" and see every meeting, chat, and decision he was in.
- See the list of all investors your team has been talking to this quarter.
- Promote a key contact to
VALIDATEDso AI conversations always know who they are. - Export a clean list before a campaign or a board update.
Opening your team's CRM
Sign in at grooveos.app/account/teams/, open your team card, and click CRM. The page lives at:
https://grooveos.app/account/teams/crm/?team=<your-team-slug>
You'll see a table of every contact in your team's scope, newest first. Click a row to see every memory item, meeting, and chat the contact appears in.
How it builds itself
Three signals feed contacts into your CRM:
| Source | What gets extracted | Latency |
|---|---|---|
| LibreChat / Open WebUI chats | People mentioned by name or email — extracted by Claude when the conversation is indexed. | ~10 s after the chat is saved |
| Granola meetings | Every meeting attendee becomes a contact directly (no LLM extraction — they come from the meeting metadata). | ~5 min after the meeting ends |
| Agent outputs | Same as chat — any agent run that mentions people produces contact upserts. | ~10 s after the agent finishes |
Email is the deduplication key
Contacts are upserted on (team_scope, email). If Bob shows up in
five different meetings with the same email, you get one contact row with five
linked memory items — not five duplicate Bobs. Existing fields are only
overwritten when a new source provides a higher-confidence value.
Contact fields
| Field | Description |
|---|---|
email |
The deduplication key — unique within your team. |
name |
Display name. Extracted from meeting attendees or chat content. |
company |
The organisation the contact is associated with. |
role |
Job title or role (e.g. "CTO", "Investor"). |
notes |
Free-form notes you or your team can add manually. |
truth_level |
Defaults to WORKING. Promote to VALIDATED for "we've confirmed who this is". |
source |
Where the contact came from: granola, chat:<conversation-id>, agent:<run-id>, or manual. |
confidence |
0.0–1.0 — the system's confidence in the extraction. Meeting attendees default to 1.0; chat-extracted contacts default lower. |
Edit, merge, validate
The CRM page lets you act on each contact without writing code:
- Edit fields — change name, role, company, notes inline. Saves immediately.
- Promote — bump a contact's
truth_levelfrom WORKING to VALIDATED so the AI always trusts who they are. - Merge — when two rows are clearly the same person (typo in email, alias), merge them. All linked memory items move to the surviving row.
- Add manually — yes, you can still type a contact in if you need to seed someone before they show up in a chat.
Soft-delete works the same way as the Brain Monitor: deleted contacts are recoverable for 30 days, then purged.
Promote VIPs to CANONICAL
If you promote a contact to CANONICAL, that contact's name,
company, and role are injected into every AI conversation on your team. Use
this for board members, key customers, or anyone the AI should always know.
Plan availability
The CRM is part of the Team and Enterprise plans. Free plans don't get the CRM page — Free is meant for individuals trying out GrooveOS in a personal team.
Upgrades take effect immediately — your existing contacts (already extracted while on Free) become visible the moment your team flips to Team plan.
FAQ
Can other teams see my CRM?
No. Every contact carries your team_scope at write time. The CRM
page filters server-side — other teams cannot see your rows, even with a stolen
access token. Isolation is enforced at the database level, not just the UI.
What if a contact appears under two emails?
Use the Merge action in the row's menu. Both contact rows collapse into one; linked memory items are re-pointed to the surviving row; duplicate row is soft-deleted (30-day recoverable).
Can I sync the CRM to HubSpot / Salesforce?
Not in v1. The API exposes GET /v1/crm/contacts
and the standard CRUD endpoints, so you can write your own sync script today.
Native HubSpot and Salesforce bridges are on the roadmap — vote at
team@grooveos.app.
How do I export the CRM?
Click Export on the CRM page — downloads a CSV scoped to your
team. For programmatic exports, see GET /v1/crm/contacts in the
API Reference.
What's next
- Meetings (Granola) — Connect Granola to feed every meeting attendee into the CRM.
- Brain Monitor — See contact rows alongside memory items, tasks, and conversations in one feed.
- Memory & Knowledge — Truth-level rules apply to contacts the same way they apply to facts.
- API Reference — Programmatic CRM endpoints.