Connect PureMail to Your Workflow

Integrate PureMail with 7,000+ Apps

Automate your email verification workflow with webhooks, REST API, and native integrations with your favorite tools.

No-Code Integration with Make.com

Connect PureMail to 1,000+ apps in minutes without writing any code

Three Ways to Integrate

Choose the integration method that fits your workflow

Webhooks
Real-time HTTP notifications sent to your endpoint
  • Instant notifications when events occur
  • HMAC signatures for security
  • Automatic retries with exponential backoff
  • Subscribe to 5+ event types
REST API
Programmatic access to verify emails
  • Simple API key authentication
  • 100 requests per minute per key
  • Single & bulk verification endpoints
  • JSON responses with detailed results
Zapier
No-code automation with 7,000+ apps
  • Connect to Google Sheets, Slack, HubSpot, etc.
  • No coding required
  • Pre-built templates
  • Multi-step workflows

Popular Integration Use Cases

See how teams use PureMail integrations

CRM Auto-Verification
Salesforce, HubSpot, Pipedrive

Automatically verify email addresses when new contacts are added to your CRM. Keep your database clean and improve campaign deliverability.

New Contact → Verify Email → Update CRM Field

Form Validation
Typeform, Google Forms, Jotform

Verify emails submitted through forms in real-time. Stop fake signups and improve lead quality before they enter your system.

Form Submit → Verify → Send to Database

Pre-Campaign Cleaning
Mailchimp, SendGrid, ActiveCampaign

Clean your email lists before launching campaigns. Remove bounces, catch-alls, and disposable emails to protect your sender reputation.

Upload List → Verify → Export Clean List

Team Notifications
Slack, Microsoft Teams, Discord

Get instant notifications in your team chat when verification jobs complete, credits run low, or API keys are used.

Job Complete → Webhook → Slack Message

Available Webhook Events

Subscribe to the events that matter to your workflow

job.completed

Triggered when an email verification job finishes successfully

Active

job.failed

Triggered when a verification job encounters an error

Active

credits.low

Triggered when your credit balance falls below your threshold

Coming Soon

credits.added

Triggered when credits are purchased or added to your account

Coming Soon

payment.succeeded

Triggered when a payment completes successfully

Coming Soon

Developer Resources

Everything you need to integrate PureMail

API Documentation

Complete API reference with code examples in multiple languages

Webhook Guide

Learn how to set up and secure webhooks for your application

Integration Tutorials

Step-by-step guides for popular platforms and frameworks

Webhook Integration Guide

Complete guide to implementing webhooks in your application

Quick Start

1. Create a Webhook Endpoint

Go to Dashboard → Webhooks and click "Create Webhook"

2. Configure Your Endpoint URL

Enter the URL where you want to receive webhook events (e.g., https://api.yourapp.com/webhooks/puremail)

3. Select Events to Subscribe

Choose which events should trigger this webhook (job.completed, job.failed)

4. Save Your Signing Secret

Copy the signing secret and store it securely - you'll need it to verify webhook signatures

Webhook Payload Structure

All webhooks are sent as HTTP POST requests with a JSON payload:

{
  "event": "job.completed",
  "data": {
    "jobId": "job_abc123",
    "fileName": "email_list.csv",
    "totalEmails": 1000,
    "validCount": 850,
    "invalidCount": 100,
    "riskyCount": 40,
    "unknownCount": 10,
    "completedAt": "2025-01-15T10:30:00Z",
    "jobUrl": "https://puremail.dev/dashboard/history/job_abc123"
  },
  "timestamp": "2025-01-15T10:30:00Z",
  "userId": "user_xyz789"
}
Verifying Webhook Signatures

Every webhook request includes an HMAC SHA-256 signature in the X-PureMail-Signature header. Always verify this signature to ensure the request is authentic.

Node.js Example

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

// Express.js example
app.post('/webhooks/puremail', (req, res) => {
  const signature = req.headers['x-puremail-signature'];
  const payload = JSON.stringify(req.body);

  if (!verifyWebhookSignature(payload, signature, process.env.WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature');
  }

  // Process the webhook
  const { event, data } = req.body;

  if (event === 'job.completed') {
    console.log(`Job ${data.jobId} completed with ${data.validCount} valid emails`);
  }

  res.status(200).send('OK');
});

Python Example

import hmac
import hashlib

def verify_webhook_signature(payload: str, signature: str, secret: str) -> bool:
    expected_signature = hmac.new(
        secret.encode('utf-8'),
        payload.encode('utf-8'),
        hashlib.sha256
    ).hexdigest()

    return hmac.compare_digest(signature, expected_signature)

# Flask example
@app.route('/webhooks/puremail', methods=['POST'])
def handle_webhook():
    signature = request.headers.get('X-PureMail-Signature')
    payload = request.get_data(as_text=True)

    if not verify_webhook_signature(payload, signature, os.getenv('WEBHOOK_SECRET')):
        return 'Invalid signature', 401

    data = request.json
    event = data['event']

    if event == 'job.completed':
        print(f"Job {data['data']['jobId']} completed")

    return 'OK', 200
Automatic Retries

If your endpoint returns a non-2xx status code or times out, PureMail will automatically retry the delivery with exponential backoff:

  • Attempt 1: Immediate
  • Attempt 2: After 1 minute
  • Attempt 3: After 5 minutes
  • Attempt 4: After 15 minutes
  • Attempt 5: After 1 hour (final attempt)

Your endpoint should respond within 30 seconds to avoid timeouts.

Best Practices
  • Always verify signatures - Never trust webhook data without signature verification
  • Respond quickly - Return a 200 status immediately, then process the event asynchronously
  • Handle duplicates - Use the event timestamp or jobId to detect and ignore duplicate deliveries
  • Use HTTPS - Webhook endpoints must use HTTPS for security
  • Monitor delivery history - Check the dashboard regularly to ensure webhooks are being delivered successfully
Integrating with Make.com (No-Code)

Connect PureMail to 1000+ apps using Make.com (formerly Integromat) without writing any code. Perfect for automating workflows like sending notifications, updating spreadsheets, or triggering other actions when verification jobs complete.

1Create a Webhook in Make

  • • Go to make.com and create a new scenario
  • • Click the "+" button and search for "Webhooks"
  • • Select "Custom webhook" module
  • • Click "Create a webhook" and give it a name (e.g., "PureMail Job Completed")
  • • Copy the webhook URL provided by Make

2Configure Webhook in PureMail

  • • Go to your PureMail Dashboard → Webhooks
  • • Click "Create Webhook"
  • • Paste the Make webhook URL
  • • Select events to trigger (e.g., "job.completed")
  • • Click "Create" and save the webhook secret

3Test & Determine Data Structure

  • • In Make, the webhook will show "Waiting for webhook call..."
  • • In PureMail, verify a few emails to trigger the webhook
  • • Make will receive the webhook data automatically
  • • Click "Determine data structure" to map the fields

4Build Your Automation

Add modules after the webhook to automate your workflow:

Slack Notification

Add Slack module → "Create a Message" with job statistics

Google Sheets Export

Add Google Sheets module → "Add a Row" to log verification results

Email Report

Add Email module → "Send an Email" with job summary

CRM Update

Update your CRM (Salesforce, HubSpot, etc.) with validated emails

Available Webhook Data Fields

You can use these fields in your Make scenario:

data.jobId

Unique job identifier

data.fileName

Original file name

data.totalEmails

Total emails processed

data.validCount

Number of valid emails

data.invalidCount

Number of invalid emails

data.jobUrl

Direct link to results

Ready to Integrate?

Start for free with 150 credits. No credit card required.