CheckDisposable Emailcheckdisposable.email
Guides · 24 stacks covered

Block disposable email in your stack.

Each guide has a single drop-in code snippet, plus notes on the gotchas specific to that stack (where to put the API key, fail-open vs fail-closed, how the error reaches the UI).

Next.js

TypeScript

Drop a single Route Handler into your Next.js 15 / App Router project. Calls CheckDisposable Email server-side so the API key never reaches the browser. Works with any auth library (Better Auth, NextAuth, Clerk, Supabase).

Read the guide →

Django

Python

Add a form validator that calls CheckDisposable Email before saving the user. Works in any Django version (3, 4, 5). Pairs cleanly with django-allauth or Django's built-in auth.

Read the guide →

Supabase

TypeScript (Deno)

Use a Supabase Edge Function as an Auth Hook. Calls CheckDisposable Email before Supabase creates the user — rejects the signup at the auth layer so no row is ever written to `auth.users`.

Read the guide →

Better Auth

TypeScript

Better Auth fires a `databaseHooks.user.create.before` hook for every signup path — email/password, Google OAuth, magic link, anything. Add a single check to this hook and you cover them all.

Read the guide →

Clerk

TypeScript

Use Clerk's `restrictions` API or a webhook on `user.created` to reject disposable signups before they become full Clerk users. Two patterns depending on whether you want to block at the form or at the API.

Read the guide →

Auth0

JavaScript (Action)

Use an Auth0 Pre User Registration Action. The Action runs synchronously before Auth0 creates the user — return `api.access.deny()` and the signup is rejected at the auth layer.

Read the guide →

Firebase Auth

TypeScript (Cloud Function)

Use a Firebase Cloud Function with the `beforeUserCreated` blocking trigger. The function runs synchronously before Firebase persists the user — throw `HttpsError` to reject.

Read the guide →

AWS Cognito

Python (Lambda)

Attach a Lambda to the `PreSignUp` trigger of your Cognito User Pool. The Lambda runs synchronously and can throw to reject before the user record is written.

Read the guide →

Don’t see your stack? Point your AI at us.

Paste this single prompt into Claude Code, Cursor, Codex, Aider, or Copilot:

Read https://checkdisposable.email/integrate.md and follow the
instructions on that page.

The integrate.md page is written in the second person for an LLM. It tells the AI what to ask you for, what code to add, and what rules to follow.