Email validation in under 500 ms.

Send an address from your form, sign-up, or backend and get back whether it's valid, disposable, a free or role inbox, gibberish, and whether its domain can receive mail. It's the same identity check GoodInbound Lead Screen runs on every submission, and field checks don't count toward your monthly submissions.

Answers in under 500 ms9,000+ disposable domainsFree plan, no card

One request, every check

POST /api/v1/leadscreen/checks

curl https://goodinbound.com/api/v1/leadscreen/checks \
  -H "Authorization: Bearer $GOODINBOUND_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fields": {"email": "jane@mailinator.com"}}'

{
  "action": "screen_out",
  "checks": {
    "identity": { "result": "fail", "summary": "Disposable email" }
  },
  "email": {
    "domain": "mailinator.com",
    "valid": true,
    "disposable": true,
    "free": false,
    "role": false,
    "mx": null,
    "work": false
  }
}

Every check in one response.

One call returns the facts and a result your code can branch on: pass, warn, or fail, with a one-line reason. Your project's Lead Screen settings decide what counts against an address, so the API and your forms agree.

Branch on the result

Facts plus a pass, warn, or fail

curl https://goodinbound.com/api/v1/leadscreen/checks \
  -H "Authorization: Bearer $GOODINBOUND_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fields": {"email": "jane@mailinator.com"}}'

{
  "action": "screen_out",
  "checks": {
    "identity": { "result": "fail", "summary": "Disposable email" }
  },
  "email": {
    "domain": "mailinator.com",
    "valid": true,
    "disposable": true,
    "free": false,
    "role": false,
    "mx": null,
    "work": false
  }
}

Disposable and free providers

Matched against more than 9,000 temporary-inbox domains and 5,000 free providers like Gmail and Outlook.

Role and gibberish addresses

Flags shared inboxes like info@ and sales@, and keyboard mashes before the @.

Mail server and domain age

Checks the domain's MX records, and its registration date when you turn on the new-domains rule.

Fast enough for the form itself.

Checks run at the edge, and mail server lookups are cached per domain. In our production tests the median response came back in about 250 ms, and most of that was the network round trip. That's quick enough to check an address while the visitor is still on the field.

Check on blur

No code beyond the script tag

<script src="https://cdn.goodinbound.com/leadscreen.js"
  data-key="pk_live_..." data-checks="true" async></script>

<script>
  // Each checked email field gets data-leadscreen-check
  // ("allow", "screen_out", or "block") and an event.
  document.addEventListener("leadscreen:check", (event) => {
    console.log(event.detail.email);
  });
</script>

Under 500 ms

Typical field checks answer well under half a second. The optional domain-age lookup takes longer.

Check as they type

Add data-checks to the Lead Screen script and every email field is checked when the visitor leaves it.

Browser or server

Call it from the browser with your publishable key, or from your server with the secret key.

A valid address is one signal of many.

Bots and spammers fill forms with real addresses taken from data leaks. So the same call can also check a phone number, and a full screen adds how the form was filled in, the network it came from, and what the message says.

From an AI agent

check_contact in the MCP server

// MCP tool: check_contact
{
  "email": "sam@northwind.io",
  "phone": "+44 56 0123 4567",
  "country": "GB"
}

// Result
{
  "result": "warn",
  "summary": "VoIP phone number",
  "email": { "valid": true, "work": true, "mx": true },
  "phone": { "valid": true, "line_type": "voip", "country": "GB" }
}

Phone in the same call

Send a phone field alongside the email and get both sets of facts back.

Screen whole submissions

The screens endpoint labels a submission lead, review, spam, junk, or bot, with a reason.

Ask from an AI agent

The check_contact tool in the GoodInbound MCP server runs the same checks.

Google Calendar sync

Block busy time automatically and surface live availability.

Buffer times

Add breathing room before and after meetings without manual cleanup.

Timezone aware

Show the right local slot for every visitor without confusion.

Confirmation emails

Send booking details instantly once a slot is locked in.

Branded scheduling links and widgets.

Share booking pages and widgets that stay in sync with your calendar, handle timezones correctly, and confirm every slot the moment it is reserved.

Book a Consultation
30 min · Google Meet
March 2026
Su
Mo
Tu
We
Th
Fr
Sa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10:00 AM
2:00 PM
4:00 PM
Your Details
Tue, Mar 24 at 2:00 PM · 30 min
Name
Email
Notes
Optional...
Booking confirmed!
Tue, Mar 24 at 2:00 PM · 30 min
Confirmation sent to sarah@company.com
Next

Conditional logic

Reveal the next question from what the visitor already told you.

File uploads

Collect briefs, assets, and supporting documents in the same flow.

Multi-step

Break longer forms into short screens that are easier to finish.

Validation

Catch missing or malformed inputs before the response is stored.

Build forms that adapt.

Create multi-step flows that branch based on answers, collect files, and validate the right fields before anything gets submitted.

Contact Info
Tell us how to reach you
Full Name
Email Address
Company
Company Size
Conditional
50–200
Project Details
Tell us about your project
Budget Range
Select...
Timeline
Select...
Additional Notes
Optional...
Response submitted!
We'll be in touch within 24 hours.
Next

Auto-tagging

Apply tags from answers, event type, or workflow branch automatically.

Activity timeline

See submissions, bookings, and follow-up actions in one stream.

CSV import

