Cold email from Google Sheets means turning a raw list of prospects in a spreadsheet into a clean, verified, enriched and personalised list you can hand to your email sender. You do the preparation work where the data already lives: verify the addresses so you do not burn your domain, scrape and enrich each row with real facts, score against your ideal customer profile, and write a personalised opener for every prospect with AI. ReplyLabs runs all of those steps inside Google Sheets and charges only for rows that succeed. One thing to be clear about up front: ReplyLabs prepares the list, it is not the tool that sends the mail. You send through your own email service provider (an ESP or sequencer such as Instantly, Smartlead, Apollo, or your own SMTP). This guide covers the full workflow end to end.
Does ReplyLabs send cold emails?
No. ReplyLabs is a Google Sheets add-on that builds and prepares the list. It verifies email addresses, scrapes and enriches company data, scores rows against your ICP, and personalises the message with AI, all inside the sheet. The actual sending, warming, throttling and reply handling happens in your own sending platform. This split matters because deliverability is mostly about how you send (authentication, volume, domain reputation), while reply rate is mostly about who you target and what you say. ReplyLabs owns the second half: list quality and personalisation. You own the first half: the sending infrastructure.
Keeping the boundary clear also protects you. The single fastest way to wreck a sending domain is to blast unverified addresses, so the verification and filtering you do in the sheet directly protects the reputation of the domain you send from.
Why prepare a cold-email list in a spreadsheet
A spreadsheet is already where most outbound lists start life. You export prospects from a data provider, paste in a scraped list, or pull rows from your CRM, and they land as columns: name, company, title, email, domain. The problem is that a raw export is never ready to send. Emails bounce, titles are stale, the company facts are missing, and every row reads the same. Pulling that list into five different tools to clean it and then stitching the results back together is friction that kills the workflow.
Doing the preparation in the sheet removes the round trips. You verify, enrich, score and personalise in place, then export once at the end. The columns you started with become the inputs to each step, and each step writes its result back as a new column you can filter, sort and inspect like any other spreadsheet data.
Cold-email deliverability fundamentals
Deliverability is whether your email reaches the inbox at all. In 2026 it is largely a solved, mechanical problem if you do the setup, and a fatal one if you skip it. The fundamentals sit in your sending platform, not in ReplyLabs, but they decide whether the list you prepared ever gets read.
- Authenticate every sending domain. SPF, DKIM and DMARC are no longer optional. Major providers now reject mail from domains without correct DMARC records rather than routing it to spam. Configure all three on every domain before you send a single message.
- Use secondary domains, not your primary. Send cold email from dedicated domains (for example a getacme.com variant) so a reputation hit never touches your main company domain or its transactional mail.
- Keep per-inbox volume low. A sustainable ceiling in 2026 is roughly 30 to 50 cold emails per inbox per day. Scale by adding warmed inboxes across several domains, not by sending more from one.
- Warm inboxes before you use them. New inboxes need a warm-up period building send and reply history before they carry real volume.
- Send plain text, keep it short. Heavy HTML, tracking pixels and image-laden templates raise spam scores. Short plain-text messages under about 80 words perform best.
- Verify before you send. Bounces are the loudest negative signal a mailbox provider sees. A high bounce rate tanks your sender reputation fast, which is why list verification is a deliverability step, not just a cost-saving one.
The first five live in your sender. The last one is the bridge: you do it in the sheet, and it is the single preparation step with the biggest effect on whether the rest of your sending setup survives contact with a real list.
How to verify a cold-email list in Sheets
Email verification checks whether an address is real and able to receive mail before you ever send to it. In ReplyLabs you select the email column, run the Verify step, and each address comes back with a verdict (deliverable, undeliverable, risky, unknown) written into a new column. Verification costs $0.01 per email and, as with every step, you are only charged for rows that return a result.
The point is to drop dead addresses before they cost you. Every undeliverable address you remove is a bounce that never happens, and bounces are what mailbox providers punish hardest. Verify first, filter to deliverable rows, and only spend enrichment and AI effort on addresses that can actually receive your message. The full mechanics live in the guide to email verification in Google Sheets.
How to enrich and scrape rows for personalisation
Enrichment fills in the facts that make personalisation possible. A name and a company are not enough to write something a prospect would believe a human wrote. You need a real detail: what the company does, a recent announcement, a funding stage, the wording on their homepage.
ReplyLabs scrapes web pages and enriches rows directly in the sheet. Point the scrape step at a column of company URLs or LinkedIn company pages and it pulls back content you can feed downstream. The result lands in a new column, the same as every other step. Scraping a page costs from $0.005 per URL depending on the engine, and LinkedIn company rows are priced separately. The detailed walkthrough is in lead enrichment in Google Sheets.
The reason enrichment comes before AI is simple: the AI step can only personalise on the columns in front of it. A model handed just "Acme Corp" writes something true of any company. A model handed "Acme Corp, a Series B logistics firm that just opened a Rotterdam hub" writes something true of exactly one. Enrichment is what turns generic mail-merge into real personalisation.
What is an ICP and how do you score against it?
An ideal customer profile (ICP) is a description of the companies most likely to buy, succeed and stay. It combines firmographics (industry, size, revenue, location), buying triggers, the tools they already use, and disqualifiers that rule a company out. Targeting a clear ICP is the highest-leverage thing you can do in outbound: lists built to a tight ICP reliably out-reply broad blasts, and the gap between average and top performers comes down to data quality more than copywriting. The full definition lives in the ICP glossary entry.
In a sheet, scoring against your ICP is just another AI step. You write a prompt that reads the firmographic and scraped columns and returns a label or a score:
- Make sure the rows hold the inputs your ICP cares about (industry, employee count, the scraped about text).
- Write a scoring prompt, for example: "Based on
{{Industry}},{{Employee count}}and{{About}}, reply with exactly one of: Strong fit, Possible fit, Not a fit." - Run it across the list. The verdicts land in a new column.
- Filter to the fits before you spend AI on personalisation, and certainly before you export.
Scoring before personalising means you never waste a personalised opener, or a send, on a company that was never going to buy. It also keeps your list small enough to respect the low per-inbox volume limits that deliverability demands.
Personalisation at scale with AI
Personalisation at scale is writing a genuinely specific message for every row of a list without writing each one by hand. This is the AI step in ReplyLabs: one prompt, applied to every row, with each row's columns substituted in. Because the model runs server-side rather than as a spreadsheet function, the six-minute Apps Script limit never applies and one prompt can fill an opener for fifty rows or fifty thousand.
A good personalisation prompt references the enriched columns, not just the name:
Write a one-line cold-email opener for
{{First name}}at{{Company}}. Reference one specific detail from this about text:{{About}}. One sentence, no greeting, under 25 words. If the about text is empty, write a warm generic opener that mentions{{Company}}.
A few habits keep the output usable across thousands of rows:
- Reference columns by header, using merge fields like
{{Company}}so each row gets its own value rather than one hard-coded answer. - Give a fallback rule for blank inputs, so the model never invents facts when a cell is empty.
- Constrain the format tightly: one sentence, no greeting, a word limit. Tight output is easier to drop into a template.
- Sample twenty rows first, read every one, fix the prompt, then run the full list. Most prompt problems surface in the first twenty rows.
AI pricing is the provider's raw cost times 1.25 plus a small base fee per succeeded row, shown in the cost preview before you run. On higher tiers you can bring your own AI key and pay only the raw provider rate.
The end-to-end workflow
Each step feeds the next, and because it all happens in one sheet there is no exporting and re-importing between tools. A typical run looks like this:
- Build the list. Get your prospects into a sheet as rows: name, company, title, email, domain.
- Verify the emails. Run the Verify step and filter to deliverable addresses. Dead rows are dropped before they can bounce.
- Enrich and scrape. Pull company facts and page content into new columns so the AI step has something real to work with.
- Score against your ICP. Run an AI scoring prompt and filter to the fits.
- Personalise with AI. Write one opener prompt that references the enriched columns, sample twenty rows, then run the full list.
- Export to your sender. Take the verified, scored, personalised columns into your ESP or sequencer and send from your warmed, authenticated domains.
ReplyLabs owns steps one through five. Step six is yours. The division is deliberate: the sheet is where list quality and personalisation are won, and your sending platform is where deliverability and reply handling live.
You can run these as separate steps or chain them as a multi-step pipeline (Verify, then Scrape, then AI) so a list flows from raw export to send-ready in one pass. New accounts start with $20 of free credit, which is enough to take a real list all the way through the workflow. To set up your first run, see getting started.
Why this beats a generic mail merge
A mail merge drops a name into a template and calls it personalised. Every recipient can tell. The difference between a 3% reply rate and a 10% one is rarely the copy; it is the list. A list that has been verified (so it actually arrives), scored against a real ICP (so it reaches people who might care), and personalised on scraped facts (so the opener could only have been written for them) does the work that the copy alone cannot.
That is the whole argument for preparing in a spreadsheet. The send is mechanical. The preparation is where the leverage is, and the spreadsheet is where the preparation is easiest to do, inspect and filter.
Common questions
Can ReplyLabs send my cold emails for me?
No. ReplyLabs prepares the list inside Google Sheets: verify, scrape, enrich, ICP-score and AI-personalise. You export the finished columns and send through your own ESP or sequencer. Sending, warm-up and reply handling are not part of ReplyLabs.
Do I still need email verification if my data provider says the emails are valid?
Yes. Provider data goes stale, and bounces are the single worst signal for your sender reputation. Verifying in the sheet at $0.01 per email and filtering to deliverable rows protects the domain you send from. See email verification in Google Sheets.
How does ReplyLabs help deliverability if it does not send?
Indirectly but decisively. The list-side deliverability step is verification: removing addresses that would bounce. Authentication, domain warm-up and volume limits live in your sending platform, but a clean, verified list is what keeps that setup from being torched on the first send.
What does a full run cost?
You pay per step, only for rows that succeed: verification at $0.01 per email, scraping from $0.005 per URL, and AI at the provider rate times 1.25 plus a small base fee. Every run shows a cost preview for your exact row count before it starts, and new accounts get $20 of free credit.
Is ReplyLabs affiliated with reply.io?
No. ReplyLabs is a separate product, built by Empra Consultancy LTD, and is not affiliated with reply.io. You can read more about the product on the ReplyLabs home page.