Google Sheets + MailOdds
Validate email lists directly in your spreadsheets. Clean columns, verify form responses, and maintain list hygiene without leaving Google Sheets.
Prerequisites
- MailOdds account with API key
- Google Sheets with email column
- Zapier, Make, or n8n account
How to Connect
Connect Google Sheets to MailOdds through any of these automation platforms:
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 TemplatesExample Workflow
Trigger: New Row Added
When a new email is added to your Google Sheet (or a new form response arrives).
Action: Validate Email
MailOdds API validates the email address and returns status, action, and sub_status.
Action: Update Sheet
Write validation results back to adjacent columns (Status, Action, Sub-Status).
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
JAVASCRIPTfunction 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
JAVASCRIPTfunction 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.