Agentic outbound research pipeline
Human search directions become candidate pools, suppression checks, company/contact research, approved outreach and follow-up tracking.
Case note
The implementation was treated as a small operating system: visibility first, ownership next, automation only after the workflow was clear.

Use case
Turn an outbound idea into research, approved drafts and follow-up
The team writes a search direction: market, region, company size, buying signals and exclusions. The system does not try to send emails by itself. It first turns the brief into a clear search, then researches companies/contacts and creates a draft queue, and only after approval does it sync CRM, send/log the message and track follow-up.
Result: three traceable workflows cut preparation by about 70%, enforce two suppression gates and keep 100% of external sends behind human approval.
Workflow map
Three independent workflows in one outbound pipeline
Each workflow has its own trigger. They can run one after another, but they can also be used separately for intake, research, or approved sending.
Main database: Supabase
The workflow uses Supabase as the source of truth: it stores each record, status, and key event so the team can see what happened, retry failures, and debug without searching every tool.
Tool icons
Pipeline rationale
This is not an outbound bot. It is a controlled sales operating system.
The agentic part is not a model sending messages on its own. It is the system breaking an ambiguous commercial job into smaller decisions: ask for context, research, discard, score, draft, wait for approval, send and record what happened.
Workflow 0 exists because human briefs rarely arrive perfect.
The system can ask for market, geography, company size, buying signals, exclusions and goal before spending research effort.
Workflow 1 exists because researching is not the same as sending.
This is where the pool is built, customers/duplicates are blocked, company/contact fit is scored and a review queue is prepared.
Workflow 2 exists because sending is an external action.
It only starts after human approval, rechecks suppression, then syncs HubSpot, sends and stores follow-up state.
Why the gates matter
- Complete brief before investigation starts.
- Customers, duplicates and owned accounts blocked before deep research.
- Company must qualify before contacts are discovered.
- Each contact must qualify before drafting.
- Suppression checked before draft and again before send.
- HubSpot and Resend touched only after human approval.
Add-ons that fit on top
The starting point
Outbound research was not one task. It started with a human direction, then required candidate discovery, duplicate/customer suppression, company and contact research, message drafting, approval, CRM sync, sending and follow-up checks. Reps could do it manually, but the quality depended on who researched, which sources they checked and whether they remembered the approval and follow-up steps.
The diagnosis used real volume, connected tools, decision points and exceptions. The question was not only what to automate, but what proof would show that the workflow had completed correctly. The operating proof mattered as much as the automation.
The implementation
Ductio split the work into three independent workflows that can also run one after another. Workflow 0 accepts a research brief by email or another channel, asks for missing information and creates the search. Workflow 1 investigates companies and contacts, filters existing customers or duplicates, scores fit and drafts outreach for qualified pairs. Workflow 2 starts only after approval, syncs HubSpot, sends/logs the approved message and tracks follow-up state.
The implementation separated rules, free-text context, human decisions and external effects. That let the system improve daily work without turning every exception into a black box. AI as support inside the process, not as autopilot.
What was used
Tooling was chosen from the process outward, not from a pre-decided technical preference. Each piece needed a clear owner, a stable integration path and a simple way to inspect errors.
In practice, the build combined Supabase, Python/FastAPI, OpenRouter, Tavily, HubSpot, Resend. The tools visible to the team stayed close to their daily work, while integration logic was documented and kept separate from sensitive commercial decisions.
The improvement showed up in daily work.
Rather than treating the result as a dashboard, the team felt it in three specific moments: less manual preparation, less context hunting, and fewer doubts about who needed to act.
Research prep: Company/contact research and outreach preparation moved from 70 min to 20 min.
Pipeline coverage: Brief intake, research and approved sending remain independently traceable moved from 1 manual chain to 3 tracked workflows.
Brief readiness: Missing information is resolved before research spend begins moved from Back-and-forth to 1 validated brief.
Before/after proof
What changed in the operation
Before
After
Visible artifacts
- Search brief record
- Candidate company table
- Account-status validation event
- Company research summary
- Contact score rationale
- Outreach draft queue
- Approval log
- HubSpot activity
- Resend message id
- Follow-up status
Controls
- Brief must be complete before search starts
- Existing customers, owned accounts and duplicates are blocked before deeper research
- Company must qualify before contacts are discovered
- Each contact must qualify before drafting
- Suppression is checked before draft and again before send
- Human approval required before HubSpot or Resend
- Every score keeps source evidence
- Follow-up timing is tracked instead of relying on memory
What changed after launch
The three-workflow pipeline cuts research preparation by about 70% and gives sales a ranked review queue instead of a blank research task. Low-fit companies, existing customers, duplicates and suppressed contacts are stopped early without interrupting the rest of the search. Qualified company-contact pairs receive source-backed reasoning and personalized drafts, while two suppression gates and mandatory human approval protect every external send.
The result was not only saved minutes. The team gained a shared sequence for reviewing inputs, understanding context, deciding, acting and checking that the workflow had been recorded. 70% less prep
The workflow in one line
How it was built
A shared Supabase state connects the pipeline: search briefs, candidate companies, contacts, scored research, outreach drafts, approval status, HubSpot sync and send/follow-up events. OpenRouter handles brief validation, fit reasoning and drafting; Tavily/RSS supports public research; HubSpot and Resend are touched only after approval.
The stack was pragmatic: Supabase, Python/FastAPI, OpenRouter, Tavily, HubSpot, Resend. Tools were chosen for ownership, integration and maintainability, not for theater. The result is a system the team can understand and operate.
What was delivered
- Brief intake workflow
- Candidate pool creation
- Account-status validation
- Company/contact research
- Company/contact scoring
- Draft approval queue
- HubSpot/Resend send
- Follow-up tracking
- Research prep dropped by about 70% while keeping the source trail visible.
- A broad human request became a structured candidate pool with clear inclusion and exclusion logic.
- Existing customers, duplicates, owned accounts and suppressed domains were filtered before drafting.
- Company scoring became consistent across searches instead of depending on one rep's research style.
- Contact selection improved because persona, authority and personalization angle were scored separately.
- Every qualified company-contact pair received a draft tied to a specific business reason.
- Sales reviewed a queue of prepared opportunities instead of building every angle from zero.
- No HubSpot record or external email was created until a human approved the draft.
- Sent state, reply state and next follow-up date became trackable from the same workflow.
- Manual retries became safer because each workflow has its own trigger and stored state.