If you search for a free Gmail CRM, you mostly find apps with a free tier and a paid plan behind the features you actually wanted. For a freelancer, consultant, recruiter or small agency the real need is usually smaller: one list of people, the date you last emailed each one, and a reminder of who to chase. Google Sheets can do that for free. This guide shows how to build it yourself, and where a ready-made template saves you the work.
1. The columns a Sheet CRM needs
Start a new Google Sheet with one row per contact or deal and these columns (row 1 = headers):
| Column | Header | What goes in it |
|---|---|---|
| A | Name | Person or company |
| B | The address you email them at – it must match Gmail exactly | |
| C | Stage | Lead, Contacted, Proposal, Won, Lost … (a dropdown via Data › Data validation keeps it clean) |
| D | Next follow-up | A date you set yourself |
| E | Last contacted | Date of the latest email either way |
| F | Last from | Them if they wrote last (you owe a reply), Me if you did |
| G | Status | A formula – see below |
| H | Notes | Anything else |
That is the whole data model. Pipelines, deal values and owners can be added later as extra columns.
2. A status formula you can paste
Put this in G2 and fill it down. It turns each row into one word you can sort or filter by:
=IF(A2="","",IF(OR(C2="Won",C2="Lost"),"Closed",IF(F2="Them","Needs reply",IF(AND(ISNUMBER(D2),D2<TODAY()),"Overdue",IF(AND(ISNUMBER(D2),D2=TODAY()),"Due today",IF(AND(ISNUMBER(E2),TODAY()-E2>=21),"Gone cold","OK"))))))
- Closed – stage is Won or Lost, so the row drops out of your chase list.
- Needs reply – they wrote last. This one matters most: it is the email you forgot to answer.
- Overdue / Due today – from your own Next follow-up date.
- Gone cold – no email either way for 21 days or more (change 21 to suit your sales cycle).
The formula uses only IF, OR, AND, ISNUMBER and TODAY, so it works the same if you download the sheet as Excel. Add conditional formatting (Format › Conditional formatting › Text is exactly) to colour Needs reply red and Overdue orange, then sort by Status each morning.
3. Fill in "Last contacted" from Gmail with Apps Script
The weak point of every spreadsheet CRM is column E: typed by hand, it is wrong within a week. Google Apps Script can read your own Gmail and write the date for you. Open Extensions › Apps Script in your sheet, paste this, save, and run fillLastContacted:
function fillLastContacted() {
const sheet = SpreadsheetApp.getActiveSheet();
const rows = sheet.getLastRow() - 1;
if (rows < 1) return;
const emails = sheet.getRange(2, 2, rows, 1).getValues(); // column B
emails.forEach(([email], i) => {
if (!email) return;
const threads = GmailApp.search('from:' + email + ' OR to:' + email, 0, 1);
if (threads.length) sheet.getRange(i + 2, 5).setValue(threads[0].getLastMessageDate()); // column E
});
}
The first run asks you to authorise the script; because it is your own unpublished script, Google shows "Google hasn't verified this app" and you continue via Advanced. The script runs in your account and only writes into this sheet.
What this simple version does not do, and why most people stop here:
- It does not fill Last from (who wrote last). For that you read the newest message in the thread, compare its sender with your own address and your aliases, and skip drafts.
- A thread's last message can be someone else on CC, and your search can match a newsletter that mentions the address. Real use needs more careful matching.
- It calls Gmail once per row. Apps Script has daily quotas and a maximum run time per execution, so a long list needs batching and a resume point.
- Nothing runs until you click Run. A daily trigger (Triggers › Add trigger › Time-driven) fixes that, and then you also want the result emailed to you.
4. Or start from a template that already does this
FollowSheet is our Google Sheet + Apps Script template built on exactly this pattern. You make a copy into your own Drive, add contacts, and choose FollowSheet › Sync Gmail now. It fills in Last contacted, Last from (Them/Me), Last subject and a link to the Gmail thread, ignores drafts, recognises your aliases, and adds a Today tab with who to chase. It reads only the date, sender, recipients and subject of your latest messages, never message bodies or attachments, and it never emails your contacts.
- Free: all tabs, statuses and the Pipeline; Gmail sync of 25 contacts at a time; every new sheet gets a 14-day Pro trial, no card.
- Pro, $7/month or $59/year: unlimited sync, a daily autopilot that syncs Gmail and emails you the list each morning, automatic follow-up dates and capture of new leads from a Gmail label.
- Team, $149/year: 5 Google accounts and a daily list per row owner.
- Paid plans carry a 14-day money-back guarantee (refund policy). If you would rather not set it up yourself, there is a done-for-you setup for $79: your stages and columns, up to 1,000 contacts imported from your CSV.
When a Sheet CRM is the wrong choice
Be honest about the limits before you commit a client list to a spreadsheet:
- You need email open tracking, mail merge or sequences. A Sheet CRM (and FollowSheet) does not send tracking pixels or campaigns.
- You want to work inside a Gmail sidebar rather than in a sheet.
- Several people need permissions per record, activity logs and reporting. That is a full CRM's job.
In those cases a Gmail-native CRM such as Streak is the better fit; its CRM pipelines are on paid plans, from $49 per user per month billed yearly (streak.com/pricing, checked 4 October 2026). The FollowSheet vs Streak comparison goes through the differences. For a one-person or small-team chase list with up to a few hundred active contacts, a Google Sheet that keeps its own "last contacted" column up to date is usually enough.
Sources
- Google Apps Script – GmailApp reference
- Google Apps Script – quotas for Google services
- Gmail Help – search operators you can use with Gmail
- Streak pricing (checked 4 Oct 2026)
Related guides
- Gmail follow-up tracker without a CRM
- Recruiter follow-up tracker in Google Sheets
- Gmail follow-up reminders without an extension
Published 2026-10-05 by Karuna Labs. Our tools check file structure and checksums; always review outputs (and payment files in your bank's preview) before relying on them. This is general information, not financial, tax or legal advice.