Book calls on LinkedIn by talking to Claude Code in plain English. No content, no personal brand, no spam.
This is the exact system from the video, pre-built. You do not build any of it. You drop in one API key, talk to it in normal sentences, and it writes a genuinely personal message to every person on your list, in your voice, then launches the campaign.
It never sends anything you have not read and approved. Every launch stops and shows you 5 finished messages first. That gate is not optional and it cannot be skipped.
Everyone else lets the automation tool do the thinking, the targeting, and the "personalization". Then they wonder why nobody replies.
Here the tool only does the sending.
| The thinking | Where it happens |
|---|---|
| Who to target | Claude Code, from your ICP |
| Researching each person | Claude Code, free web search |
| Writing the message, in your voice | Claude Code |
| Reading it before it goes out | You |
| Pressing send | HeyReach |
| Replying to humans | You, by hand |
500 well researched prospects will always beat 5,000 random names who were never going to answer.
- Set up Claude Code.
- Teach it your voice and your business. The step nobody does. It is why everyone else's messages sound like AI.
- Build the list and research it. Not just a list. A researched list.
- Launch from the terminal. Claude writes one message per person, shows you 5, and waits.
- Respond like a human. You do this yourself. It is the one thing no tool can fake.
| Thing | Why | Cost |
|---|---|---|
| Claude Code | The whole system runs inside it | Claude subscription |
| A HeyReach account with your LinkedIn connected inside it | The thing that actually presses send on LinkedIn | paid, check heyreach.io for current pricing |
| A list source (Sales Navigator, Apollo, ZoomInfo, or your own CSV) | Where the names come from | varies, a free Apollo plan works to start |
| VS Code (optional but recommended) | See your files on one side, talk to Claude on the other | free |
| Aqua Voice (optional) | Talk instead of type | optional |
The whole stack runs a couple of hundred dollars a month. You need one API key to start: HeyReach.
The easy way, no git needed:
- Click the green Code button at the top of this page, then Download ZIP.
- Unzip it somewhere you will find again, for example
Documents/linkedin-lead-gen.
Or, if you have git:
git clone https://github.com/corebits-io/linkedin-lead-gen.git
cd linkedin-lead-genThen open that folder in VS Code (File → Open Folder). You now see the project on the left, and you will open Claude Code on the right.
If you have never used Claude Code, this is the easiest part. Everything you type from here on is plain English.
-
Open the terminal inside VS Code (Terminal → New Terminal).
-
Install it:
npm install -g @anthropic-ai/claude-code
No Node installed? Get it from nodejs.org, then run the line again.
-
Start it from inside the project folder:
claude
-
Sign in with your Claude account when it asks.
-
Test it. Type:
hey, can you hear me?
That is the whole interface. You talk, it works.
Claude Code also runs in the desktop app, on the web, and as a JetBrains extension. The terminal inside VS Code is the nicest setup because you can watch the files change as it works.
Right now this thing knows nothing about you. That is exactly why everyone else's AI messages sound like AI. Fix that next.
Two things happen here. It learns how you write, and what you sell.
Get your own real messages:
LinkedIn → Settings → Data Privacy → Get a copy of your data → Download. LinkedIn emails you a zip. Unzip it and drop messages.csv into the voice-samples/ folder in this project.
No LinkedIn history? Fine. Drop in anything you have actually written: old emails, WhatsApp exports, your posts, notes. Any real writing works.
Then type this to Claude:
Use the teach-your-voice skill. I dropped my LinkedIn messages export in voice-samples/.
Read how I actually write, tell me in a few bullets how I sound, then save that as my voice profile.
It runs a small script over the file (your export can be tens of thousands of rows, so it never reads it all into the chat), prints a "here's how you sound" summary, and rewrites knowledge-base/voice-profile.md.
Then give it your own rules. Mine are:
Add these rules to my voice profile: no em dashes, no corporate words,
never say "I hope this finds you well". Nobody talks like that.
Your data never leaves your machine. voice-samples/ is gitignored. If you push this project to your own GitHub, your messages do not go with it.
You do not need to write a strategy document. Just point it at your website:
Use the build-business-brain skill. My website is https://yourcompany.com
Read it and tell me what I sell, who I sell to, and who my best customers are.
Save it as my business profile and I'll fix anything that's off.
It reads the site, drafts your ICP, offer, personas and exclusions into knowledge-base/business-brain.md, and tags anything it guessed with [confirm]. Read it. Correct it. Your corrections win.
That is your ICP, your offer and your persona, done in one conversation.
Ask it:
Write me one LinkedIn connection note for a founder who just raised a seed round.
Now show me one of my real messages next to it.
If you cannot tell which one is the machine, the prospect definitely cannot either.
It is not "build a list". It is building a well researched list. That is what makes every message specific instead of generic.
Based on my business brain, what job titles and filters should I search for
in Sales Navigator or Apollo to find my ICP?
It gives you the exact search terms to paste in.
Run that search in whatever database you have. Sales Navigator, Apollo, ZoomInfo, it does not matter. Sales Navigator has no export button, so either use an export tool on top of it or use something like Apollo that exports straight to CSV.
You need one file with four columns:
name,title,company,linkedin_url
Sarah Chen,Co-founder & CEO,Northwind Labs,https://www.linkedin.com/in/demo-sarah-chenDrop it in the leads/ folder. There is a fake demo-list.csv in there already if you just want to test the flow.
No database at all? Claude can build a small list for you:
Use the build-list skill to build a list from my ICP. It needs Clay or Apify connected and it burns tokens, so it is best for smaller lists.
Use the research-list skill on leads/my-list.csv
For every single person it finds what their company does and what is actually going on: funding, launches, hiring, a post they wrote. It writes all of it into a new file in research/ with a confidence tag on every row.
It will never invent a signal. If it finds nothing real about someone, it marks that row none and the message falls back to an honest company level note. Made up personalization is worse than none.
A 50 to 100 row list takes a few minutes.
You need a LinkedIn sequencer, the tool that actually sends connections and messages. This system uses HeyReach.
-
Create a HeyReach account and connect your LinkedIn account inside their web app. This is a one time click and it cannot be done through the API.
-
Get your API key: HeyReach → Settings → API Keys.
-
In this project, make your env file:
cp .env.example .env
-
Open
.envand paste your key afterHEYREACH_API_KEY=. Save.
An API key is just a password that lets this system talk to HeyReach. .env is gitignored and never shared. Never put a key in any other file.
Using the researched list, write each person a short LinkedIn connection note
and first message in my voice, all about them, no pitch.
Show me 5 previews before anything is sent.
Claude takes the researched list and writes three things per person:
- the connection note, under 300 characters, one line: "Hey Sarah, saw Northwind just shipped the eval tooling, so thought I'd connect."
- the first message, sent after they accept, still 100% about them, ending in one genuine question
- one follow up, only if they never reply, and it never opens with "just following up"
Your offer appears in none of them. That is the whole point. The offer comes up when you reply by hand, after they answer.
Claude builds the campaign in HeyReach as a draft, then stops and shows you 5 fully rendered messages, exactly as they will send, plus the safety summary: how many leads, the daily cap, how many rows were held back.
Nothing has been sent. Read them. Fix anything weird. Then, and only then:
These look good. Build the campaign in HeyReach and add the leads.
Connection request first, the DM after they accept, and one follow up if no reply.
Keep it to 25 a day.
Now it starts the campaign and pushes the leads, then reads them back to confirm each one really carried its own three messages.
Real humans do not send seven message sequences. Three touches, then stop.
- 25 connection requests per day by default. Change it in
.env, but LinkedIn does not like volume, so keep it low. - A lead is only pushed if all three of its messages exist. Anything incomplete is held back, never sent with a generic filler.
- Loading is not launching. No approval, no launch.
This is where you come in. Manually.
Yes, you could automate the replies. But every person replying here could be worth thousands of dollars to you. Do you really want to hand that conversation to an AI on day one?
Open LinkedIn. You already have research on every one of these people, it is sitting in your research/ file. Or just open their profile and look for ten seconds.
Never ask for a call in the first two messages. Ever.
They replied, so talk to them. About the thing they posted. About what is going on in their space. There is a real person on the other side of that screen, treat them like one. The call comes up on its own, usually by the third or fourth message, and half the time they are the one who asks.
To see how it is going:
Use the campaign-stats skill
Connections sent, accepted, replied, with the real rates.
knowledge-base/ The brain. Everything it knows about you.
voice-profile.md How you sound. Your rules, your style.
business-brain.md What you sell and who you sell to.
heyreach-api.md How it talks to the tool that sends.
playbooks/ Step by step procedure for each job.
.claude/skills/ The six skills. You get all of them.
teach-your-voice Learn how you write
build-business-brain Read your site, draft your ICP
build-list Build a list from your ICP (optional)
research-list Research every prospect
launch-campaign Write, preview, launch
campaign-stats Pull the numbers
voice-samples/ Your LinkedIn export goes here. (private)
leads/ Your prospect lists go here. (private)
research/ Researched versions come out here. (private)
campaigns/ Previews and push logs land here. (private)
CLAUDE.md The operating instructions Claude reads every session.
.env Your API key. Never shared. (private)
Everything marked private is gitignored. It stays on your machine.
Skills vs playbooks: the skill is the thin front end, the playbook is the detailed procedure behind it. Edit the playbook to change how a step behaves.
See PROMPTS.md for every prompt in this guide, ready to copy.
The skills do not show up. New skills only register after a Claude Code restart. Quit and run claude again from inside the project folder.
"NO EXPORT FOUND" when teaching your voice. Your messages.csv is not in voice-samples/. LinkedIn's export is a zip, unzip it first, then move messages.csv in. Or point at it directly: python3 .claude/skills/teach-your-voice/analyze_voice.py path/to/messages.csv
HeyReach says no sender account. You have to connect your LinkedIn account inside the HeyReach web app first. The API cannot log a LinkedIn account in.
A message came out with an em dash / a buzzword / a pitch. Say so. That message breaks my voice rules, rewrite it and update voice-profile.md so it never happens again. The rulebook is a file you own, edit it.
Research came back empty for a lot of rows. That is honest, not broken. Those rows get a plain company level note instead of an invented hook. If most rows are empty, the list is probably too obscure or the LinkedIn URLs are wrong.
It is about to send something I did not approve. It will not. But if anything ever looks off, hit escape. Nothing reaches LinkedIn before you type your go.
- Quality over volume. One genuine message beats fifty templated ones.
- Never invent data. No fabricated signals, names, numbers or references. If nothing real was found, it says so.
- Loading is not launching. Nothing goes live until you have seen the preview and said go.
- The 5 message preview happens every single time.
- 25 connection requests a day by default. Raising it comes with a warning.
- Stop before anything irreversible. Adding leads to a live campaign is real outreach. It proposes first.
LinkedIn automation carries account risk. Keep the volume low, keep the messages real, and never send anything you would not send by hand. This system is built to make that easy, not to help you blast.
Your data, your keys and your prospect lists never leave your machine. Nothing in this repo phones home.
Built by Corebits. Free, MIT licensed, take it and change it.
If you would rather have something like this custom built for your business, there is a link for that on the site.