Personal CRM
Auto-track every contact you meet — from email, calendar, and chat — with natural-language queries and pre-meeting briefings.
Knowledge & Researchmedium~45m setup
- Tools
gmailgoogle_calendarmemorymemory_searchexec- Plugins
personal-crm-db- Channels
telegramdesktop- Uses
cron
You meet someone. Two months later they email you and you've forgotten where you met, what they do, and what you talked about. A personal CRM fixes this without the discipline of manually entering everyone after every meeting — Flowly watches your email and calendar and keeps the record automatically.
What it does
- Daily scan of email + calendar for new contacts and interactions
- SQLite-backed contacts table with names, companies, last contact, notes
- Natural-language queries from any channel: "What do I know about Mehmet?"
- Pre-meeting briefings: morning of any meeting with external attendees, you get who they are + your last interaction summary
- Automatic interaction logging — every email + calendar event records who, when, context
What you'll need
- Gmail + Google Calendar integrations
- A
personal-crm-dbplugin (built once via plugin-creator) - Memory for unstructured notes
- Cron for daily sync + morning briefs
Setup
1. Build the CRM plugin
Ask the agent to use plugin-creator:
Send to Flowly
Create a plugin called "personal-crm-db" backed by SQLite at
~/.flowly/personal-crm/contacts.db. Schema:
contacts(id, name, email, company, first_seen, last_contact,
interaction_count, notes)
interactions(id, contact_id, ts, channel, context)
Tools to register:
- crm_upsert_contact(name, email, company, notes) -> id
- crm_log_interaction(contact_id, channel, context)
- crm_search(query) -> top 5 matching contacts with last interaction
- crm_get(id) -> full contact + last 10 interactions
- crm_due_followup(days_since=14) -> contacts not heard from in N days
Slash command: /crm <subcommand> for status, search, recent
Restart, enable, verify with flowly plugins list.
2. Daily sync cron
Send to Flowly
Set up a cron job "crm-sync" that runs daily at 6 AM:
For the last 24 hours:
1. Read Gmail. For each new conversation thread:
- Extract sender's name, email, signature/company
- Call crm_upsert_contact + crm_log_interaction(channel="email", context=<subject + 1-line summary>)
2. Read Google Calendar. For each event with external attendees:
- For each attendee, crm_upsert_contact + crm_log_interaction(channel="meeting", context=<event title>)
Skip newsletters, automated emails (no-reply, notifications, alerts),
and bots.
3. Pre-meeting briefing cron
Send to Flowly
Set up a cron job "meeting-prep" that runs daily at 7 AM:
Read today's calendar. For each meeting with external attendees:
- For each external attendee, call crm_search(<their email>)
- If found, build a short briefing: company, last interaction, key topics
- If not found, do a quick web search for their name + company
Send the day's briefings to my Telegram as a single message, sorted by
meeting time.
4. On-demand queries
Already work via natural language:
"What do I know about ayse@partnerco.com?" "Who do I owe a follow-up to that I haven't talked to in 3 weeks?"
The agent calls crm_search and crm_due_followup, returns clean output.
Tips
- Hand-curate the first 50 contacts. Auto-extraction is 80% accurate — it gets companies wrong from forwarded threads. Spend an hour after week one fixing the worst ones.
- Use notes for the human stuff. The CRM tools track facts; add free-form notes for "they hate Mondays" or "their kid is named X." The agent will remember it forever.
- Privacy: this is private data. Don't sync the CRM DB to cloud storage casually. If you must back up, encrypt it.
- Don't merge contacts automatically. Two emails for the same person stay as two contacts unless you confirm — auto-merging is how you accidentally lose context.