Re-engage stalled Quo SMS threads with personalized follow-ups
Every Monday at 9am, an agent re-reads your Quo texts, spots the ones that went quiet, checks HubSpot, and sends a short, personal nudge from the same number the rep used.
Build me an agent workflow that re-engages stalled Quo SMS threads every Monday at 9am.
Trigger: cron, every Monday at 9am in the org's local timezone.
What the agent should do on each run:
1. Call Quo "List Conversations" scoped to the last 30 days across all of the org's Quo phone numbers. For each conversation, remember which Quo phone number it belongs to so we can later reply from that same number.
2. For each conversation, call Quo "List Messages" to read the full thread. Classify the thread as stalled if either (a) the prospect's most recent message asked a question and no rep has replied, or (b) the rep sent the last message and it has been more than 5 business days with no response. Skip threads that are clearly resolved (an explicit thanks or confirmation from the prospect after the last rep message), threads where the prospect asked to stop, and threads shorter than 2 messages total.
3. For each stalled thread, take the counterparty phone number and call HubSpot "Search Contacts" filtered on the phone and mobilephone properties (E.164 format) to find the matching contact. Request lifecyclestage, hs_lead_status, deal associations, and any do-not-contact flag your account uses (hs_email_optout, or a custom property like sms_opt_out if present). If no contact is found, skip the thread. If the contact has do-not-contact set, skip. If the contact was texted, called, or noted in the last 3 days, skip (to avoid double-touching).
4. For contacts with associated deals, call HubSpot "Get Deal" (or "Search Deals" with an IN filter on the associated deal ids) to pull dealstage, dealname, amount, and closedate. Classify the contact as: open opportunity (deal is in an active stage), paying customer (closedwon or lifecyclestage=customer), closed lost (closedlost), or cold/unknown. Skip closed lost contacts and skip contacts whose only recent HubSpot activity is a resolved support ticket.
5. Rank the remaining stalled threads: open opportunity first, then paying customer, then warm lifecycle stages (marketingqualifiedlead, salesqualifiedlead, opportunity), then everyone else. Hard cap the outbound list at 20 threads per run.
6. For each selected thread, draft a short, natural-sounding SMS (1 to 3 sentences, no marketing tone, no emoji unless the original thread had them) that references what was actually said in the last few messages AND the contact's current status. Examples: reference a demo they booked, a quote or number that was mentioned, a specific product they asked about, or the fact that they're already a customer. Never fabricate details the thread doesn't support. Sign it with the rep's first name if the last rep message on the thread was signed.
7. Send the SMS via Quo "Send Text Message" using the exact Quo phone number the rep originally texted from on that conversation (not a shared or default number). To value = the counterparty number in E.164.
8. After each successful send, call HubSpot "Create Note" associated to the contact. The note body must include: the outbound message text verbatim, the Quo phone number it was sent from, the rep name (if inferable), a one-line reason the agent chose this contact ("stalled 7 days after quote sent", "prospect asked about pricing, never got reply"), and a timestamp. This is the audit trail reps rely on.
9. At the end of the run, produce a short summary: how many conversations were scanned, how many were classified as stalled, how many were skipped and why (broken down: no HubSpot match, do-not-contact, closed lost, recent touch, resolved), and how many texts were actually sent.
Guardrails to bake in and never remove:
- Hard cap of 20 outbound texts per run. This is not a soft target.
- Never send from a shared or arbitrary Quo number. Always match the number the rep originally used on that thread.
- Never text a closed lost contact, an opt-out, a do-not-contact, or someone whose only open thread is a resolved support ticket.
- Never send if there is no HubSpot contact match for the phone number.
- Every send must be mirrored to HubSpot as a note containing the outbound text verbatim, so a rep can audit exactly what went out.
Additional information
What does this prompt do?
- Reads your last 30 days of Quo text conversations and flags the ones that went quiet after a prospect question or a rep reply.
- Looks each contact up in HubSpot so it can tell an open deal apart from a closed lost, a paying customer, or a resolved support thread, and skips anyone who shouldn't be nudged.
- Drafts a short, natural follow-up that references what was actually said in the thread and their current status, then sends it from the exact Quo number the rep originally used.
- Logs every send on the HubSpot contact as a note with the full outbound message text, so reps have a clean paper trail.
What do I need to use this?
- A Quo (formerly OpenPhone) workspace where reps are texting prospects and customers.
- A HubSpot account with contacts that have phone numbers filled in, plus deal stages and lifecycle stages you actually maintain.
- A rough sense of which lifecycle or deal statuses count as "do not follow up" (closed lost, unsubscribed, support-only, etc.).
How can I customize it?
- Change the schedule. Monday 9am is a common re-engagement slot, but you can pick any day and time.
- Tune the definition of "stalled". The default is 5 business days since the last message on a thread the prospect or rep left hanging.
- Adjust the outbound cap. It ships at 20 sends per run and prioritizes open-deal contacts first, so you can raise or lower the ceiling based on your team's capacity.
- Edit the skip rules. Add or remove statuses like closed lost, do-not-contact, existing support tickets, or contacts touched in the last few days.
Frequently asked questions
Will this send texts from a shared team number, or from the individual rep's number?
How does it avoid nudging people who already replied or shouldn't be contacted?
What if a prospect isn't in HubSpot yet?
How many texts will it send in one run?
Where can I see what the agent sent?
Related templates
Stop letting warm SMS threads go cold.
Connect Quo and HubSpot once, and Geni will re-read your texts every Monday and send the right nudge to the right person.