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. Approving a Limited Company syncs it to GoHighLevel and sends the opening email there and then; the agent writes and sends the two follow-ups itself. The goal metric is calls 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.
prospect-daily-run; the Mac must be awake with Chrome open). Target: 5 qualified prospects a day.od-prospect, plus od-prospect-manual on anything that is not a Limited Company). Reject = bad fit; also deactivate a keyword if it keeps producing rejects.od-prospect-manual and never enter the email sequence — contact them personally on LinkedIn instead.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.
| Test | Assessment |
|---|---|
| Purpose | Introduce 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. |
| Necessity | Data 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. |
| Balancing | Recipients 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. |
| Item | Detail |
|---|---|
| Auth | Private 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. |
| Tags | od-prospect (every synced contact, CRM only) · od-prospect-manual (anything that is not a Limited Company — blocks all email workflows). od-prospect-nurture is RETIRED: nothing applies it and nothing may start to. |
| Follow-ups | There is no automated sequence. The agent writes and sends every touch itself: the opener when you approve, a follow-up on day 7 and another on day 14 if there is still silence, then the record moves to No Response and stops. Three touches in total, Limited Companies only. |
| Status flow | Ready for Review → Approved → Synced to GHL → Contacted (1:1) → Replied or No Response → Call Booked. Prospects you reach on LinkedIn instead go to Connect Sent. The filter bar carries all twelve: All, Ready for Review, Approved, Synced to GHL, Contacted (1:1), Connect Sent, In Sequence, Replied, Call Booked, No Response, Rejected, Suppressed — In Sequence is a leftover of the retired sequence and no code writes it. |
| Check | If it fails |
|---|---|
| Prospects table reachable | Airtable auth or network issue — hit Refresh; check the PAT. |
| Active search keywords defined | All keywords toggled off — activate at least one. |
| Daily agent ran recently | No 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 GHL | Big Approved backlog means GHL token missing/expired — see §6. |
| Synced records carry GHL ID | Partial sync failure — re-run the agent; it retries by email match. |
| PECR gate | Red alert: a non-Ltd prospect has been emailed. Stop, check the record and mark it. A warning instead means the check has nothing to look at — either nobody has been contacted yet, or prospects have moved to a status the check does not inspect, which makes the gate blind rather than clean. Treat a blind gate as a fault. |