Choose the integration method that fits your workflow
See how teams use PureMail integrations
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
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
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
Get instant notifications in your team chat when verification jobs complete, credits run low, or API keys are used.
Job Complete → Webhook → Slack Message
Subscribe to the events that matter to your workflow
Triggered when an email verification job finishes successfully
Triggered when a verification job encounters an error
Triggered when your credit balance falls below your threshold
Triggered when credits are purchased or added to your account
Triggered when a payment completes successfully
Complete guide to implementing webhooks in your application
Go to Dashboard → Webhooks and click "Create Webhook"
Enter the URL where you want to receive webhook events (e.g., https://api.yourapp.com/webhooks/puremail)
Choose which events should trigger this webhook (job.completed, job.failed)
Copy the signing secret and store it securely - you'll need it to verify webhook signatures
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"
}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.
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');
});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', 200If your endpoint returns a non-2xx status code or times out, PureMail will automatically retry the delivery with exponential backoff:
Your endpoint should respond within 30 seconds to avoid timeouts.
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.
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
You can use these fields in your Make scenario:
data.jobIdUnique job identifier
data.fileNameOriginal file name
data.totalEmailsTotal emails processed
data.validCountNumber of valid emails
data.invalidCountNumber of invalid emails
data.jobUrlDirect link to results