The engine behind every campaign we run
Seven linked workflows, 82 nodes. We find your ICP, research every prospect from four angles at once, score them, write a note for each one, send through a human-behaviour engine that keeps the account safe, then follow up right on schedule.
LinkedIn Lead Automation Flow
Seven linked workflows: discover, enrich, score, connect, verify, follow up, converse. Every send passes through the Human Behaviour Engine. Google Sheets is the shared state between them.
Research company website
Homepage, about, pricing. Summarized to 3 lines.
Research recent posts
Last 5 posts, what they care about right now.
Research company news
Funding, hiring, launches in the last 90 days.
TODO: delete the manual test branch before the client demo. Also the old v2 scorer is still here.
Any failed send anywhere lands in #alerts within a minute.
Each branch writes back to the lead row on its own. If one source is empty, the others still land.
Threshold is tuned per client. Below 70 goes to archive, not the bin, and is re-scored monthly.
Never more than 25 requests a day per seat, with 45 to 180 second gaps between sends.
We wait for a real acceptance before any follow-up. Pending requests are re-checked every 6 hours, for up to 14 days.
Replies are drafted by the agent and approved by a human before anything goes back out.
Schedule Trigger
Daily 08:00 IST
ai.agent · Defines who we target
OpenAI Chat Model
ai.model
Structured Output Parser
ai.parser
Check Rate Limit
1,000 req/day
Search LinkedIn
title + industry + headcount
Scrape Prospect List
prospect.scrape
Normalize Data
prospect.normalize
Matches ICP?
icp.filter
Discard Lead
icp.discard
Loop Over Prospects
batch 25
Get Company Website
http.request
Website not empty?
if.check
Scrape Website
html.extract
Summarize Company
ai.summarize
Update Row
sheet.update
Get Recent Posts
linkedin.posts
Posts not empty?
if.check
Loop Over Posts
loop.batch
Summarize Activity
ai.summarize
Update Row
sheet.update
Get Company News
news.search
News not empty?
if.check
Aggregate
data.aggregate
Summarize News
ai.summarize
Update Row
sheet.update
Get Mutual Connections
linkedin.mutual
Any mutuals?
if.check
Aggregate
data.aggregate
Score Warmth
score.warmth
Update Row
sheet.update
Merge
wait for all 4
ai.agent · 0 to 100
OpenAI Chat Model
ai.model
Window Memory
ai.memory
Score above 70?
if.threshold
ai.agent · under 300 chars
OpenAI Chat Model
ai.model
Add to Send Queue
sheet.append
Archive Lead
lead.archive
Schedule Trigger
09:00 to 18:00, random gaps
Get Queued Leads
sheet.read
Sort by Score
data.sort
Limit 25 / day
data.limit
Human Behaviour Engine
45 to 180 s jitter
Send Connection Request
linkedin.connect
Update Status
sheet.update
Log Send Error
error.log
Schedule Trigger
Every 6 h
Get Pending Requests
sheet.read
Connection Accepted?
linkedin.checkStatus
Mark Accepted
sheet.update
Notify Dashboard
dashboard.event
Wait 24 h
re-check, max 14 days
Schedule Trigger
Daily 10:00
Accepted, No Reply
sheet.read
3 days passed?
if.check
Humanize Timing
safety.humanize
Send Follow-Up #1
linkedin.followUp1
Replied?
if.check
Send Follow-Up #2
adds something new
Log to Dashboard
dashboard.log
Hand Off to Human
crm.assign
Slack Alert
slack.message
Reply Webhook
fires on inbound reply
ai.agent · drafts, never auto-sends
OpenAI Chat Model
ai.model
Thread Memory
ai.memory
Intent?
if.intent
Book Meeting
calendar.create
Add to Nurture
sheet.update
Manual Trigger
testing only
Get 5 Sample Leads
limit 5
Debug Output
flow.noop
ai.agent · replaced in v3
GPT-4o mini
ai.model
No Operation
do nothing
Edit Fields
3 fields
Send Follow-Up #3
off since Aug
Error Trigger
trigger.error
Format Error
code.js
Slack #alerts
slack.message
Scroll or pinch to zoom · drag to pan · tap a node to see what it does · press Execute to watch a run
What each key node actually does
Tap a card to jump to that node on the canvas.
See it run on your own pipeline
Book a call and we'll walk you through the framework live, against your own ICP.