Skip to main content

mailspot

Find and verify work email addresses. No API keys needed.

Two things:

  • Verify an address: is it well-formed, does the domain take mail, and does the mailbox look real?
  • Find someone's address from their name and company domain.

You get back a confidence score and a suggested action (send, verify_first, skip, unknown) instead of a bare yes/no, because the honest answer is usually "probably."

import mailspot

result = await mailspot.verify("jane.doe@acme.com")
print(result.decision, result.confidence)   # send 94

guess = await mailspot.find("Jane Doe", "acme.com")
print(guess.best.email)                      # jane.doe@acme.com
$ mailspot verify jane.doe@acme.com
jane.doe@acme.com  valid  send  94  the server accepted the mailbox on a domain that is not accept-all

$ mailspot find --name "Jane Doe" --domain acme.com
jane.doe@acme.com  94  via permutation

$ mailspot suggest jane@gmial.com
jane@gmail.com

Other commands: mailspot canonical, mailspot bulk verify in.csv --column email --out out.csv, and mailspot bulk recheck out.csv. Every command takes --json.

Most existing packages only verify a single address, run synchronously, and quietly lie about catch-all domains. mailspot finds and verifies, runs checks concurrently, is provider-aware (it won't report a confident "valid" from Gmail or Outlook, which accept every probe), and is honest when it can't be sure.

Not on PyPI yet.

SMTP is best-effort

Port 25 is blocked on most clouds and a lot of ISPs, and Google/Microsoft greylist probes. When mailspot can't get a straight answer over SMTP it says so in the result and falls back to what it does know (syntax, MX, catch-all, pattern). It won't make up certainty it doesn't have.

Using it responsibly

mailspot does DNS and SMTP lookups you ask for, against domains you pick. It ships no contact data and collects nothing on its own. If you process data about real people you have obligations under GDPR, CAN-SPAM and the like. That's on you, the operator. The defaults are polite (bounded concurrency, per-domain rate limiting, timeouts); leave them that way unless you have a reason not to.

Releasing

Bump version in pyproject.toml, commit, then tag and push:

git tag v0.2.0
git push origin v0.2.0

The publish workflow builds and uploads to PyPI on any v* tag, and fails if the tag does not match the version in pyproject.toml, so the two never drift apart.

License

MIT.

Metadata

Release files for mailspot 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mailspot 0.1.1
File Size Uploaded
mailspot-0.1.1.tar.gz 52.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mailspot 0.1.1
File Interpreter ABI Platform
mailspot-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 82.8 kB

Release files / mailspot-0.1.1.tar.gz

Download URL mailspot-0.1.1.tar.gz
Size 52.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1bb0a3c30037d403cf56d8674ad2bcc7ef4e3019ca901436161040b80e119add
BLAKE2b-256 checksum
How to use checksums
d9937472714ebcbfc7b0dab787c42fa43c596a7a7c7fe5db2eb05743af8385f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / mailspot-0.1.1-py3-none-any.whl

Download URL mailspot-0.1.1-py3-none-any.whl
Size 30.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3ffa141c32a6a1949641b870a48450942f62042ecb96ef5d0d1707fd1210bba8
BLAKE2b-256 checksum
How to use checksums
62517f16c6cbf3f3ed22e6734c32d1d805a62adfe14d81ef6b21b9c4c09a8510
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page