Salesforce email verification

Verify Lead and Contact emails in Salesforce

Call Verifly from an Apex HttpRequest callout or a Flow HTTP action to verify Lead and Contact emails before insert. Undeliverable, disposable, and role addresses are flagged or blocked at the source.

Apex HttpRequest to VeriflyAPI
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Verifly/api/v1/verify?email=' + EncodingUtil.urlEncode(email, 'UTF-8'));
req.setMethod('GET');
HttpResponse res = new Http().send(req);
// parse res.getBody() -> result: deliverable | undeliverable | risky

Real-time SMTP mailbox checks

Single, batch, and async bulk verification

Disposable, role account, and catch-all detection

Pay-as-you-go credits with no subscription lock-in

Search fit

Built for Salesforce email verification

Use Verifly when you need a simple API, predictable pricing, and clean JSON results before emails hit your product, CRM, or campaign tool.

Verify a Lead email with an Apex callout before insert
Call Verifly from a Flow HTTP action on record create
Flag undeliverable Contacts with a verdict field for review
Batch-verify existing Leads and Contacts through the bulk API

Why bad emails cost you inside Salesforce

Salesforce validates email fields for format only. A Lead can be created from a web-to-lead form, an import, or an API integration with a perfectly shaped address that has no mailbox behind it. That bad record then flows into campaigns, Pardot/Account Engagement journeys, and rep outreach, where it bounces, skews your engagement metrics, and burns your sending domain's reputation.

Because Salesforce sits at the center of your revenue data, a dirty email field is expensive: reps waste time on unreachable prospects, marketing pays to email dead addresses, and your reporting is quietly wrong. The cheapest place to catch this is at the moment a Lead or Contact is created, before the record fans out to every downstream system.

Verifly runs a live SMTP mailbox check and returns a deliverable / undeliverable / risky verdict with disposable, role, and catch-all flags. Salesforce can call it from an Apex HttpRequest callout in a trigger handler or from a Flow HTTP Callout action — both hit the same endpoint.

Verify a Lead email with an Apex callout

  1. Grab a free Verifly key at verifly.email/api/v1/autonomous/register — 100 credits, no card, no captcha.
  2. Create a Named Credential named Verifly pointing at https://verifly.email with a Bearer vf_ authorization header, so the key never sits in code.
  3. Add https://verifly.email to Remote Site Settings if you aren't routing solely through the Named Credential.
  4. Write an @future (callout=true) or Queueable Apex method that verifies the email, since callouts can't run inline in a before-insert trigger.
  5. Store the verdict on a custom field (Email_Status__c) and, if you want a hard gate, block or reassign undeliverable records.
VeriflyService.cls
public class VeriflyService {
    @future(callout=true)
    public static void verifyLead(Id leadId, String email) {
        HttpRequest req = new HttpRequest();
        req.setEndpoint('callout:Verifly/api/v1/verify?email='
            + EncodingUtil.urlEncode(email, 'UTF-8'));
        req.setMethod('GET');
        req.setTimeout(20000);

        HttpResponse res = new Http().send(req);
        if (res.getStatusCode() != 200) {
            return; // fail open: don't wipe data on a verifier outage
        }

        Map<String, Object> body =
            (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
        String verdict = (String) body.get('result');

        Lead ld = new Lead(Id = leadId, Email_Status__c = verdict);
        if (verdict == 'undeliverable' || body.get('disposable') == true) {
            ld.Email_Status__c = 'undeliverable';
        }
        update ld;
    }
}

The no-code path: a Flow HTTP Callout

If you'd rather stay declarative, a record-triggered Flow can do the same job. Add an HTTP Callout action (or an External Service) pointing at the Verifly Named Credential, pass the email as the query parameter, and map the returned result into your Email_Status__c field. A Decision element then routes undeliverable records to review or reassignment. This keeps verification in the hands of your ops admin without any Apex.

Flow HTTP Callout request
GET  https://verifly.email/api/v1/verify?email={!$Record.Email}
Authorization: Bearer vf_your_api_key    (via the Verifly Named Credential)

// Response body
{
  "email": "prospect@example.com",
  "result": "deliverable",   // map to Email_Status__c
  "disposable": false,
  "role": false,
  "catch_all": false
}

FAQ

Frequently asked questions

Can I call Verifly directly from a before-insert trigger?

Not inline — Salesforce disallows callouts during a trigger's synchronous DML. Run the callout from an @future(callout=true) method, a Queueable, or a record-triggered Flow's HTTP action, then write the verdict back to the record. The examples above use the @future pattern.

Should I store the key in Apex?

No. Use a Named Credential (the examples reference callout:Verifly) so the Bearer vf_ key is managed by Salesforce and never committed in code or metadata. Add the domain to Remote Site Settings only if you call it without the Named Credential.

Do I block undeliverable Leads or just flag them?

That's your call. Many orgs write the verdict to an Email_Status__c field and let reporting and assignment rules act on it, rather than hard-blocking, so no legitimate Lead is lost to a false negative. Flagging keeps the record and the audit trail intact.

How do I verify Leads and Contacts already in Salesforce?

Run a Batch Apex or scheduled job that collects existing emails and posts them to POST /verify/batch, then update Email_Status__c in bulk. Verifly's async pipeline handles large volumes in a single job.

What about catch-all corporate domains?

Catch-all domains accept mail for any address, so a specific mailbox can't be confirmed. Verifly flags them as catch-all / risky instead of guessing, and you decide whether reps should still work those Leads.

What does verifying in Salesforce cost?

Pricing is pay-as-you-go from $2 per 1,000 checks down to $0.60 per 1,000 at volume, with 100 free credits to start and no monthly minimum, so you only pay for the records you actually verify.