LinkedIn outreach works when it's personal. The problem is that doing it at scale — reaching 50+ prospects a week with messages that don't sound like templates — takes hours most B2B teams don't have. I built a solution with Claude Code that cuts that time by about 80% while keeping the quality high enough that response rates don't drop.
This isn't about scraping profiles or spamming connection requests. It's about automating the research and drafting process so you can send personalized messages faster. Here's exactly how I set it up and how you can build the same system for your own outbound efforts.
What This System Actually Does
Before I get into the technical setup, let me be clear about what we're automating and what we're not. This workflow handles three specific tasks:
- Profile research — pulling relevant details from a prospect's LinkedIn profile (recent posts, job changes, company info)
- Message drafting — writing a first connection request or InMail that references those details in a natural way
- Follow-up scheduling — generating 2–3 follow-up messages with appropriate delays based on engagement signals
What you still do manually: actually sending the messages, reviewing the drafts for accuracy, and responding when someone replies. LinkedIn's ToS doesn't allow automated sending, and honestly, you shouldn't want to. The goal is to save time on the prep work, not to remove the human from the conversation entirely.
Step 1: Setting Up the Input Sheet
The system starts with a simple spreadsheet. Each row represents one prospect. The columns I track:
- Name
- LinkedIn profile URL
- Company
- Job title
- Campaign tag (which outbound campaign they're part of)
- Status (pending, sent, replied, no response)
This sheet is the single source of truth. I export it as a CSV and feed it into the Claude Code workflow. If you're using a CRM, you can pull this data directly from there — the important part is having structured input.
Step 2: Automating Profile Research with Claude Code
The next step is the part that used to take the most time: researching each prospect to find something specific to reference. With Claude Code, I built a script that takes the LinkedIn profile URL and extracts the most relevant signals.
Here's the core prompt I use:
You are a B2B sales researcher. Given a LinkedIn profile URL, extract: 1. Most recent job change (if within the last 12 months) 2. Recent posts or articles (max 2, prioritize business-related content) 3. Shared connections (if any) 4. Notable achievements mentioned in the About section 5. Company growth signals (headcount changes, funding, recent news) Return a JSON object with these fields. If any field has no data, return null.
The script runs through the CSV, hits each profile URL, and outputs a research file with all the key details. This used to take 5–10 minutes per prospect if I was doing it manually. Now it takes about 15 seconds per profile, and I can batch-process 50 at a time.
Important: LinkedIn doesn't like scraping. I use this for prospects I'm already connected with or where I have a legitimate reason to view their profile. If you're doing cold outreach at volume, make sure you're following LinkedIn's terms and using proper rate limits.
Step 3: Generating Personalized Messages
Once the research is done, the next step is turning those insights into actual message drafts. This is where most automation tools fall apart — they either sound robotic or they're so generic they might as well be templates.
The key is giving Claude Code enough context about your offer and your voice. Here's the structure I use:
You are drafting a LinkedIn connection request for [PROSPECT_NAME], [JOB_TITLE] at [COMPANY]. Research context: - Recent activity: [RECENT_POST_SUMMARY] - Job change: [JOB_CHANGE_INFO] - Shared connection: [CONNECTION_NAME] Our value proposition: [YOUR_OFFER] Write a 200-character connection request that: 1. References one specific detail from their recent activity 2. Mentions the shared connection if applicable 3. Hints at the value we offer without being salesy 4. Ends with a soft ask to connect Tone: conversational, respectful, Vancouver-local if relevant.
The output is a draft message that reads like something a human would write, because it's built from real details about the prospect. I review every message before sending, but the edits are usually minor — changing a word here or there, adjusting tone based on seniority.
Step 4: Scheduling Follow-Ups Automatically
The first message is only part of the battle. Most responses come from follow-ups, but writing 2–3 follow-up variations for every prospect is time-consuming. I automated this too.
The system generates a follow-up sequence for each prospect based on their engagement signals:
- Day 3 — if they viewed your profile but didn't respond, send a value-add message (case study, article, tool recommendation)
- Day 7 — if still no response, reference a recent company milestone or news item
- Day 14 — final breakup message offering to circle back in a few months
Each follow-up is drafted with the same research context as the first message, so it doesn't repeat what you already said. The scheduling is manual (I paste them into a reminder doc), but the writing is automated.
What I Learned Building This
The biggest mistake I made early on was trying to automate too much. The first version of this system tried to score lead quality, decide which campaign to assign prospects to, and even suggest optimal send times. It was overbuilt and broke constantly.
The version that works is much simpler: research, draft, schedule. That's it. Everything else stays manual because it requires judgment that Claude Code can't reliably make.
The other lesson: don't skip the review step. I tried sending messages directly from the draft output for about a week, and the response rate dropped by 30%. Even when the drafts are 90% accurate, that last 10% — catching a factual error, adjusting tone for a senior exec, removing an awkward phrase — makes the difference between a message that gets ignored and one that gets a reply.
Results After Six Months
I've been using this system since late 2025. Here's what changed:
- Time per prospect went from ~12 minutes (research + drafting) to ~2 minutes (review + send)
- Weekly outreach volume went from 15 personalized messages to 60+
- Response rate stayed consistent at around 22%, which is what I was getting with fully manual outreach
- Booked meetings increased by about 3x, purely because I could reach more qualified prospects in the same amount of time
For a Vancouver-based B2B consultant, that difference is meaningful. My outbound pipeline used to be a side effort I'd do when I had spare time. Now it's a structured part of my weekly routine that actually fills my calendar.
How to Build This for Your Own Outreach
If you want to set up something similar, here's where I'd start:
- Build the input sheet first — get 10–20 prospects loaded with all the required fields
- Test the research script on 5 profiles manually before batching
- Write 3–5 messages yourself to establish the tone, then feed those as examples to Claude Code
- Always review the first 10 drafts closely before trusting the system at scale
The whole setup takes about 4–6 hours if you're starting from scratch. After that, it's maybe 30 minutes a week to maintain. The ROI shows up fast if you're doing any volume of outbound at all.
And if you want help building a custom version for your specific sales process — whether that's SaaS, consulting, or local services — I walk through setups like this in the AI Audit. We can map out exactly which parts of your outreach workflow are worth automating and which aren't.
For more on how Claude Code fits into other parts of a sales workflow, check out my posts on CRM integration and outbound email automation. And if you're wondering whether this kind of automation is right for your business, the FAQ page covers most of the common questions I get.
The tools exist. The question is just whether you're going to keep doing this manually or start getting your time back.