Bring existing contacts in without rebuilding your data manually.

Smart search

Filter people by tag, source, or recent activity in seconds.

Keep every contact organized.

Turn every form response and booking into a contact record with tags, history, and enough context for your team to act immediately.

Contact Details
SJ
Sarah Johnson
sarah@company.com
VIP
Active Lead
Activity
Booked consultation
2h ago
Submitted contact form
1d ago

Email triggers

Send confirmations, reminders, and follow-ups from one event.

Tag automation

Segment leads automatically as new activity comes in.

Webhooks

Push bookings and submissions into the tools you already use.

Conditional logic

Branch actions based on answers, timing, or event details.

Automate the busywork.

Trigger follow-ups from submissions and bookings, branch logic based on context, and keep repetitive post-submit tasks off your plate.

Workflow Editor
Form Submitted
Trigger
Send confirmation email
via Resend
Add tag 'Lead'
auto-tag
Wait 2 days
delay step
Send follow-up email
via Resend

Check availability

Query live scheduling windows before you show the next step.

Create bookings

Reserve slots directly from agents or custom application flows.

Submit forms

Post structured responses into your workflows without the widget.

Manage contacts

Read and update people records while your agents operate.

Let your agents handle everything.

Expose the same scheduling, forms, and contact workflows through an API so custom apps and AI agents can do the work programmatically.

Terminal
$curlGET/api/v1/availability/acme
...
fetching
200 OK
{
  "slots": [
    { "start": "2026-03-24T14:00" },
    { "start": "2026-03-24T15:00" }
  ]
}
$curlPOST/api/v1/bookings
201 Created
{
  "id": "bk_a1b2c3d4",
  "status": "confirmed"
}

Up and running in minutes

01

Create your project

Pick a name and slug — it becomes your namespace for forms, event types, and contacts.

02

Build forms & event types

Drag in fields, set availability rules, and brand everything to match your site.

03

Embed & go live

Paste one script tag or share your hosted link. Submissions and bookings flow in instantly.

GoodInbound hosted booking page with date and time slot pickerGoodInbound form builder editing a multi-step quote formGoodInbound workflow templates triggered by forms and bookingsGoodInbound contacts list inside the dashboard
Hosted booking pages
Embeds anywhere — WordPress, Webflow & plain HTML

Free for almost every use case

Unlimited projects on every plan. Pro adds advanced screening, enrichment, and analytics, with extra seats, contacts, and screened submissions when you grow.

MonthlyAnnual 2 months free

Free

Free, spam-filtered contact forms with notifications and workflows.

$0/month

Included features:

  • 500 screened submissions / month
  • 500 contacts
  • 250 workflow runs / month
  • 1 seat
  • Basic screening
  • Unlimited projects, forms, and booking pages
  • Custom CSS and branding removal
  • REST API and MCP access
  • Contact enrichment
  • Analytics

Pro

Advanced spam screening and bigger limits.

$29/month

Everything in Free, plus:

  • 2,500 screened submissions / month
  • 5,000 contacts
  • 5,000 workflow runs / month
  • 3 seats
  • Advanced screening
  • Contact enrichment
  • Analytics with 12-month history
  • Extra seats at $19/seat/mo
  • +3,000 contacts for $30/mo
  • +3,000, 10,000, 25,000 screened submissions for $30, $90, $200/mo
  • +10,000, 30,000, 50,000 analyzed ad visits for $120, $300, $450/mo

Enterprise

For headless volume, security reviews, and custom scale.

Custom

Everything in Pro, plus:

  • Volume pricing
  • SSO and SCIM
  • GDPR DPA and security review
  • EU data residency
  • Custom data retention
  • 99.9% uptime SLA
  • Priority support
  • Invoice billing
  • Onboarding and custom implementations

Frequently asked questions

Syntax, disposable domains (more than 9,000), free providers (more than 5,000), role inboxes like info@, gibberish before the @, and whether the domain has MX records. With the new-domains rule on, it also returns the domain's age. The work field is true for a valid address on a domain that isn't free or disposable and can receive mail.

No. It doesn't probe the mail server for the exact mailbox. That kind of check is slow, often blocked, and unreliable on Gmail and Outlook, which accept every address and bounce later. The API is built for form fills and sign-ups, where the question is whether a real person sent it, not for cleaning a mailing list.

Typical field checks answer in well under 500 ms. Mail server lookups are cached per domain, so repeat domains are faster still. The optional domain-age lookup can take a second or two.

Field checks are included on the free plan and don't count toward your monthly screened submissions. They're rate-limited to 60 a minute per visitor IP and 600 a minute per project.

Yes. Use your publishable key from the browser, or let the Lead Screen script check email fields for you. Use the secret key for calls from your own server.

Take your forms & scheduling to the next level

Create your free account and launch your first form or booking page in minutes. No credit card required.

View documentation
yoursite.com
You write this
<div id="booking"></div>
<script src=
  "https://cdn.goodinbound.com/widgets/booking.js">
</script>
<script>
  GoodInbound.booking({
    projectSlug: "acme",
    eventTypeSlug: "discovery-call",
    container: "#booking"
  });
</script>
Visitors see this
Discovery call
30 min · Google Meet
Mon
16
Tue
17
Wed
18
Thu
19
Fri
20
10:00 AM
11:30 AM
2:00 PM
4:30 PM
Confirm booking