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.

Agentic Task
GoHighLevelGoogle SheetsSalesMarketingEmail AutomationContent Generation
PromptCreate

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

Sent to Marcus Webb (SMS, 8:04am) "Hi Marcus, you asked back in April about whether we could do the kitchen fit out in stages rather than all at once. We can, and we have a slot opening in September if that timing suits better. Want me to sketch out what a phased version would cost?" Logged row: 2026-08-17 08:04 | Marcus Webb | SMS | angle: unanswered pricing question | "phased fit out, September slot" Run summary: 25 contacts messaged, 6 skipped (3 do not contact, 2 no prior thread, 1 contacted 5 weeks ago).

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?
No. Everyone who gets messaged is written to the log, and the workflow reads that log before each run, so anyone contacted in the last 90 days is skipped. A dormant contact gets one nudge, not a weekly drip.
Does it respect do not contact?
Yes. Anyone flagged as do not contact is filtered out before any message is written, so those contacts are never drafted for and never messaged.
Why only 25 people per run?
Volume is what makes re-engagement look like spam. Twenty five personal messages a week reads like a person catching up on their follow ups, and it keeps your phone number and sending domain in good standing. Sending hundreds at once is the fastest way to get filtered.
What happens if a contact has no previous conversation?
They get skipped rather than sent something generic. The entire value here is referencing what the person actually enquired about, so if there is nothing specific to reference the workflow leaves them alone.
Can I review the messages before they send?
By default the messages send automatically. If you would rather approve them first, you can ask for a review step when you set the workflow up, so each batch waits for your sign off before going out.
How do I tell which angles actually work?
The Google Sheet records the angle used for every message alongside the send time, so after a few weeks you can group by angle and compare reply rates. That comparison is the point of the log, not just an audit trail.

Related templates

Alert your team when GoHighLevel messages go unanswered

Every 30 minutes during business hours, find the customer messages nobody has replied to yet and post one quiet Slack nudge.

GoHighLevel
Slack Bot
Google Sheets
Deterministic Code
Turn new GoHighLevel bookings into rep-ready pre-call briefs

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.

GoHighLevel
Google Calendar
Slack Bot
+1
Agentic Task
Triage new GoHighLevel conversations and draft the reply

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.

GoHighLevel
Slack Bot
Agentic Task
Screen Typeform survey answers for AI-generated responses

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.

Typeform
Pangram
Google Sheets
+1
Deterministic Code
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Turn procurement portal tenders into CRM deals each morning

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.

Anchor Browser
Google Sheets
HubSpot
+1
Agentic Task

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.