Chrome Extensions
fb-messenger-crm
What It Does
Section titled “What It Does”Turns Facebook Messenger into a lightweight CRM. Create custom labels (Clients, VIP, Hot Leads, New Leads, Friends, or whatever else you need), assign them to threads, and see colored badges next to contact names in both the left chat list and the conversation header. Everything lives in chrome.storage.local — no accounts, no sync, no server.
When To Use
Section titled “When To Use”- You are running outreach through Messenger and need to see at a glance who is a paying client vs cold lead vs friend.
- You manage multiple Pages or accounts through one Messenger and your inbox is a sea of identical-looking conversations.
- You want a Facebook-side tag that does not depend on a connected GHL contact existing first.
How To Install And Invoke
Section titled “How To Install And Invoke”- Load unpacked from
~/apps/fb-messenger-crm/extension/atchrome://extensions. - Pin the extension to the toolbar.
- Click the popup → create your first label (or use the seeded defaults: Clients, VIP, Hot Leads, New Leads, Friends).
- Open
messenger.com. Each thread row in the left list shows badges for any labels assigned to that conversation. - In an open conversation, click the Labels button in the header to assign or unassign labels via a checklist picker.
Prerequisites
Section titled “Prerequisites”| Requirement | Where |
|---|---|
| Manifest permissions | storage, tabs, activeTab; hosts: messenger.com, facebook.com/messages, 127.0.0.1 (logger) |
| chrome-log-receiver running | ~/apps/cc/chrome-log-receiver.py under launchd |
Data Model
Section titled “Data Model”{ labels: [{ id, name, color, createdAt }], assignments: { threadKey: [labelId, ...] }}threadKey = the path segment after /t/ in the Messenger URL.
Where It Lives
Section titled “Where It Lives”- Repo:
~/apps/fb-messenger-crm/ - Entry files:
extension/manifest.json,popup.html,popup.js,background.js,content.js,content.css,selectors.js,storage.js - Logs:
~/apps/cc/logs/fb-messenger-crm.log
Known Gaps / Quirks
Section titled “Known Gaps / Quirks”- Selectors live in
extension/selectors.js— the content script also inlines a copy because it cannot import ES modules. When Messenger changes its DOM, fix both. - No GHL sync. Labels here are private to the extension. A Phase 3 idea is to mirror them onto a custom field on the matching GHL contact.
- No notes per thread yet. Phase 2.
- Build 1.