New Playbook: Cold Email Infrastructure Setup Guide

Read Now arrow_forward
Mailsfinder Mailsfinder
Mailsfinder Mailsfinder
Pricing
Compare
Contact
Log In Start Free Trial
Google Sheets + Apps Script

Use Mailsfinder inside Google Sheets with a tiny Apps Script

Mailsfinder does not ship a Workspace Marketplace add-on. It ships a clean REST API. Paste 15 lines of Apps Script into your sheet once, then call Mailsfinder from any cell as if it were a built-in formula. No CSV export, no re-import, no per-seat fee. Setup takes about 5 minutes.

check_circle50 free credits, no card check_circle99% accuracy check_circleNo per-seat charge
table_chart
Sheet1, Column D
=MF_FIND(B2, C2)
NameDomainResult
Sarah Lin acme.io sarah@acme.io
Jay Patel northwind.co jay@northwind.co
Mei Chen flowops.app mei@flowops.app
Rows enriched in this run 487 / 500
Custom function

Used by SDR teams, recruiters, and outbound agencies that live inside Google Sheets

Klients Growth SheetsOps DemandLoop PipelinePro Northwind LumenAI
What you build

Three ways to wire Mailsfinder into Sheets

All three paths use the Mailsfinder REST API. You own the Apps Script, you own the API key, and you decide where it runs.

api

Direct REST API access

Mailsfinder exposes POST /v1/find and POST /v1/verify with a simple JSON body. Send a name plus a domain, get back a verified email and confidence score. Anything that can fetch HTTPS can call it, and Apps Script can fetch HTTPS.

code

Tiny Apps Script wrapper

About 15 lines of JavaScript inside Extensions > Apps Script. Save it once, then call it from any cell as a custom function. Name it whatever you want, MF_FIND or LOOKUP_EMAIL or your team prefix. The function is yours, not a Mailsfinder-published formula.

view_list

Bulk enrichment via array input

For a 500-row list, do not run the formula per cell. The array variant accepts a full range like A2:B501, batches the API calls, and writes the column back in one execution. Stays well under Apps Script time limits and uses fewer quota units.

How it works

Four steps from blank sheet to working formula

No installs, no marketplace approval, no per-seat fee. You paste a function and your sheet can call Mailsfinder.

1

Grab your API key

Log into the Mailsfinder dashboard, open Settings > API, generate a key. The free tier gives you 50 credits to test, which is enough to enrich about 25 contacts end to end.

2

Open Extensions, Apps Script

From inside any Google Sheet, click Extensions then Apps Script. A new tab opens with an empty Code.gs file. That is your scripting surface, bound to this sheet.

3

Paste the wrapper function

Copy the 15-line wrapper from the next section. Replace the placeholder API key with your own (or load it from PropertiesService). Save the script and authorize the UrlFetchApp scope when prompted.

4

Call it from any cell

Back in the sheet, type =MF_FIND(B2, C2) where B2 is the contact name and C2 is the company domain. Sheets fetches the verified email, caches the result, and you drag-fill the column.

The code

Two functions, both yours to own and edit

Here is the wrapper script. Copy it, paste it into Apps Script, replace the API key reference with your own, and save. This is example code you copy into your project. Mailsfinder does not publish or maintain it on your behalf, which means you can rename the function, log to a console, route through a proxy, or add any logic your team needs.

  • check_circle Per-cell variant for ad-hoc lookups, drag-fill a few rows at a time.
  • check_circle Array-input variant for bulk runs, hands a full range to Mailsfinder in one fetch.
  • check_circle PropertiesService keeps the API key out of cell formulas and out of the sheet body.
  • check_circle Editable name. Rename MF_FIND to whatever fits your team convention.
Code.gs
// Per-cell custom function. Use as =MF_FIND(B2, C2)
function MF_FIND(name, domain) {
  if (!name || !domain) return '';
  var key = PropertiesService
    .getScriptProperties()
    .getProperty('MF_API_KEY');
  var res = UrlFetchApp.fetch(
    'https://api.mailsfinder.com/v1/find',
    {
      method: 'post',
      contentType: 'application/json',
      headers: { 'Authorization': 'Bearer ' + key },
      payload: JSON.stringify({ name: name, domain: domain }),
      muteHttpExceptions: true
    }
  );
  var data = JSON.parse(res.getContentText());
  return data.email || data.error || '';
}

