Lead list template for Google Sheets and Excel (free CSV download)
A free lead list template with the columns that matter, status dropdowns, data validation and dedupe formulas for Google Sheets and Excel. Download the CSV.
- Published
- Read time
- 9 min
- Category
- Guide
A good lead list template has three groups of columns: who the business is (name, category, address), how to reach it (email with its verification result, phone, website, social pages), and where you are with it (status, owner, last contact, next step, do-not-contact). Add a unique ID so you can dedupe, a dropdown for status so values stay consistent, and a COUNTIF check that flags duplicates as you paste in new leads.
Download the free lead list template (CSV). It opens in Google Sheets, Excel, Numbers and any CRM import. It has 29 columns and three clearly fictional example rows to delete. The rest of this guide explains each column and the formulas to add.
What columns should a lead list template have?#
Use columns that answer three questions: who is this, how do I reach them, and what happens next. The template uses the same column names as a Leadraft export, so a file from Leadraft pastes straight in, but every column makes sense for a list you build by hand.
Who the business is#
Scroll horizontally if needed →
| Column | What goes in it | Why it matters |
|---|---|---|
lead_id | Your own ID: L0001, L0002... | A stable key that never changes, even if the name does |
business | Trading name as customers see it | What you'll write in the email |
category | Main trade: Plumber, Dentist | Lets you segment and personalize |
address, city, state, postal_code, country | Full address, split | Filter by city or ZIP; use for direct mail |
rating, reviews | Google rating and review count | A rough size and activity signal |
maps_url, google_place_id | The listing link and its place ID | Lets you check the listing and dedupe exactly |
The Google place ID is the best dedupe key for businesses from Google Maps. Google describes it as a textual identifier that uniquely identifies a place, so the same business found by two different searches carries the same ID. Place IDs can change occasionally when Google's database is updated, and Google suggests refreshing ones older than a year [1].
How to reach them#
Scroll horizontally if needed →
| Column | What goes in it | Why it matters |
|---|---|---|
email | The best address for this business | Your send address |
email_grade | The verification result | Decides whether you send at all |
email_role | Generic (info@), personal (jane@), and so on | Changes how you write the email |
phone | E.164 format: +15125550101 | Sorts, dedupes and dials cleanly |
website | Full URL | Research, and the source of the email |
facebook, instagram, linkedin | Page URLs | A second way to check the business is active |
Keep email_grade next to the email. A Leadraft export writes valid for a Verified address and catch_all for an Accept-all one. If you verify with another tool, use its values, but keep the column. An address whose server accepts everything is a maybe, never a yes, so you'll want to filter on it. Catch-all emails, explained covers why.
Where you are with them#
Scroll horizontally if needed →
| Column | What goes in it |
|---|---|
source | Where the lead came from: "Google Maps search", "Referral", "Trade show" |
date_added | When it entered the sheet (YYYY-MM-DD) |
status | One value from the status list below |
assigned_to | Who works this lead |
last_contacted | Date of the last touch |
next_step, next_step_date | What happens next, and when |
do_not_contact | TRUE or FALSE |
notes | Anything else, short |
Don't delete a row when someone asks you to stop contacting them. Set do_not_contact to TRUE and keep it. If you delete it, the same business can come back in next month's list and get emailed again.
Which lead statuses should I use?#
Use a short, fixed list where each status means one thing. Nine is enough for most teams:
Scroll horizontally if needed →
| Status | Means |
|---|---|
| New | Added, not yet checked |
| Researching | Checking fit, finding the right contact |
| Contacted | First message sent |
| Replied | They answered, any answer |
| Meeting booked | A call or visit is on the calendar |
| Won | Became a customer |
| Lost | Talked, didn't buy |
| Not a fit | Wrong size, wrong trade, closed |
| Do not contact | Asked to stop, or bounced hard |
Put the list on a second tab called Lists (one value per cell in column A) and point the dropdown at it. When you need a new status, you add it in one place.
How do I set up data validation and dropdowns?#
Add a dropdown to status and do_not_contact, and reject anything else. This is what keeps a shared sheet usable after a month.
In Google Sheets [2]:
- Select the status column, from row 2 down.
- Go to Insert > Dropdown (or Data > Data validation > Add rule).
- Under Criteria, choose Dropdown (from a range) and select
Lists!A2:A10. - Leave invalid entries rejected (the default). Advanced options > Show a warning is the softer choice.
- Click Done. Repeat for
do_not_contactwith the values TRUE and FALSE.
In Excel [3]: select the column, go to Data > Data Validation, set Allow to List, and set Source to =Lists!$A$2:$A$10.
Two more rules worth adding:
- Dates: on
date_added,last_contactedandnext_step_date, allow only valid dates. - Email: in Google Sheets, data validation has a criterion that checks the text is a valid email. It only checks the format, not whether the mailbox exists.
Watch the import step too. Spreadsheets like to turn +15125550101 into a number and drop leading zeros from ZIP codes such as 02134. In Google Sheets, untick Convert text to numbers, dates, and formulas when you import, or format the phone and postal_code columns as plain text first.
What formulas find duplicate leads?#
Normalize first, then count. Two rows are only duplicates if they match on a stable key, and "Example.com/", "https://www.example.com" and "example.com" are the same website.
Column letters below match the template: D is email, G is phone, H is website, Q is google_place_id.
Normalize the keys (add helper columns at the end of the sheet):
Scroll horizontally if needed →
| Key | Google Sheets | Excel (Microsoft 365) |
|---|---|---|
=LOWER(TRIM(D2)) | =LOWER(TRIM(D2)) | |
| Website domain | =REGEXEXTRACT(LOWER(H2),"^(?:https?://)?(?:www\.)?([^/]+)") | =TEXTBEFORE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(LOWER(H2),"https://",""),"http://",""),"www.","")&"/","/") |
| Phone digits | =REGEXREPLACE(G2&"","[^0-9]","") | Format as text, then compare as-is |
Flag duplicates with COUNTIF [4]. Put these in a column called dupe:
- Every copy, including the first:
=COUNTIF($Q$2:$Q$5000,Q2)>1 - Only the second and later copies:
=COUNTIF($Q$2:Q2,Q2)>1
The second version is the one you want for cleaning, because the first occurrence returns FALSE and you can filter out the TRUE rows. Run it on the place ID first, then on the normalized domain, then on the email. A chain with one website and ten locations will match on domain but not on place ID: decide whether you want one row per location or one per company.
Highlight duplicates as you type. Select column D, open conditional formatting, choose a custom formula and enter =COUNTIF($D:$D,$D1)>1. Every repeated email turns a color the moment it's pasted.
Check against a suppression tab. Keep everyone who opted out or bounced on a tab called Suppression, one email per row in column A. Then flag them in the main sheet:
=IF(COUNTIF(Suppression!$A:$A,LOWER(TRIM(D2)))>0,"Suppressed","")
Built-in tools. Google Sheets has Data > Data cleanup > Remove duplicates and Excel has Data > Remove Duplicates. Both delete rows in place, so make a copy first and prefer the formula when the sheet holds status history.
How do I use the sheet day to day?#
Filter, work, update. A sheet only works as a tracker if the status and next step are always current.
- Each morning, filter
next_step_dateto today or earlier anddo_not_contactto FALSE. That's your list. - After every touch, update
status,last_contacted,next_stepandnext_step_datebefore you move on. - Each week, filter
status= Contacted withlast_contactedolder than 14 days. Follow up or close them out. - When you add leads, paste them at the bottom, then filter
dupe= TRUE and delete those rows.
A helper column for days since last contact makes step 3 one click: =IF(Y2="","",TODAY()-Y2).
Where do the leads come from?#
Any source works with the template, as long as you fill source honestly. For local businesses, the most complete free source is Google Maps: every listing has a name, category, address, phone and often a website. The catch is that Maps shows a limited number of results per search, and it doesn't show email addresses. You find emails on each business's own website, then verify them.
Our guides cover each step: export Google Maps results to Excel, why Maps stops at about 120 results, and the full Google Maps lead generation playbook. If you're sizing a campaign, the lead list calculator works out how many businesses you need for a target number of replies.
When should I move from a spreadsheet to a CRM?#
Move when the sheet starts costing you deals. A spreadsheet is fine for one person or a small team working a few thousand leads. Switch to a CRM when:
- Several people work the same leads and overwrite each other's updates.
- You need every email and call logged automatically, not typed in.
- You're running sequences in a cold-email tool and want replies to update the status on their own.
- The sheet is tens of thousands of rows and filters get slow.
Because the template uses plain column names, it maps cleanly into a CRM import later. Keep lead_id and google_place_id when you move, so you can still dedupe against the old sheet.
FAQ#
What columns should a lead list have?#
At minimum: business name, category, email, email verification result, phone, website, full address split into city, state and ZIP, a source, the date added, a status, who owns the lead, the last contact date, the next step and a do-not-contact flag. Add a unique ID such as the Google place ID so you can dedupe reliably.
How do I make a lead tracking spreadsheet in Google Sheets?#
Import the CSV template with File > Import, freeze the header row, add a dropdown to the status column (Insert > Dropdown), add a duplicate check with COUNTIF on the email and place ID columns, and filter by status and next-step date each day.
How do I find duplicate leads in Google Sheets or Excel?#
Use COUNTIF on a stable key. =COUNTIF($D$2:$D$5000,D2)>1 flags every email that appears more than once, and =COUNTIF($D$2:D2,D2)>1 flags only the second and later copies, so you keep the first. Normalize first: lowercase emails, strip www. and https:// from websites, and keep only digits in phone numbers.
What lead statuses should I use?#
Keep it short: New, Researching, Contacted, Replied, Meeting booked, Won, Lost, Not a fit and Do not contact. Each status should mean one clear thing, and every lead should have exactly one. Use a dropdown so nobody types a new variation.
Is a spreadsheet good enough, or do I need a CRM?#
A spreadsheet works well for one person or a small team working a few thousand leads. Move to a CRM when several people work the same leads, when you need email history logged automatically, or when the sheet passes tens of thousands of rows and gets slow.
Sources#
- Google for Developers, Place IDs.
- Google Docs Editors Help, Create an in-cell dropdown list.
- Microsoft Support, Create a drop-down list.
- Microsoft Support, COUNTIF function.
Keep reading
Guide
B2B mailing lists: build or buy, for direct mail and email
B2B mailing lists for postal and email: what lists cost per thousand, USPS NCOA, CASS and Marketing Mail basics, compliance, and building one from Google Maps.
Read articleGuide
Google Maps lead generation: the complete playbook (2026)
Google Maps lead generation end to end: niche, area, keywords, coverage, cleaning, verified emails, outreach and re-runs, with a worked 2,000-business funnel.
Read articleGuide
Local business leads: where to get them, what they cost, and how to qualify them
Where to get local business leads (Google Maps, data vendors, directories, state filings, LinkedIn, referrals), cost per usable lead, and how to qualify them.
Read article