← All work
Evenly spaced dots queued at an amber threshold line, with only a few crossing it.

Sales Navigator Outreach System · TrustNet · 2026

A ToS-safe Sales Navigator outreach system with a human send gate

Sales Navigator's expensive tier still hands you a worse workflow than a free Sheet. This rebuilds the integration LinkedIn won't sell, inside ToS, and keeps the send button mine.

Enrich in Sheet

Apps Script, zero tokens

Approve rows

the Sheet is the dashboard

Agent composes

in a trusted browser

You hit send

no send primitive exists

Two halves with a clean handoff. The send button stays mine.
3 hrs → 30 min
daily workflow, compressed
$0
tokens spent on enrichment
In-ToS
no third-party account risk

01 · Problem

The priciest tool in prospecting, a worse workflow than a free Sheet

The Sales Nav tier I paid for couldn’t sync to HubSpot; the tier that could was a different price bracket. Below Advanced Plus, every request, message, and comment becomes a row you track by hand. Running the full cycle solo for three years, that tracker ate two to three hours a day.

Third-party tools

Promise to fix it, but break ToS in ways that range from “you'll get flagged” to “you'll lose your account.”

In-session, trusted browser

Work through a Chrome the platform already trusts. Nothing to detect, because nothing is pretending to be someone else.

02 · Solution

Reject the tier ladder: build the integration myself, inside ToS

The system is two halves with a clean handoff. The generation halfis a Google Apps Script bound to a Sheet: enrichment runs in-Sheet at zero token cost, and approved rows flip a column to ready-to-send. The Sheet is the dashboard, so there’s no separate UI to build.

The action half is a local TypeScript agent driving a persistent Playwright Chrome profile: a real instance logged into LinkedIn for months, with the cookies and fingerprint of a returning user. No detection signal to fire on.

03 · How I built it

Three layers, one of them the only place tokens get spent

Dispatcher

reads the Sheet, finds approved rows

Reasoning

LLM, what to say to this lead

Browser primitives

open, compose, stop at send

Reasoning, action, and orchestration kept separate.

When LinkedIn changes its DOM, only the inner layer needs work. When message quality drifts, only the middle layer needs adjustment. The inner layer has no send primitive: the agent composes inside the LinkedIn dialog and leaves the cursor on send. The send is mine.

04 · The point

The headline isn't time saved. It's cost architecture.

The deterministic work (cleaning, structuring, scoring, formatting) runs at zero variable cost. Tokens only get spent on the one part that actually requires reasoning. That separation is the result of asking where does intelligence actually need to be? and routing everything else to free deterministic compute. Most builds skip the question and default to LLM-everywhere.

I paid for the tier LinkedIn won’t integrate. So I built the integration myself, inside ToS.
The tier LinkedIn won't integrate, rebuilt as an integration that stays inside the rules.

05 · Proof

A three-hour workflow, down to thirty minutes of review

Message quality holds across leads because each one is generated against its own signal set. Response rates run higher than templated outreach, though attribution is qualitative at this volume. The point isn’t infinite scale; it’s taking a three-hour daily workflow and compressing it to thirty minutes of review.

06 · What's next

Move the human gate from the action to the judgment

The bigger move: drop the approved column and let the agent decide whethera lead is worth messaging at all. Then I approve the agent’s reasoning, not the lead. Higher leverage, and a more honest test of whether the reasoning is good enough to trust.

The build is always the easy part. The judgment layer is the work.

Want the code, or a version tuned for your team? The build is on request.

Request the code

raph@raphaelmercado.devlinkedin.com/in/raphmercadogithub.com/raphaelmercado-coder