Written by Mike Hurley, founder of WarmUp. This runs our own pipeline; it is not a demo build.
LinkedIn engagers to a message written per person · every morning

Left to right, following the numbers: the eight authors we watch, the routine, Stage 1 (protect, then the six facts), Stage 2 (route, then write), the verdict. The strip under the legend follows one engager through. The band is what a morning returns and why it is built this way. Click the board to open it full size.
Why it helps
People who comment on, repost or react to a post about GTM engineering are telling you what is on their mind this week. Every morning the play collects them from eight authors (my own posts, two competitors, and Clay's people), checks six facts about each person and their company, blocks anyone we must never message, and writes a first message and a follow-up for each person who passes. Most engagers fail a known fact and never see a message. Only a few in every hundred are the buyers we want, which is why the gate does most of the work. Someone on the team reads the first batch and starts each campaign by hand. Nothing sends on its own.
Spend is set in advance: one monthly ceiling for the whole play and a day cap for each step. When the ceiling is reached the paid steps stop for the month and the free ones keep running. Most of the six facts come from memory or free sources, so the paid look-up is the exception, whichever tool answers it.
Why we built it this way
- The blacklist comes before the watcher. Every customer, open deal, partner, vendor, competitor and do-not-contact person is on the sender's blacklist before a single lead is added, and our own filter runs on top. A list built by hand cannot leak either.
- Four of the six facts must be known; two may be unverified. Company size, HQ country, the person's country and the person's role must be known and true. Whether they sell to businesses, and whether they are privately owned, may pass unverified after one attempt, with a tag that stays on the lead so any send can be traced back.
- A person is matched by profile URL or work email, never by name. On the first live run, name matching paired an employee of a legal-software company with a whiteboard company. We withdrew the rule the same day.
- The message talks about the topic and never mentions the click. For competitor and creator audiences it never names the post, the reaction or the author. Connection requests go out blank.
- Code checks every draft before a person sees it. Three sentences, one question, 320 characters, no pitch words, no link, no exclamation mark, no fact that is not in the inputs. A draft that fails keeps the approved template, with a tag, and is never dropped.
- A person starts every campaign after reading its first batch, and reads the ledger every morning after that.
How to build it
- Choose the authors and set a date floor. One file: each author's URL, their bucket (own, competitor, creator), the staff domains to exclude, and the copy rule (direct for your own posts, topic only for everyone else). Nothing before the floor is ever replayed.
- Build the never-message list before the watcher. Customers, open deals, partners, vendors, competitors, do-not-contact people. Push it to your sender's blacklist (HeyReach's takes profile URLs and company page URLs, not domains, so resolve the pages first) and keep your own copy as a second filter.
- Watch the posts. Two days back; comments, reposts and reactions; page past the first hundred. A reaction carries a member id, not a profile, so resolve it to one. Land every engagement in the signals table with the post text and the comment text.
- Judge one person per run, cheapest source first: memory, then free sources, then one paid look-up per missing fact. The four hard facts hold the person on unknown; the two soft facts may pass with a tag. Write the verdict, the facts and every attempt down.
- Route by author bucket and engagement type to a standing campaign per audience: your own posts, competitor audiences, creator audiences, reactors (after they accept), and a nurture lane with no message. Add the person to the campaign's list with the template copy, after checking they are not already in a campaign.