← Back to the platform

🧲 Prospecting

Cold outbound pipeline — LinkedIn pain signals to booked calls
SOP v1.3 · Page v1.3 · Owner: Kevin (review), AI agent (execution)

1. What this system does

A daily AI agent finds founder-led UK micro and small business owners who post about being overloaded — wearing every hat, no time, drowning in admin. It locates their company website and a published contact email, checks Companies House to classify the legal entity, and queues each prospect in the Prospecting tab. Kevin approves or rejects. Approved prospects sync to GoHighLevel, where the nurture sequence takes over. The goal metric is calls booked.

LinkedIn pain signal
Website + email
Companies House gate
Kevin reviews
GHL + nurture
Call booked

When a call is booked, a separate pre-call research agent compiles the full dossier — research spend lands only on people worth calendar time.

2. Daily agent run

  1. Scheduled task fires every day at 09:00, seven days a week (Claude Code scheduled task prospect-daily-run; the Mac must be awake with Chrome open). Target: 5 qualified prospects a day.
  2. The agent reads the active keywords from the Prospect Keywords table and searches LinkedIn posts through Kevin’s logged-in Chrome at human pace — capped at 20 profile views a run.
  3. Qualified authors (founder-led, UK, micro/small business, genuine pain post) are researched on the open web for a website and a published contact email. No guessed addresses.
  4. Companies House search classifies each prospect: Limited Company (with company number), Sole Trader / Partnership, or Unknown.
  5. Each prospect lands in the Prospects table as Ready for Review with the pain quote, links, email, confidence, and entity type.
  6. Previously Approved prospects are pushed to GoHighLevel and move to Synced to GHL.
  7. Kevin gets a Slack summary: found, synced, keywords used, any warnings.
LinkedIn safety: the agent browses only through Kevin’s real Chrome session, never with scrapers, and stops for the day at the first captcha or unusual-activity warning. Automated activity on LinkedIn sits outside their User Agreement — low volume and human pacing keep the risk small, but the kill-switch rule is absolute.

3. Reviewing the queue (Kevin, ~5 min/day)

  • Open Marketing → Prospecting. The sidebar badge shows how many are waiting.
  • Each card shows the pain quote, entity chip, email and confidence. Click the name for their LinkedIn, or the website link.
  • Each card carries a Contact Route chip, an editable opening message drafted by the agent, and a Process line spelling out exactly what happens after you approve. Tweak the wording, then approve; the edited text is what gets used. The Copy button is for LinkedIn connects you send personally.
  • Conversation first (the rule for everyone with an email): the first touch is always a personal message, sent through GoHighLevel the moment you approve (replace the [BOOKING-LINK] placeholder in the draft first — the system refuses to send while it remains). Replies land in GHL, never in the team-managed Gmail inbox; any stray that does reach Gmail gets the "17: OD Prospects" label so Inbound Comms leaves it alone. The label is applied only when the sender matches a prospect's email exactly — GHL system notifications and tenant SMS threads are never labelled. Claude watches for replies and drafts every response. Only after 7 silent days does a Limited Company drop into the 3-email nurture sequence. Manual-track prospects get at most one follow-up and are never sequenced.
  • Approve = right person, right pain. Emailed prospects sync to GoHighLevel instantly as CRM contacts (tag od-prospect; the sequence tag is only ever applied at the 7-day fallback, Ltd only). Reject = bad fit; also deactivate a keyword if it keeps producing rejects.
  • Both actions have an 8-second Undo.
  • Cards marked manual track (PECR) still sync to GHL when approved but are tagged od-prospect-manual and never enter the email sequence — contact them personally on LinkedIn instead.

4. Compliance — legitimate interest assessment (UK GDPR + PECR)

Lawful basis

Processing basis: legitimate interest (Article 6(1)(f) UK GDPR) — B2B direct marketing of a business operations service to businesses showing an active, self-declared need. This section is the documented assessment.

TestAssessment
PurposeIntroduce Operations Director to founder-led UK small businesses whose owners publicly describe the exact problem the service solves. Clear commercial interest; benefit to the recipient is a relevant, non-generic offer.
NecessityData collected is minimal and business-focused: name, role, company, public LinkedIn content, published business contact email. No special category data, no private-life data, no purchased lists.
BalancingRecipients are business owners contacted at business addresses they publish for business contact. Contact volume is low (one sequence, easy opt-out). Reasonable expectation: a business publishing a contact email expects business approaches.

PECR rules (enforced in the pipeline)

  • Corporate subscribers only for email. Only Entity Type = Limited Company enters the email sequence. Sole traders and partnerships count as individual subscribers under PECR Reg. 22 and are NEVER cold-emailed — they route to the manual track. Unknown is treated as sole trader. The health bar has a hard-fail check for this.
  • Every email identifies the sender (Operations Director + postal address) and carries a working unsubscribe. This lives in the GHL sequence templates — Ericamae owns it, Kevin signs it off before the sequence goes live.
  • Suppression is forever. Unsubscribes and removal requests are marked Suppressed in the Prospects table and in GHL; the agent checks the list before every add and never re-adds them.
  • Right to object / erasure: on any request, mark Suppressed, delete the GHL contact, and clear personal fields from the Airtable record within 30 days.
  • Data source is the person’s own public LinkedIn activity plus their company website; the first email states where we found them (transparency, Art. 14).
Hard rule: if entity type is uncertain, the prospect does not get emailed. The gate errs on the side of not sending.

5. Keywords

  • The agent rotates through active keywords, oldest-used first, 2-3 per run.
  • Add pain phrases you hear on calls or see in posts. Phrase them the way founders actually write, not marketing speak.
  • Each keyword tracks how many prospects it has produced — deactivate the duds, keep the producers.

6. GoHighLevel wiring

ItemDetail
AuthPrivate Integration token (scope contacts.write) saved at ~/.config/od/ghl_api_key, Location ID at ~/.config/od/ghl_location_id. Until these exist the agent skips the sync and says so.
Tagsod-prospect (every synced contact, CRM only) · od-prospect-manual (non-Ltd — blocks all email workflows) · od-prospect-nurture (applied ONLY by the follow-up pass after 7 silent days, Ltd only — this is the tag Ericamae's sequence fires on)
SequenceEricamae’s nurture workflow triggers on the od-prospect-nurture tag. Until she switches it on, tagged contacts simply sit in GHL — nothing sends.
Status flowApproved → Synced to GHL → In Sequence → Replied / Call Booked. GHL-side stage changes are written back by the agent.

7. Health checks & troubleshooting

CheckIf it fails
Prospects table reachableAirtable auth or network issue — hit Refresh; check the PAT.
Active search keywords definedAll keywords toggled off — activate at least one.
Daily agent ran recentlyNo new prospects for 3+ days: Mac asleep at run time, Chrome closed, or LinkedIn friction stopped the run. Check the scheduled task log.
Approved synced to GHLBig Approved backlog means GHL token missing/expired — see §6.
Synced records carry GHL IDPartial sync failure — re-run the agent; it retries by email match.
PECR gateRed alert: a non-Ltd prospect is in the email sequence. Remove them from the GHL workflow immediately and mark the record.