The right pitch, to the right owner, at the right time.

Pursuit writes an original outreach message for each lead across email, SMS, call or voicemail, then queues it for a human to approve.

  • Every message is written individually for that one lead, never a template.
  • Nothing reaches a customer until a human approves the draft.
  • Outreach halts the instant a lead replies, converts or opts out.
Pursuit workflow trace: a Gather, Reason, Commit pipeline showing how one lead was identified, classified, written to and routed to a rep
Workflow trace: Gather → Reason → Commit, from source to a rep's queue.
Pursuit Campaigns dashboard: bulk and scheduled sends with delivered, open, click and reply rates plus bounces and opt-outs
Campaign reporting: every send, with open, click and reply rates.
Client / status
MineralView · in production
Business outcome
AI-drafted outreach across email, SMS, call and voicemail at production scale
Risk control
Read-only boundary to production data · human approves every send · halts on reply/opt-out
What we delivered
Architecture, build, integration, operate
The problem

A CRM where the AI writes every message, and a human sends it

MineralView's audience spans family owners, landmen, CPAs and investors; one drip can't serve them all. Pursuit drafts each outreach individually for a human to approve.

✍️

No canned templates

Every email is drafted fresh from the lead's browsing journey, claim status, portfolio and prior conversations, producing original, on-brand copy per person.

📡

Multi-channel, one queue

Email, SMS, call scripts and voicemail from one decision pipeline, with two-way customer email handled inside the platform.

🤝

Human-owned relationships

One owning rep per lead, a 360-degree view with activity heatmap and a suggested next action. Automation assists, people close.

Why the obvious solution was not enough

The hard parts were boundaries, not prompts

🔒

Read-only production boundary

Lead data lives in the client's live platform database. Pursuit ingests it through a read-only connection pool, and engagement depth is computed from subscription signals at sync time. The source schema is never touched.

🤝

Automation vs. humans colliding

A drip firing after a rep has started a real conversation destroys trust. We enforced a strict status pipeline: once a lead is qualified, converted or lost, the automation engine permanently stops drafting for them, checked on every run, not best-effort.

🧾

Attribution below the app layer

Audit logs written by application code miss direct database changes. We pushed auditing into a row-level PL/pgSQL trigger and inject the logged-in user's ID into the transaction context, so even trigger-level status changes record who acted and when.

Design & implementation

Two decoupled systems, one shared source of truth

A Next.js command center and a nightly automation worker that never call each other; they coordinate only through the CRM's PostgreSQL database, so either side can fail, restart or deploy independently.

CapabilityHow it works
Job-queue runner & daily cronthe runner pulls recent registrations from the platform's read-only pool, scores each lead's engagement, and drafts the next outreach step for every lead still in play; a daily cron drains the queue and re-engages.
Context-fed AI draftingthe prompt carries the lead's browsing journey, claim status, portfolio and conversation history, so the model writes to a person, not a segment.
Model fallback & offline bypassa fallback model chain keeps drafting alive through provider outages; a deterministic heuristic path keeps scoring working with no API at all.
Command center approvalqueued drafts land in the dashboard where reps inline-edit and hit approve; execution records the edit, the user, and advances the lead's status atomically.
Capped, self-halting sequencesonboarding sequences hard-cap at three steps and stop instantly on reply, conversion or opt-out, enforced by the pipeline, not by convention.
Architecture

How a registrant becomes an approved conversation

AI drafting & scoring LLM fallback chain Daily cron Drain queue + re-engage drafts + scores queued sends MineralView platform Live read-only lookup Job-queue runner Per-lead drafts, queued CRM database Postgres, audit triggers review queue Command center Approve before send approved sends Outbound channels Only email auto-sends Inbox & signals Replies, opt-outs logged replies pause drips (by status) Automated Human approval
Dashboard and automation worker never call each other. They coordinate only through the CRM database, so each deploys and fails independently. Any reply, conversion or opt-out halts automation for that lead on the next check.
Inside the command center

What the marketing team actually sees

Pursuit Actions screen: an AI-drafted email with subject and message ready to review, edit, skip, approve or mark sent
Approval queue: every AI draft lands here first. A marketer edits, skips or approves; nothing reaches a customer unreviewed.
Pursuit Lead 360 profile showing a mineral owner's snapshot: engagement score, last seen, page views, time on site and outreach sent
Lead 360: one owning rep, one full picture: engagement, last visit, page views and every prior touch, with email health a click away.
Outcomes

What it changed

Pursuit is live with MineralView's marketing team. Reps start their day with a queue of individually written drafts instead of a blank page, and every relationship stays owned by a human.

4
Channels unified in one queue: email, SMS, call and voicemail, so every touch runs from a single view
100%
Of sends approved by a human before they reach a customer; nothing goes out unreviewed
0
Mutations, schema changes or incidents on the client's production database across the engagement
Governed, not black-box

Every AI decision is traceable, versioned and costed

🧮

Every call logged with its cost

Each model call records the prompt sent, tokens in and out, cache hits, latency and a per-call USD cost, so every draft traces back to the source data that produced it.

🗂️

Versioned, swappable prompts

Outreach prompts are append-only and versioned, editable and revertible from the dashboard with no redeploy, and the exact version is stamped on every message.

🔀

Provider-agnostic with fallback

A fallback model chain survives provider outages, and a deterministic heuristic keeps lead scoring working with no API at all.

One platform, not one trick

Everything the team runs the day on

CapabilityWhat it does
Bulk campaignssend at scale with per-campaign reply, bounce and opt-out reporting for every batch.
Open & click trackingengagement measured through signed links and tracking pixels on every message.
Deliverability verificationa real inbound reply counts as proof the mailbox actually works.
Timezone-aware schedulingscheduled sends dispatched in the customer's local timezone, not the server's.
Talk to Sachin

Have leads you're not working hard enough?

Pursuit runs live in production with the client's team. We can build the same AI outreach engine on your data.

Talk to Sachin