The email drop

Your form, your field, your backend. Two lines of HTML and it verifies as visitors type.

<script src="https://drop.parseapi.com/field.js" data-key="parse_public_YOUR_KEY" defer></script>
<input type="email" name="email" data-parse>

Try it

This is the drop itself, live. Type a typo like billy@gmail.con and watch it catch the domain.

data-parse-status="empty"

What it does

  • Checks the address is real as the visitor types, on pause and on blur.
  • Catches typos with a clickable suggestion. gmail.con becomes Did you mean billy@gmail.com?
  • Blocks disposable addresses and domains that take no mail through the browser's own form validation. No custom error UI to build.
  • Your input stays yours. Same markup, same CSS, same name attribute, same value in the POST your backend already reads.

The contract

The script stamps data-parse-status on the input: empty, unchecked, checking, valid, invalid, disposable. A parse event bubbles from the input on every change:

document.querySelector('[data-parse]').addEventListener('parse', (e) => {
  // e.detail = { field: 'email', status: 'valid', value: 'billy@gmail.com', suggestion: null }
});
  • invalid and disposableset the input's customValidity, so a plain form refuses submit with the native browser message.
  • unchecked means the value passed through unverified. A network hiccup never blocks your form.
  • The suggestion line under the input is a p.parse-hint you can restyle from your own CSS.
  • Added a field after page load? Call parsedrop.scan().

Keys and pricing

  • The key is a public key, locked to your domains on the Keys page. Safe in page source, useless on anyone else's site.
  • Every check is a request on your own plan, pooled with everything else. No credits, no per-field pricing. Free plan works.
  • Your form data never touches us. The address goes to the API for the check and the answer comes back. Nothing is stored.

Links