All case studies
SaaS / Developer ToolsFebruary 18, 2026·12 min read

Building Qverio: Shipping a Real-Time Email Verification SaaS From Scratch

The full technical story — SMTP pipelines, catch-all domains, queue architecture, and what I'd do differently

3

Result types: Deliverable, Undeliverable, Risky

High

Verification accuracy

3

Verification modes: single, bulk, recurring

2

Browser extensions: Chrome + Firefox

Soumik Sengupta

Soumik Sengupta

Founder · Full-Stack Developer · Built Qverio

Visit Qverio

Key Takeaways

  • 1SMTP verification sounds simple — connect, send RCPT TO, read the response. It isn't. Rate limiting, catch-all domains, and greylisting add layers of complexity that took months to handle properly.
  • 2Catch-all domains (~15–20% of business email) accept any address regardless of whether the mailbox exists. You need risk scoring, not just SMTP results.
  • 3Separate your queue workers from your web workers. They have completely different scaling profiles — web handles traffic spikes, queue workers handle sustained throughput.
  • 4Track credit balances in your own database, not Stripe. Stripe is the source of truth for billing; your database is the source of truth for balances.
  • 5Launch with a smaller MVP than feels comfortable. The features I spent the most time building pre-launch were the ones users cared about least.
SaaSLaravelRedisEmailAPIPHP

The Problem: Bad Email Addresses Are Quietly Destroying Deliverability

Email lists decay at roughly 22% per year. People change jobs, abandon addresses, and give fake emails at signup. If you send to a list with 5% invalid addresses, most email service providers will throttle or block your sending domain. Your legitimate emails — order confirmations, password resets, actual customer communication — start landing in spam or bouncing entirely. The damage compounds silently over months before most teams notice.

Existing tools were often expensive for individual users and small teams, and almost none offered convenient one-click verification while you're actively prospecting in a browser tab. I wanted something that worked at the point of use — not just in bulk upload workflows.

Why I Built Qverio

The immediate trigger was a client project: a B2B sales team that had imported 40,000 contacts from LinkedIn into their CRM and wanted to email all of them before a product launch. Running that list through an existing tool returned results, but the interface for reviewing and acting on the results was clunky. More importantly, the sales reps who were adding new contacts daily had no way to verify emails inline — they had to remember to run bulk checks weekly.

I decided to build a verification tool with a good API, a browser extension for real-time lookup, and pricing that didn't penalise individual users doing small volumes.

Technical Architecture

The backend is Laravel, running on a dedicated server separate from the queue workers. This separation is intentional and important — web requests and email verification jobs have completely different resource profiles. A web request must respond in milliseconds. An SMTP verification handshake might take 2–5 seconds per domain on first contact. Mixing them on the same process pool would starve the web tier during verification load spikes.

Verification: Using a Specialist API

Building raw SMTP verification infrastructure from scratch means solving a very deep set of problems: rate limiting at major providers, catch-all domain detection, greylisting, IP reputation management, and more. These are infrastructure problems — not product problems. Solving them well takes months and ongoing maintenance.

The right call was to integrate with a dedicated email verification API for the actual verification step. This gave Qverio access to professional-grade accuracy from day one — including catch-all detection and multi-layer validation — while allowing the engineering focus to go where the real product value is: the SaaS layer built around verification.

That SaaS layer is where Qverio earns its place. The verification API is a commodity; the credit billing system, bulk CSV processing, recurring schedule engine, REST API with API key management, browser extensions, usage analytics, and verification log are not. Those are the features that make Qverio a usable product rather than a raw API call.

The three results every verification returns — Deliverable,Undeliverable, or Risky — map directly to actionable decisions: send, skip, or send with caution. The dashboard and bulk exports are built around these three states to make triage fast.

Queue Architecture: Separating Bulk from Real-Time

Qverio handles two fundamentally different verification workloads. A single-address lookup from the API — used at a signup form, or from the browser extension — must respond quickly because a user is waiting. A bulk CSV upload with thousands of addresses can process asynchronously over several minutes. Mixing these in a single queue lets bulk jobs starve real-time requests.

Laravel's queue system handles this naturally: different job types are dispatched to separate queues with different worker priorities, so a large bulk job never delays an inline API lookup. The bulk verification dashboard shows real-time progress as the job processes — row counts, deliverable/undeliverable/risky tallies, and export availability.

