Your CRM's best import file is sitting in Gmail
Every CRM onboarding guide starts with "import your contacts" – and every new CRM sits half-empty, because the people you actually talk to are not in a CSV anywhere. They are in your mail.
The good news: if you have been labelling conversations – clients, leads, suppliers – you have already done the hard part. A label is a hand-curated contact segment. What is missing is the export.
Step 1 – define the scope with a search, not a scroll
Gmail's search operators do the filtering before anything is extracted, and the same string works in the Gmail search box, in Apps Script and in the Gmail API:
label:clients newer_than:6m
Useful additions, all current: newer_than: / older_than: to bound the window, has:attachment for correspondence with substance, and -list:news@example.com to drop a newsletter that keeps appearing under the label.
Run the search in Gmail first and eyeball the results. If the search is wrong, everything downstream is wrong.
Step 2 – get the addresses out
Gmail has no "export these results" button – the four workable routes (Other contacts, Contacts export, Takeout, Apps Script) are compared honestly in our guide to extracting email addresses from Gmail. For a label-scoped list, the realistic options are Apps Script or an add-on, because Other contacts and Contacts export cannot see labels at all, and Takeout returns a mail archive, not a list.
Step 3 – shape the columns your CRM expects
Whatever route you use, land the data in this shape – nearly every CRM's CSV import maps onto it:
| Column | Why |
|---|---|
| First name / Last name | Split, not combined – imports match on separate fields |
| One address per row | |
| Source | The label name – so you know which segment this row came from |
| Last contacted | The most recent message date – your follow-up ordering |
Step 4 – dedupe and drop the noise
Three cleanup passes before import:
- Deduplicate on the email column –
=UNIQUE()or Data → Data cleanup → Remove duplicates. - Drop machine senders –
no-reply@,notifications@, anything that only ever appeared on a mailing list. - Decide about bystanders – addresses that only ever appeared in CC may not belong in an outreach list. Google's sender guidelines are blunt: "Don't send messages to people who didn't sign up to get messages from you." People you genuinely corresponded with pass that test; a CC bystander may not.
Step 5 – import, and keep the source column
Import the CSV, map the columns, and keep Source as a tag or custom field. Six months from now, "which of these came from the clients label" is a question you will want answered.
Where Contact Extractor fits
Contact Extractor collapses steps 2–4 into one pass: point it at label:clients newer_than:6m and it writes email addresses and the names attached to them into a Google Sheet, deduplicated, drawing from all seven places an address can appear in a message – From, To, CC, BCC, Reply-To, subject and body. It runs as an Apps Script add-on in your own Google account.
→ Contact Extractor on the Google Workspace Marketplace
Sources
- Search operators you can use with Gmail – read 2026-08-20
- Email sender guidelines – Gmail Help – read 2026-08-20
- Export contacts – Google Contacts Help – read 2026-08-20