Re-engage dormant GoHighLevel contacts with personal messages
Every Monday, find the leads who have gone quiet, read what they originally asked about, and send each one a short personal nudge.
Every Monday at 8am, wake up my dormant GoHighLevel contacts with re-engagement messages that do not read like a blast. Each message must be written from that person's own history, not from a template.
Start by finding the people who have gone quiet. Use the GoHighLevel Contacts Search Contacts operation with advanced filters to find contacts with roughly no activity in the last 60 days. Exclude anyone flagged do not contact. GoHighLevel does not emit an event for a contact going cold, so the dormancy test has to be expressed through the Search Contacts advanced filters inside this workflow rather than as a trigger condition.
Before drafting anything, read the outreach log with the Google Sheets Get Values operation and skip any contact who already appears there with a send date in the last 90 days. This workflow runs every week against a slow moving list, so without that check the same people would be messaged over and over. One nudge per dormant contact, not a weekly drip.
Cap the run at 25 contacts. This limit is deliberate: it keeps the volume human and protects deliverability on the sending number and domain. If more than 25 contacts qualify, take the ones who have been quiet longest and leave the rest for next week. Never raise the cap to clear a backlog faster.
For each of the 25, reconstruct the history before writing a word. Use Conversations Search Conversations to locate that contact's prior thread, then Conversations Get messages by conversation id to read what was actually said. Identify the specific thing that person enquired about: the service they asked to price, the question that never got answered, the quote that went out with no reply, the timing they said did not suit.
Write one short message per contact, in my voice, referencing that specific thing. Two or three sentences. Open with the concrete detail from their thread so it is obvious this is not a broadcast, then make one clear low friction ask. No merge-field greetings, no "just checking in", no discount bait, no pretending an interval has not passed. Reply on the same channel the original conversation used, and send it with Conversations Send a new message.
If a contact has no usable prior thread, or nothing specific enough to reference, skip them rather than sending something generic. A skipped contact is a better outcome than a message that reads like a blast.
Log every contact messaged to my Google Sheet with the Append Values operation, one row each: send timestamp, contact name, contact id, channel used, the angle taken, and the message that went out. Record the angle as a short reusable label such as "unanswered pricing question", "quote sent no reply", "timing did not suit", or "enquiry never followed up", and reuse the same vocabulary across runs so the labels stay groupable. The point of this log is measuring which angles actually earn replies, not just keeping an audit trail, so consistent angle labels matter more than descriptive prose.
Finish with a short run summary: how many contacts qualified, how many were messaged, how many were skipped and why, and the angle mix used this week.
Example output
What does this prompt do?
- Every Monday morning, finds the contacts who have had no activity for about 60 days and leaves out anyone marked do not contact.
- Reads each person's previous conversation so the message can mention the thing they actually enquired about.
- Writes and sends one short, specific message per person instead of one template blasted to everybody.
- Keeps each run to 25 people and records who was messaged, which angle was used, and when, in a Google Sheet so you can see which angles earn replies.
What do I need to use this?
- A GoHighLevel account containing the contacts and conversation history you want to re-engage.
- A connected phone number or sending email address in GoHighLevel so the messages can actually go out.
- A Google account and a spreadsheet where the outreach log should be written.
- Contacts who have some previous conversation history, since each message is written from what that person originally asked about.
How can I customize it?
- Change the quiet period from 60 days, or move the run to a different day and time.
- Raise or lower the cap of 25 people per run depending on how much volume you are comfortable sending.
- Choose whether replies go out by text or email, and adjust the angle labels recorded in the log.
FAQs
Will this message the same person every week?
Does it respect do not contact?
Why only 25 people per run?
What happens if a contact has no previous conversation?
Can I review the messages before they send?
How do I tell which angles actually work?
Related templates
Every 30 minutes during business hours, find the customer messages nobody has replied to yet and post one quiet Slack nudge.
When someone books a call, we research them, pull up what your team already told them, and hand the rep a brief in Slack and on their calendar.
Every new inbound message gets sorted by intent, urgency and mood, with a ready-to-send reply waiting in Slack before anyone opens the inbox.
Every morning, new open-text survey answers get checked for AI writing and logged to a spreadsheet, with a Slack alert when too many look suspect.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Stop letting warm leads go quietly cold.
Set this up once and every Monday your dormant contacts get a message that sounds like you actually remember what they wanted.