Recurring verification jobs add a third pattern: scheduled re-verification of existing lists on a user-defined cadence. These run at off-peak times to avoid competing with interactive traffic.

Credit Billing: A Lesson in Database vs Stripe

Qverio uses a credit-based billing model — you buy credits, each verification costs one credit. The implementation lesson most people learn the hard way: Stripe is the source of truth for billing events. Your database is the source of truth for credit balances. Never conflate the two.

Credits are stored and decremented in a database column with a database-level transaction that prevents double-spending. Stripe webhooks trigger credit top-ups when payments complete. The user-facing balance is always read from the database, never from Stripe. This gives complete flexibility to issue promotional credits, handle refunds, or add referral bonuses without touching billing infrastructure.

The Browser Extensions

The Chrome and Firefox extensions were built to solve the inline use case: a sales rep in Gmail or LinkedIn who wants to verify an email address without leaving the page. The extension adds a right-click context menu item — "Verify with Qverio" — that sends the selected text to the API and displays the result (Valid / Invalid / Risky / Catch-all) in a small popup. No copy-paste, no tab switching, no uploading a CSV.

Results and Honest Lessons

The queue architecture keeps real-time API lookups snappy while bulk jobs run in the background without contention. The credit billing system gives complete visibility into usage — the verification log shows every check with its result and timestamp, and exports are available for any subset of results.

The lesson that shaped the product roadmap: the browser extensions turned out to be one of the most valuable features for day-to-day users. Being able to right-click any email address and verify it without leaving the current tab — no CSV, no copy-paste, no dashboard tab — is where Qverio earns its place in a daily workflow. Building the extension early, rather than treating it as a future nice-to-have, was the right call.

The credit billing model is deliberately simple: credits never expire, you only pay for what you use, and the Flex Pack gives new users a low-commitment way to test accuracy before committing to a subscription. Track credit balances in your own database with a database-level transaction to prevent double-spending — Stripe is authoritative for billing events, your database is authoritative for balances.

Tech Stack

LaravelPHPRedisMySQLStripeChrome ExtensionFirefox Add-onREST API

Frequently Asked Questions

How does email verification work technically?
Email verification runs through multiple validation layers: syntax checking (RFC 5322 format), DNS/MX lookup to confirm the domain has mail servers, and deep verification to check whether the specific mailbox is deliverable. Results are classified as Deliverable, Undeliverable, or Risky — the Risky category covers addresses where verification returns ambiguous signals, such as catch-all domains that accept any address regardless of whether the mailbox exists.
What is a catch-all email domain and how does Qverio handle it?
A catch-all domain is configured to accept email for any address at that domain, even if the specific mailbox doesn't exist. This means SMTP verification always returns a positive result, making it impossible to determine if the specific address is real. Qverio flags these addresses as 'Risky/Catch-all' rather than Valid, and applies additional scoring based on domain age, MX provider reputation, and historical data patterns to give a confidence rating.
What is the difference between real-time email verification and bulk verification?
Real-time verification checks a single email address on demand — used at signup forms to prevent bad emails entering your database in the first place. It must respond in under 200ms to avoid impacting form submission UX. Bulk verification processes a list of emails (from hundreds to millions) asynchronously through a queue, prioritizing throughput over response time. Qverio handles both use cases through separate queue tiers and a REST API.
Why does email bounce rate matter for deliverability?
Email service providers (Gmail, Outlook, Yahoo) monitor the bounce rate of your sending domain. A hard bounce rate above 2–5% signals that you're sending to low-quality lists, which damages your sender reputation score. Once your reputation drops, legitimate emails start landing in spam or get rejected entirely — affecting every email you send, not just campaigns. Verifying your list before sending keeps bounce rates under 1% and protects deliverability.
What makes Qverio's pricing model different?
Qverio offers both one-time credit packs and monthly subscriptions — the Flex Pack ($19 for 500 credits) gives new users a no-commitment way to test accuracy before subscribing. Credits never expire on the subscription plans. The pricing is designed to work for individuals and small teams who don't need enterprise volumes, not just high-volume senders.

Need something built?

I build SaaS products, web applications, and APIs for clients worldwide — the same way I built Qverio. Get a free quote with no obligation.

Get a free quote

More Case Studies