Key takeaways
- Our meeting notes tool went dead mid week when the subscription lapsed, taking the API with it, so we exported the history and built our own.
- It records two separate tracks, you and them, so the transcript knows who said what without any clever math.
- It knows who the meeting is with before it starts, because it reads the CRM calendar instead of guessing from email addresses.
- Action items become real CRM tasks on the right contact the moment the notes are written.
- The bug that nearly shipped: asking who am I meeting with right now, an hour after the meeting ended, pointed at the next client.
We used a notes app for meetings for about a month. It was good. Then the subscription lapsed, and the API we had wired into our CRM started answering every request with a flat refusal. No warning, no grace period, and our automation that turned meeting action items into CRM tasks just stopped producing anything.
First move was to get the history out while we still could. Twenty seven meetings, parked in a folder on the machine. Second move was to decide whether to pay again or build it.
We built it. Not because the tool was bad, but because the part we actually cared about was never the recording. It was what happened after.
What it actually does
It sits in the tray. When a meeting starts it asks, bottom right corner, whether to record. You can tell it to record everything automatically if you would rather not be asked.
Knowing a meeting started turns out to be three separate questions, so it watches three things. The Google Calendar, read only. The CRM calendar, because a client booking on our own calendar is a meeting whether or not it ever synced to Google. And which applications are holding the microphone, because a call scheduled nowhere is still a call. Twenty seconds on the mic counts.
The third one is the one that saves you. Half the calls in a week are somebody ringing you, or a scheduled thing that moved, or a huddle nobody put on a calendar. A recorder that only knows about calendar events misses exactly the conversations you most wanted a record of.
Two tracks, not one
It captures your microphone and the computer audio as two separate tracks instead of one mixed file. That decision made everything downstream easier.
That sounds like a technical detail and it is really a product decision. With one mixed track, working out who was speaking is a hard problem you throw a model at and hope. With two tracks, your side and their side are already separate files, so the transcript labels you and them for free. When three people are on the far end, that channel goes to a service that separates and names them, falling back to a local model if it fails.
A privacy line worth stating plainly, because clients ask. The recording never leaves the machine and neither does the transcript. The only thing that goes out is the request that turns the transcript into notes.
It knows who you are talking to
The popup does not say meeting starting. It gives the name, says they are in the CRM, and shows how many open tasks sit on their record. It works that out from a booking on our CRM calendar happening right now, which is the strongest signal available because a booking carries the contact record directly. An exact attendee email match is the backup.
Before anything records, it writes a short context file into the meeting folder: who they are, what is open on their record, the last few CRM notes, and the notes from the last meeting with them. That feeds the model that writes the notes afterwards, which is why they read like somebody who remembered the last conversation.
The action items file themselves
The notes come back with action items in a fixed shape. Owner, task, due date, one per line. That shape exists so a script can read it, not because it looks tidy.
The moment the notes are ready, those lines become real tasks on the matched contact, and a bare note goes on their timeline saying a meeting happened. Bare on purpose. Not the title, not the link, not the summary. Outside admins can read notes in a sub account, so the content stays out of the CRM and only the fact of it goes in.
Confident matches go instantly. Anything ambiguous is left flagged for an hourly job to make a judgment call on.
The bug that nearly went out
The sync runs after transcription finishes, which on a long meeting can be an hour after everyone hung up. The first version asked the CRM who the current appointment is with at the moment it ran. On a normal day that returns the next client, not the one you just spoke to, so it would have filed a whole set of action items on the wrong record. Those tasks would have looked completely legitimate sitting there.
The fix is one line of thinking rather than one line of code. Identity gets resolved as of when the meeting started, never as of now. If you are building anything that acts on a past event, that rule generalizes further than you would expect.
Two more from the same review. Progress gets stamped after every external write, not at the end of the loop, because one failure halfway through created real tasks with nothing recorded and the retry made all of them again. And never let a failure path overwrite good output: a helper returning nothing on error wiped a finished set of notes on one click.
Why this matters if you run a business here
Most of the businesses we work with as a Go High Level San Jose shop have the same leak. The meeting goes well, three things get promised, and two of them are remembered. Nobody is lazy. The notes are in a notebook, or a different app, or a head, and the CRM is where the follow up actually has to live.
You do not need to build what we built. You need the pattern:
- Decide where a commitment lives before you make any. If it is not in the CRM it does not exist.
- Make the notes produce tasks in a fixed shape a machine can read. Prose is unusable.
- Attach the task to the contact record, not to a personal to do list. The next person to open that record needs to see it.
- Keep the meeting content out of the CRM and put only the fact of the meeting in. Who can read your notes is not always who you think.
- When something automated acts on a past event, make it resolve everything as of when the event happened.
Owning the tool also meant that when the vendor turned off, we lost a month of convenience instead of a year of records. That is worth something on its own.
If you want your meetings turning into follow up automatically instead of hopefully, see how our system runs at optechsol.llc.