// Set the key once: PropertiesService.getScriptProperties().setProperty('MF_API_KEY', 'sk_live_...');

Code.gs (bulk variant)
// Menu-driven bulk run. Tools > Run > enrichRange()
function enrichRange() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange('A2:C501').getValues();
  var leads = range.map(function (row) {
    return { name: row[0], domain: row[1] };
  });
  var key = PropertiesService
    .getScriptProperties()
    .getProperty('MF_API_KEY');
  var res = UrlFetchApp.fetch(
    'https://api.mailsfinder.com/v1/find/batch',
    {
      method: 'post',
      contentType: 'application/json',
      headers: { 'Authorization': 'Bearer ' + key },
      payload: JSON.stringify({ leads: leads }),
      muteHttpExceptions: true
    }
  );
  var data = JSON.parse(res.getContentText());
  var output = data.results.map(function (r) {
    return [r.email || '', r.status || ''];
  });
  sheet.getRange(2, 4, output.length, 2).setValues(output);
}

// Add a time trigger to run this nightly for fresh data

For lists over 200 rows, batch instead of per-cell

A per-cell formula evaluates row by row, which burns Apps Script execution time and trips the per-call 30-second cap. The bulk variant reads a range, posts the whole batch to Mailsfinder in one fetch, and writes the columns back. A 500-row list finishes in under 2 minutes.

  • check_circle Triggered from the Apps Script menu or a custom Sheets menu, not from a cell formula.
  • check_circle Pairs cleanly with time-driven triggers for nightly list refreshes.
  • check_circle Returns email plus status in adjacent columns, ready for filter and sort.
Pricing

Cheaper per enriched row than any Sheets add-on

300,000 credits per cycle on Monthly. No per-seat fee, no marketplace tax, no annual minimum on the entry plan. Plenty for spreadsheet-based enrichment workflows.

Most Popular

Monthly

For SDR teams and recruiters running daily Sheets enrichment.

$9.99 /month
  • check300,000 credits per cycle
  • checkFull Finder, Verifier, Enrichment REST APIs
  • check25,000 exports per month
  • check600 req/min rate limit
  • checkUnlimited Signals
  • checkPriority email support
Start Free Trial

Annual

Lock in 20% savings on a year of credits paid up front.

$7.99 /month

Billed $95.88 per year

  • check300,000 credits per cycle
  • checkFull Finder, Verifier, Enrichment REST APIs
  • check25,000 exports per month
  • check600 req/min rate limit
  • checkUnlimited Signals
  • checkPriority email support
Choose Annual

Lifetime

For agencies running enrichment across many client sheets.

$249 one-time
  • check2,000,000 credits (lifetime pool)
  • checkFinder and Verifier REST APIs
  • check5,000 exports per month
  • check1,000 Enrichment calls per month
  • check25 Signals per month
  • check300 req/min, lifetime access
Get Lifetime

Top-up credit packs for one-off bulk runs

Stack on any plan. Credits never expire. Useful when a client hands you a 100K row sheet.

10K
credits
$5
22K
credits
$9
42K
credits
$14.99
100K
credits
$29
250K
credits
$59
Sheets use cases

Four motions teams run from a single tab

If your team lives in Sheets, you do not need to leave it. The same Apps Script wrapper handles all four scenarios.

download

CRM export enrichment

Export a HubSpot or Salesforce contact view into Sheets, run the bulk script, get a fresh verified email column. Re-upload the cleaned CSV or push it back through a CRM connector. No round-trip to a separate finder tool.

trending_up

SDR target list build

Paste 500 prospect names and company domains into a sheet, run =MF_FIND down column D. Filter on verified status, push the clean rows into your sequencer. The whole motion happens inside one tab.

cleaning_services

Newsletter list hygiene

Keep your subscriber list in Sheets. Run a weekly verify pass with the bulk script, flag bounce-prone and catch-all addresses, suppress them before the next blast. Protects sender reputation without exporting to a separate verifier.

groups

Multi-client agency sheets

Agencies running five SDR sheets per client copy the same wrapper into each project. One Mailsfinder account, one API key, separate sheets per workspace. No per-seat charge per client, no marketplace approval to drag through procurement.

