The Contacts screen is the inbox. Selecting a person shows their whole communication history in one stream regardless of which pipe it came down — messages read live from GoHighLevel, plus messages this platform stored itself from Twilio and Mailgun. Calls, voicemails, recordings and texted photos appear as rows in the same thread, not in separate tools.
Also called: inbox · message history · customer thread · conversation view · communication log
Texts, emails, calls and voicemails from one customer read as a single conversation
Open a person and you get all of it: the email you sent the quote in, the texts that followed, the call they made Tuesday, the voicemail they left Thursday — in the order it happened. Nobody has to remember whether they texted or emailed, and nobody has to check three places to find out what this customer was told. Hand the job to someone else and the record is the briefing.
One box texts them, emails them, or rings them — without leaving the conversation
SMS, Email and Call sit together under the thread, because calling is the third way to reach someone, not a different kind of job. Ringing back no longer means leaving for a dialer and re-finding the person you were already reading about. When a channel cannot be used it says which of the two reasons applies — the account is not set up for it, or this person has no number on file — rather than failing after you have typed the whole message.
The voicemail where they gave their budget is on their record, not buried in the thread
Voicemails, call recordings and photos customers text in are collected onto the contact automatically. Voicemails sit at the very top, because a message someone left is a person waiting for a call back; recordings collapse underneath, because they pile up fast. Each clip shows whether anyone has listened to it, and starring the one that matters keeps it above everything else.
Every estimate email carries what actually happened to it after you pressed send
A chip on each sent email says how far it got — delivered, opened, clicked, bounced — and the detail admits how much of an ‘open’ was a mail provider's machine rather than a person, so the number is one you can act on. A bad address surfaces the day it bounces instead of three weeks later when the customer has gone quiet. Emails display the way the customer sees them, and any of them can be forwarded to a supplier or an inspector without the copy leaving the job record.
Reading a message on the run does not clear the reminder to answer it
Opening a conversation does not mark it read — only pressing Mark read does. A rep who glances at a text from the truck still has the badge waiting when they reach a desk, so the unread count stays a to-do list rather than a record of who looked. Texts from numbers nobody has saved are not lost either: they collect in their own tab, where one click files them onto the right person.
The follow-up you write twenty times a week goes out in two clicks, with their name in it
Snippets, templates that carry their own subject line, and a signature are stored on the account rather than in the browser, so they are still there after a refresh — and a starter set arrives already written. Merge tags fill in the customer's own details and preview what each one will become before it goes. The microphone dictates the message using the browser's own speech recognition, which is what you want when you are typing with gloves on.
The thread is a count you can trust of what was actually sent
A message sent through a connected CRM exists in two places at once, and the pair is collapsed into one row — while a deliberate second send still shows as two, so nothing is hidden. Everything the platform sends is written into the conversation as well as leaving, so the history belongs to you and survives disconnecting an integration.
- 1fetchThread() pulls the GoHighLevel conversation and the platform's own conversation_messages rows in parallel
- 2Rows are namespaced (inb-<id>) so ids can never collide, then merged and sorted by timestamp
- 3Channel is mapped per row: email, SMS, call, or voicemail — a call is not rendered as a chat bubble
- 4The list polls every 10 seconds in the background without flashing a loading state
- 5Attachments render inline: photos as images, audio through the branded player
A builder does not think in channels — they think about the person who owes them a decision. Messages arrived down different pipes, and a builder whose history lived in one system could send a text and still see "No messages yet" on the customer's record, because the other pipe was the only one being read. Every text, email, call and voicemail for a person now merges into one thread on their record, whichever pipe carried it.
- Message history scattered across a phone, an email client and a CRM
- No single record of what a customer was told and when
- Replies arriving on a channel nobody was watching
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →