MailOdds
n8n

n8n + MailOdds

Self-hosted workflow automation with full API access. Open-source, extendable, and developer-friendly.

Setup time: 10-15 min
Difficulty: Intermediate
1,000 free validations included

Prerequisites

  • MailOdds account (free tier works)
  • API key from dashboard
  • n8n instance (cloud or self-hosted)
  • Familiarity with n8n expressions

Works with: PostgreSQL MySQL MongoDB Redis Webhook Slack Discord Telegram GitHub GitLab +2 more

Self-Hosted

Run n8n on your own infrastructure with full control over your data.

Open Source

Fully open-source with an active community and extensible architecture.

Secure

Your API keys never leave your server. Full audit trail of all operations.

Workflow Templates

Import directly into n8n. Configure credentials and go.

Google Drive Auto-Validation

Popular

Drop CSV/Excel into a folder, get validated + rejected + manual-review files sorted automatically.

Google Sheets Validation

Launch jobs from Sheets via webhook, get results merged back with full statistics.

Single Email Validation

Validate one email via HTTP Request node. Perfect for form submissions.

Bulk Job with Webhook

Submit list, receive webhook when done. For large lists without timeout issues.

View detailed setup guides

Quick Setup

1

Create MailOdds Credentials in n8n

In n8n, go to Credentials and create a new "Header Auth" credential with your MailOdds API key.

Get your API Key
// n8n HTTP Header Auth Credentials

Name: MailOdds API
Header Auth:
  Name: Authorization
  Value: Bearer YOUR_API_KEY
2

Add HTTP Request Node

Add an HTTP Request node and configure it to call the MailOdds API. Select your credentials and set up the request body.

3

Process Results

Use IF nodes to route based on validation results. The response includes status, action, and detailed check information.

HTTP Request Node: Validate Email

JSON
Try Demo |
{
  "nodes": [
    {
      "name": "Validate Email",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://api.mailodds.com/v1/validate",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "email",
              "value": "={{ $json.email }}"
            }
          ]
        },
        "options": {}
      }
    }
  ]
}
Tip: Import this JSON directly into n8n by pasting it in the workflow editor.

HTTP Request Node: Create Bulk Job

JSON
{
  "nodes": [
    {
      "name": "Create Bulk Job",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "POST",
        "url": "https://api.mailodds.com/v1/jobs",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ emails: $json.emails, callback_url: $json.webhook_url }) }}"
      }
    }
  ]
}

Webhook Node: Receive Job Completion

JSON
{
  "nodes": [
    {
      "name": "Job Completed Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "mailodds-job-completed",
        "httpMethod": "POST",
        "responseMode": "onReceived",
        "responseData": "allEntries"
      }
    }
  ]
}
Note: Set this webhook URL as the callback_url when creating bulk jobs.

Example Workflow

// Complete n8n Workflow Example
// 1. Trigger: Webhook or Schedule
// 2. Get emails from your data source
// 3. Validate with MailOdds
// 4. Filter/route based on results
// 5. Update your database or send notifications

Workflow Steps:
1. Webhook Trigger (receive form submission)
   ↓
2. HTTP Request (POST /v1/validate)
   ↓
3. IF Node (check action === "accept")
   ├─ True → Add to CRM
   └─ False → Send alert to Slack

IF Node Conditions

Use these expressions in your IF nodes to route based on validation results:

Valid Emails
{{ $json.result.action === 'accept' }}
Risky (catch-all)
{{ $json.result.action === 'accept_with_caution' }}
Invalid Emails
{{ $json.result.action === 'reject' }}
Disposable Email
{{ $json.result.sub_status === 'disposable' }}

Frequently Asked Questions

Troubleshooting

Need more help?

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

Ready to Automate?

Get your API key and start building self-hosted email validation workflows.