FAQ

Honest answers to the questions Sheets users ask first

Does Mailsfinder have a Google Workspace Marketplace add-on? expand_more
No. Mailsfinder does not ship a Google Workspace Marketplace add-on right now. The product is API-first, with a clean REST endpoint at POST /v1/find and POST /v1/verify. To use it inside Google Sheets, you paste a small Apps Script wrapper (about 15 lines) via Extensions > Apps Script and then call it from any cell like a normal formula. A native add-on is on the longer-term roadmap, but the Apps Script path gives you the same result today and keeps your API key under your own control.
Will sharing a Google Sheet break the Mailsfinder formula? expand_more
Apps Script lives inside the sheet, so collaborators with edit access can see and trigger the function. The API key, if stored in PropertiesService, is bound to the script and not visible to viewers. If you share the sheet with view-only users, they will see the cached output but cannot trigger fresh calls. For agency workflows where many people need to run the formula, host the script as a bound Web App with an internal endpoint so the API key never leaves your environment.
Where is my Mailsfinder API key stored when I use Apps Script? expand_more
The recommended pattern is PropertiesService.getScriptProperties().setProperty('MF_API_KEY', 'your-key'). That stores the key encrypted at the script level, not in the sheet itself. Anyone with edit access to the script container can read it, but viewers of the sheet cannot. For higher-security setups, route the call through a Google Cloud Function or a private Web App so the key stays server-side and Sheets only ever sees the response.
How long does each cell call to Mailsfinder take? expand_more
A typical Find or Verify call returns in 1.5 to 3 seconds depending on how easy the domain is to resolve. Google Sheets caches custom function results, so re-evaluation only happens when inputs change or the sheet is re-opened after a long idle. For a 500-row enrichment, expect roughly 15 to 25 minutes of wall time if you run cells one at a time, or under 2 minutes if you switch to the array-input variant that batches rows in a single fetch.
What about Apps Script execution time limits for bulk runs? expand_more
Apps Script enforces a 6-minute hard limit per execution on consumer Google accounts and 30 minutes on Workspace. A per-cell custom function inherits the 30-second cap per call. For bulk enrichment beyond a few hundred rows, do not run the function from every cell. Instead, write a menu-driven script that loops over the range, batches the API calls (Mailsfinder accepts batch input), and writes results back to the sheet. That keeps you under the per-execution ceiling and uses fewer Apps Script quota units.
Can I schedule re-enrichment on a daily trigger? expand_more
Yes. Apps Script supports time-driven triggers under Triggers > Add Trigger. Point the trigger at a function that reads your sheet range, calls the Mailsfinder REST API in a batch, and writes the latest verified email or status back to the column. A daily cleanup of a 5,000-row list runs comfortably inside the 30-minute Workspace limit and costs roughly 5,000 credits, which is a small fraction of the Monthly 300,000 pool.
How does this compare to the Hunter or Apollo Sheets add-ons? expand_more
Hunter and Apollo both ship Google Workspace Marketplace add-ons with one-click install and built-in formulas. Mailsfinder is API-first and requires the Apps Script paste step, which is roughly 5 minutes of setup. The trade-off is cost and control. Hunter Starter is $49 per month for 500 monthly searches, Apollo paid plans start around $59 per seat. Mailsfinder Monthly is $9.99 for 300,000 credits with no per-seat fee, which is a much lower cost per enriched contact once you cross a few hundred lookups per month.
Is the Mailsfinder API GDPR compliant for EU data? expand_more
Yes. Mailsfinder is GDPR-compliant and processes data under a Data Processing Agreement available to all paid customers. When you run Apps Script from a Google Sheet, the request goes from Google servers to the Mailsfinder API, so transit is TLS-encrypted end to end. For EU data specifically, you can add a country filter inside your Apps Script wrapper to skip rows where you lack a lawful basis. B2B work emails generally fall under legitimate interest for outbound under GDPR Article 6(1)(f).

Wire Mailsfinder into your sheet in 5 minutes

Get 50 free credits, paste the 15-line wrapper, and run your first enrichment from inside Sheets today. No card required. Move to Monthly at $9.99 when you outgrow the free tier.