Most B2B lead lists die the same way. Someone starts a spreadsheet, adds columns as questions come up — "Seniority?", "Score?", "Last touched??" — and three weeks later nobody trusts a single cell. The columns were improvised, so the data is improvised.
The fix is boring on purpose: a fixed 12-column structure, agreed once, never edited mid-campaign. The template below behaves identically in Google Sheets and Excel, imports cleanly into any CRM that maps fields by header name, and lines up with what LinkedIn outreach tools export. Copy the CSV header into row 1 and start filling rows.
The canonical 12-column lead list
Each column has one job. If you can't say what a cell will be used for — a filter or a message — it doesn't belong in the sheet.
| Column | What goes in it | Example |
|---|---|---|
| FirstName | Given name only, spelled exactly as on the profile. This feeds {FirstName} personalization — a typo here lands in every message you send. | Anna |
| LastName | Family name. Keep "PhD", "MBA", and emoji out — park credentials in Notes if they matter. | Keller |
| JobTitle | The title as written on their profile, not your normalization ("Head of Sales", not "sales lead"). You filter on it later, and {JobTitle} may appear in messages. | Head of Sales |
| Company | Current employer as shown on the profile. One company per row — if someone changes jobs, add a new row. | Acme GmbH |
| CompanySize | A bracket like 11-50 or 51-200, never an exact headcount. Brackets stay true for a year; exact numbers are wrong by Friday. | 51-200 |
| Industry | One label from a short list you actually filter by (5–10 values max). "SaaS" beats "Computer Software / Internet / Technology". | SaaS |
| Location | City plus country code. Enough to route timezones and segment by region — you don't need the street. | Berlin DE |
| LinkedInURL | The canonical /in/ URL only. Strip tracking params and anything after a "?" — duplicates hide behind messy URLs. | linkedin.com/in/annakeller |
| Business email only, no personal Gmail. Mark unverified addresses "(unverified)" or leave the cell blank — a blank is honest, a guess bounces. | [email protected] | |
| Phone | Direct line in international format if you have one. Blank beats a switchboard number nobody will dial. | +49 30 000 0000 |
| Status | Exactly one value from the taxonomy below. Never freetext — "waiting on reply??" can't be filtered. | Invited |
| Notes | One line per touch, newest first, each line dated. Use semicolons, not commas, so the CSV stays intact. | Sent invite 2026-07-14 |
Copy the CSV header (plus example rows)
Paste the first line into row 1 of a blank sheet, or save the whole block as a .csv file (UTF-8). The example rows are generic personas — replace them with real leads.
FirstName,LastName,JobTitle,Company,CompanySize,Industry,Location,LinkedInURL,Email,Phone,Status,Notes Anna,Keller,Head of Sales,Acme GmbH,51-200,SaaS,Berlin DE,https://linkedin.com/in/annakeller,[email protected],,Invited,Sent invite 2026-07-14 Marcus,Boyd,VP Marketing,Northwind Ltd,201-500,Logistics,Manchester UK,https://linkedin.com/in/marcusboyd,[email protected],+44 161 000 0000,Replied,Asked about pricing 2026-07-16; follow up 2026-07-20 Priya,Nair,Founder,Brightpath Labs,11-50,EdTech,Austin TX,https://linkedin.com/in/priyanair,,,New,Found via Sales Navigator search 2026-07-17
Two formatting rules keep this file portable: no commas inside any cell (semicolons in Notes), and dates as YYYY-MM-DD so they sort correctly as plain text.
The status taxonomy: seven stages, no freetext
Status is the column that turns a contact list into a pipeline. Use these values and nothing else — the whole point is that you can filter Status = Replied on Monday morning and know exactly who needs you.
| Status | Means | When it changes |
|---|---|---|
| New | Saved to the list, untouched. | Flip to Invited the moment the connection request goes out. |
| Invited | Connection request sent, pending. | Flip to Accepted the day they accept. Pending more than 3 weeks: withdraw the invite and mark Lost. |
| Accepted | Connected, but no real message sent yet. | Flip to Messaged when your first proper message goes out — ideally within 48 hours of accepting. |
| Messaged | First message sent, waiting. | Flip to Replied on any response. After two follow-ups and silence, mark Lost — don't send a third. |
| Replied | They answered anything, even "not now". | Flip to Qualified when they fit your ICP and show intent (a question, an agreed call). "Not now" goes back in Notes with a re-check date. |
| Qualified | Real opportunity — this row now drives your sales process. | Flip to Won when the deal closes, Lost when it dies. |
| Won / Lost | Terminal. The row is done. | Never delete Lost rows — they're your do-not-contact-again memory for the next campaign. |
Why 12 columns and not 30
Every extra column is a field nobody fills. Add "LeadScore", "Persona", "Tech stack", "Last funding round" and week one looks impressive — by week three those cells are empty, and empty columns train everyone to stop trusting the sheet.
The rule: add a column only when a filter or a message will actually use it. If your outreach copy references the prospect's tech stack, a TechStack column earns its place. If nothing computes a score, LeadScore is decoration. Twelve columns cover identity (name, title, company), firmographics you filter by (size, industry, location), contact data (profile URL, email, phone), and workflow (status, notes). Everything else is optional until proven useful.
Linkydy fills this exact structure automatically
You can maintain this template by hand — plenty of teams do. The tedious parts are the ones a browser extension does better:
- Collecting rows. Linkydy saves prospects straight from LinkedIn people search and Sales Navigator results — name, title, company, and the clean profile URL captured in one click. The full walkthrough is in the guide to exporting LinkedIn search results to CSV.
- Contact data. One-click Find Email and Find Phone on any profile, with results landing on the lead card — see how the email finder works.
- Status tracking. Statuses update as you send invites and messages, so the pipeline column maintains itself instead of relying on your memory.
Honest scope note: Linkydy's CSV export gives you name, title, company, profile URL, email, phone, and status — the core columns of this template. CompanySize, Industry, Location, and Notes are yours to maintain, either in the sheet after export or on the lead card inside Linkydy. It also imports lists of profile URLs from a CSV, so an existing sheet becomes a working pipeline in minutes.
Once the list is filled, the next problem is what to send — the LinkedIn outreach checklist covers sequencing, and pacing limits live in the connection request limits guide.
Linkydy