One conversation per customer — texts, emails and calls in a single thread

Every text, email, call, voicemail and photo for a customer shows in one time-ordered thread on their contact record.

What it is

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

See it, piece by piece
01

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.

Conversation
MZMarlin Zook(717) 555-0118Mark read (2)
Your 40×64 post-frame quote
Marlin Zook • Aug 21, 9:14 AM(3 messages)
Opened 2×
Thanks Marcus — the number works. One question about the sidewall height before we...
Can we bump the sidewalls to 16' instead of 14? Want the lift to clear.
Aug 22, 7:48 AM
Yes — 16' adds about $4,100. I'll send the revised quote this afternoon.
Aug 22, 8:03 AM
Voicemail
📞 Voicemail from (717) 555-0118 - 0:24
0:00 / 0:24Voicemail
Transcript
Aug 24, 4:12 PM
ShowTextsEmailsShowing all
One column: a collapsed email thread, two texts, then the voicemail with its player. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
02

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.

Conversation — compose
Subject...
Hi Marlin — revised quote attached with the 16' sidewalls. Everything else is unchanged.
SMSEmail CallSnippets Send
Send Now
Send Later
Schedule for a time
SMS · Email · Call as one control, with Send Now / Send Later open beneath it. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
03

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.

Voicemails & call recordings
Voicemails (2)1 newMessages they left
Aug 24, 4:12 PM · 0:24
0:00 / 0:24
Transcript
Aug 19, 8:41 AM · 0:11
0:11 / 0:11
Call recordings (4)Conversations
Outbound call · Aug 22, 10:05 AM · 6:38
2:14 / 6:38
Voicemails (2) with one still marked new, above Call recordings (4). The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
04

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.

Conversation — email thread
Your 40×64 post-frame quote
Marlin Zook • Aug 21, 9:14 AM(2 messages)
MFMarcus FeldTo: marlin.zook@demo.invalidDeliveredAug 20, 4:02 PM
Marlin — quote attached for the 40×64 with 14' sidewalls, 29ga painted steel both sides. Price holds 30 days.
MZMarlin ZookTo: Marcus FeldAug 21, 9:14 AM
Thanks Marcus — the number works. One question about the sidewall height before we sign anything.
Reply Forward
The DELIVERED chip on the sent quote, with Reply and Forward at the foot of the thread. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
05

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.

Contacts
Import 3 dups
AllUnread (3)SMSEMAILRecentA–Z
MZ
Marlin Zook12m
Sounds good — I'll be out at the site Thursday morning.
$74,300.002
DB
Danielle Beiler3h
Your 40×64 post-frame quote
$68,120.00
CH
Curtis Hoover1d
Voicemail from (717) 555-0132 - 0:24
1
RP
Rosalyn Petersheim2d
Can we move the overhead door to the gable end?
$92,450.00
WF
Wendell Fisher6d
Equipment Storage
Unread counts still lit on the rows, with the Unread (3) filter beside All. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
06

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.

07

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.

How it works
  1. 1fetchThread() pulls the GoHighLevel conversation and the platform's own conversation_messages rows in parallel
  2. 2Rows are namespaced (inb-<id>) so ids can never collide, then merged and sorted by timestamp
  3. 3Channel is mapped per row: email, SMS, call, or voicemail — a call is not rendered as a chat bubble
  4. 4The list polls every 10 seconds in the background without flashing a loading state
  5. 5Attachments render inline: photos as images, audio through the branded player
Why we built it

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.

The problem
  • 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
Sound familiar?
What you get
One screen answers 'what has happened with this customer'
Handover to another rep needs no verbal briefing
Photos, voicemails and recordings live where the customer lives
What's inside
Same message never shows twice
A message that exists in both GoHighLevel's history and our own store is collapsed to one row.
Messages from numbers you don't have saved
Texts and emails from unrecognised senders collect in their own tab where you attach them to a contact in one click.
Unread stays unread until you say otherwise
Opening a conversation does not clear its unread badge — only the explicit Mark read button does.
Threads open on the newest message
Opening or switching a conversation lands on the latest message, and a jump button returns you there.
Text, email or call from the same box
One composer under the thread with SMS / Email / Call side by side, each explaining precisely why it is unavailable.
Saved snippets, templates and signatures
Reusable message bodies — with a subject for email and an optional auto-appended signature — stored per account, seeded on first use.
Merge tags that fill in the customer's details
Insert {{contact.first_name}}-style tokens from a searchable list, with a live preview of what each will become.
Talk instead of type
A microphone button dictates the message using the browser's own speech recognition — nothing is uploaded.
Forward a customer email to someone else
Forward any email in the thread to a new address with an optional note on top.
What happened to the email after you sent it
Every sent email carries a one-word status — Delivered, Opened, Clicked, Bounced — with a popover that admits how much of the open count was a machine.
Emails render the way the customer sees them
Email bodies display inside a sandboxed, auto-sizing frame so table-based formatting survives instead of being stripped.
Photos customers text you, filed automatically
Every image texted to your number is collected into a Photos section on the contact record with a swipeable gallery.
Voicemails and call recordings collected on the contact
Two separate lists on the contact — Voicemails (messages they left) and Call recordings (conversations you had) — with new/played dots and starring.
Calls read as calls in the conversation
Incoming, outgoing, missed and voicemail rows are colour-coded with a direction arrow instead of being grey text you have to read.

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 →