MailOdds

Google Sheets + MailOdds

Validate email lists directly in your spreadsheets. Clean columns, verify form responses, and maintain list hygiene without leaving Google Sheets.

Setup time: 5-10 min
Difficulty: Beginner
1,000 free validations included

Prerequisites

  • MailOdds account with API key
  • Google Sheets with email column
  • Zapier, Make, or n8n account

Recommended: n8n Templates

We have ready-to-use n8n workflows specifically for Google Sheets. Import a template and start validating in under 2 minutes.

View Google Sheets Templates

Example Workflow

1

Trigger: New Row Added

When a new email is added to your Google Sheet (or a new form response arrives).

2

Action: Validate Email

MailOdds API validates the email address and returns status, action, and sub_status.

3

Action: Update Sheet

Write validation results back to adjacent columns (Status, Action, Sub-Status).

4

Optional: Filter & Notify

Flag invalid emails, send Slack alerts, or route to different sheets based on results.

Zapier: Validate Row Email

JAVASCRIPT
// Zapier Code Step - Validate Email from Google Sheets Row
const response = await fetch('https://api.mailodds.com/v1/validate', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    email: inputData.email // Mapped from Google Sheets column
  })
});

const result = await response.json();

return {
  email: result.email,
  status: result.status,
  action: result.action,
  is_valid: result.action === 'accept',
  reason: result.sub_status || null
};

Make: HTTP Module Setup

JAVASCRIPT
// Make HTTP Module - Validate and Update Sheet
// 1. Google Sheets: Watch Rows trigger
// 2. HTTP Module: POST to https://api.mailodds.com/v1/validate
//    Headers: Authorization: Bearer YOUR_API_KEY
//    Body: { "email": "{{1.email}}" }
// 3. Google Sheets: Update Row
//    Column "Status" = {{2.data.status}}
//    Column "Action" = {{2.data.action}}

Telemetry Export

Pull validation and engagement telemetry into Google Sheets using Apps Script. Call GET /v1/telemetry/summary and append a new row with totals, rates, and credit usage.

Apps Script: Import Telemetry Summary

JAVASCRIPT
function importTelemetry() {
  const API_KEY = PropertiesService.getScriptProperties().getProperty('MAILODDS_API_KEY');
  const response = UrlFetchApp.fetch('https://api.mailodds.com/v1/telemetry/summary', {
    headers: { 'Authorization': 'Bearer ' + API_KEY }
  });
  const data = JSON.parse(response.getContentText());
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Telemetry');
  sheet.appendRow([
    new Date(),
    data.totals.validations,
    data.rates.deliverable,
    data.totals.creditsUsed
  ]);
}

Bulk Results Export

After a bulk validation job completes, import the results into a Google Sheet. Each row includes the email, validation status, action, sub-status, and disposable flag.

Apps Script: Import Bulk Job Results

JAVASCRIPT
function importBulkJobResults(jobId) {
  const API_KEY = PropertiesService.getScriptProperties().getProperty('MAILODDS_API_KEY');
  const response = UrlFetchApp.fetch(
    'https://api.mailodds.com/v1/jobs/' + jobId + '/results',
    { headers: { 'Authorization': 'Bearer ' + API_KEY } }
  );
  const data = JSON.parse(response.getContentText());
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Results');

  // Write headers
  sheet.getRange(1, 1, 1, 5).setValues([[
    'Email', 'Status', 'Action', 'Sub-Status', 'Disposable'
  ]]);

  // Write results
  const rows = data.results.map(r => [
    r.email, r.status, r.action, r.sub_status || '', r.disposable || false
  ]);
  if (rows.length > 0) {
    sheet.getRange(2, 1, rows.length, 5).setValues(rows);
  }
}

Scheduled Report Template

Set up a recurring workflow in n8n or Make to export weekly telemetry reports to a Google Sheet. The workflow runs on a schedule, fetches your summary data, and appends a row automatically.

n8n / Make: Weekly Report to Google Sheets

JAVASCRIPT
// n8n / Make Workflow: Scheduled Google Sheets Report
//
// 1. Schedule Trigger: Every Monday at 9:00 AM
// 2. HTTP Request: GET https://api.mailodds.com/v1/telemetry/summary
//    Headers: Authorization: Bearer YOUR_API_KEY
// 3. Google Sheets: Append Row
//    Sheet: "Weekly Reports"
//    Columns:
//      A: {{ $now.format('yyyy-MM-dd') }}
//      B: {{ $json.totals.validations }}
//      C: {{ $json.rates.deliverable }}
//      D: {{ $json.totals.creditsUsed }}
//      E: {{ $json.totals.sent }}
//      F: {{ $json.rates.open_rate }}
//      G: {{ $json.rates.click_rate }}

Frequently Asked Questions

Troubleshooting

Need more help?

Can't find what you're looking for? We're here to help you get Google Sheets working.

Start Validating Your Spreadsheet Emails

Sign up free and get 1,000 validations to clean your Google Sheets data.