Re-engage dormant GoHighLevel contacts with personal messages

By General Input

Every Monday, find the leads who have gone quiet, read what they originally asked about, and send each one a short personal nudge.

Integrations

  • GoHighLevel
  • Google Sheets

Type

Agentic Task

Categories

  • Sales
  • Marketing

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads