Skip to content

feat(enrichment): add ZeroBounce, NeverBounce, and MillionVerifier email verification#4854

Open
waleedlatif1 wants to merge 4 commits into
stagingfrom
waleedlatif1/email-verify-builtwith-enrichment
Open

feat(enrichment): add ZeroBounce, NeverBounce, and MillionVerifier email verification#4854
waleedlatif1 wants to merge 4 commits into
stagingfrom
waleedlatif1/email-verify-builtwith-enrichment

Conversation

@waleedlatif1
Copy link
Copy Markdown
Collaborator

Summary

  • Add three email-verification integrations — ZeroBounce, NeverBounce, and MillionVerifier (tools, blocks, icons, hosted-key support, and BYOK wiring), mirroring the existing Findymail/Prospeo pattern
  • Add an Email Verification table enrichment that runs a verifier waterfall (ZeroBounce → NeverBounce → MillionVerifier), surfacing a normalized status + deliverable
  • These are Clay's most popular bounce/verification providers (ZeroBounce is Clay's default verifier) — closes the email-verification gap, a category Sim previously had nothing in

Type of Change

  • New feature

Testing

Tested manually — tsc --noEmit clean (0 errors), Biome clean, 28/28 enrichment + hosting tests passing, api-validation gate passing. Each integration independently validated against the providers' live API docs (endpoints, auth params, status vocabularies, response fields, error handling).

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 3, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped Jun 3, 2026 1:21am

Request Review

@cursor
Copy link
Copy Markdown

cursor Bot commented Jun 3, 2026

PR Summary

Medium Risk
Touches hosted billing (per-credit cost), external API calls, and enrichment waterfall behavior; mistakes could mischarge workspaces or return wrong deliverability verdicts, but the pattern matches existing sales/enrichment tools.

Overview
Adds ZeroBounce, NeverBounce, and MillionVerifier as first-class workflow integrations: each gets verify-email and get-credits tools, workflow blocks, hosted-key pricing/rate limits, BYOK workspace keys, docs, and catalog/landing wiring (icons, integrations.json, tool nav).

Introduces an Email Verification table enrichment that waterfalls those three verify tools (ZeroBounce → NeverBounce → MillionVerifier), normalizing responses to shared status and deliverable fields and skipping to the next provider when a result is missing or unknown.

Reviewed by Cursor Bugbot for commit f62d59a. Configure here.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Jun 3, 2026

Greptile Summary

This PR adds three new email verification integrations — ZeroBounce, NeverBounce, and MillionVerifier — each with a verify-email tool, get-credits tool, hosted-key config, block definition, BYOK wiring, and documentation. An Email Verification table enrichment is also added, running a waterfall across the three providers (ZeroBounce → NeverBounce → MillionVerifier) and surfacing a normalized status + deliverable result.

  • Three new tool sets: each provider ships verify_email.ts, get_credits.ts, hosting.ts, types.ts, and an index.ts, registered in the global tool and block registries.
  • Email Verification enrichment: waterfall logic where unknown from one provider causes fallthrough to the next; unverified (MillionVerifier-specific) is treated as a terminal result since MillionVerifier is always last.
  • BYOK and hosted-key support: all three providers are added to the BYOKProviderId union, the Zod schema, and the BYOK UI settings page.

Confidence Score: 5/5

Safe to merge — all three tool sets follow the established provider pattern, the previously-identified auth error handling issues are fixed, and the enrichment waterfall logic is correct.

The change is purely additive (new tools, blocks, and one enrichment), doesn't modify any existing logic paths, and mirrors the well-tested Findymail/Prospeo patterns. JSON-parse guards and 200-with-error-envelope detection are consistently applied across all six new tools. The waterfall fallthrough in the enrichment correctly handles each provider's status vocabulary.

No files require special attention.

Important Files Changed

Filename Overview
apps/sim/enrichments/email-verification/email-verification.ts Email Verification enrichment with ZeroBounce → NeverBounce → MillionVerifier waterfall; fallthrough on unknown; unverified (MillionVerifier-only) is correctly terminal since MV is last in the chain.
apps/sim/tools/zerobounce/verify_email.ts ZeroBounce verify_email tool; correctly normalizes catch-allcatch_all, guards JSON parsing with .catch(() => ({})), and handles the 200-with-error-envelope pattern.
apps/sim/tools/zerobounce/get_credits.ts ZeroBounce get_credits tool; correctly parses with .catch(() => ({})) and checks data.error to handle ZeroBounce's 200-with-error-envelope auth failure pattern (previously flagged issue is fixed).
apps/sim/tools/neverbounce/verify_email.ts NeverBounce verify_email tool; guards JSON parsing, checks data.status !== 'success' for the 200-with-error-envelope pattern, maps flags array for role/free-email detection.
apps/sim/tools/millionverifier/verify_email.ts MillionVerifier verify_email tool; STATUS_MAP normalizes provider-specific result codes to shared vocabulary; error handling consistent with other providers in the PR.
apps/sim/blocks/blocks/zerobounce.ts ZeroBounce block with two apiKey subBlocks (mutually exclusive by condition); mirrors the established Findymail/Prospeo pattern for hosted vs BYOK key display.
apps/sim/lib/api/contracts/byok-keys.ts Adds zerobounce, neverbounce, millionverifier to the Zod byokProviderIdSchema enum; matches BYOKProviderId union in tools/types.ts.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Email Verification Enrichment\nInput: email] --> B{ZeroBounce\nverify_email}
    B -->|status = unknown or error| C{NeverBounce\nverify_email}
    B -->|definitive status| R[Return status + deliverable]
    C -->|status = unknown or error| D{MillionVerifier\nverify_email}
    C -->|definitive status| R
    D -->|status = unknown| E[No result / empty cell]
    D -->|any other status incl. unverified| R
Loading

Reviews (2): Last reviewed commit: "fix(zerobounce): handle 200-status API e..." | Re-trigger Greptile

Comment thread apps/sim/tools/zerobounce/get_credits.ts
Comment thread apps/sim/tools/zerobounce/verify_email.ts Outdated
@waleedlatif1
Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1
Copy link
Copy Markdown
Collaborator Author

@cursor review

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit f62d59a. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant