Draft — not published. This page is marked noindex.
Let's start
INTERNAL SYSTEM
two-person automation studio: our own sales system

1,471 contacts → 40 researched messages prepared in one run

A two-person automation studio. The sales channel is LinkedIn: pick the right people out of your own network, learn something about each one, write a personal first message. Until then it was manual browser work: open the contact, open the company site, write the text, send it, note it down somewhere.

Open the system

A working preview. Company, products and figures are invented.

/ the problem in numbers

How it was before

1,471
contacts in the network, unprioritised
987, of which 199
of those never contacted, with a decision-maker title
20 declared; 36 went out on 07-29, 35 on 07-31
declared daily cap vs. what actually went out
/ what we built

The system

linkedin-masina · build 5 items
  1. 01Connection scrape through the LinkedIn Voyager API, page by page: 37 pages, 1,471 records with title and connection date.
  2. 02ICP scoring on decision-maker, sector, Lithuania and competitor flags. Of the 1,471, 754 qualify and 197 are priority.
  3. 03Research-grounded first-message generator, one sector-specific question per contact. Of 219 processed, 194 texts came out hands-off and 25 were flagged for review.
  4. 04Sender on the Voyager API at human pace: 11–21 second gaps between messages, halt after 3 consecutive failures. The 20-message daily budget lives in the planner, not in the sender.
  5. 05A send guard covering 13 declared operations (6 of them need a human signature for that day) plus a daily run that rebuilds the dashboard from the state file and pulls booked audits from the calendar.
/ what didn't work first time

The one thing we got wrong.

On 2026-07-24 the LinkedIn compose form broke in the browser: a 0×0 px input, around 185 console errors, sending halted the same day. The whole send path was rewritten that same afternoon, from clicking buttons in the browser to calling LinkedIn's internal API directly, and the system has hung on an undocumented endpoint nobody guarantees ever since.

/ result

Before and after

BeforeAfter
contact selection
1,471 with no priority 754 qualified, 197 priority
message preparation
one at a time, by hand 40 researched messages in a single run, two waves of 20
text readiness
every message written from scratch 194 of 219 hands-off, 25 for review
connection invites, 07-21 → 08-04
no ledger existed 121, each one dated in the ledger
daily cap
declared, but no component was the actual gate one guard with a signature per day; hooked into one script so far