Email Deliverability and Domain Health Checker · Apify
Domain Deliverability Checker avatar

Domain Deliverability Checker

Pricing

from $4.25 / 1,000 results

Go to Apify Store
Domain Deliverability Checker

Domain Deliverability Checker

Audit a domain's email deliverability: SPF, DKIM, DMARC and policy, MX and mail provider, catch-all and blacklist checks, domain age, and a 0 to 100 health score. Flat JSON, Clay ready.

Pricing

from $4.25 / 1,000 results

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

1

Monthly active users

11 hours ago

Last modified

Features

Limited permissions

Share

What's new (October 2026)

  • Watch mode, only changed domains. Turn on the new only_changed input on a scheduled run and you get rows only for domains whose SPF, DKIM, DMARC, MX, mail provider, blacklist, or catch-all result changed since the last run with the same state_key. An unchanged domain returns no row and is not charged. Changed rows carry watch_status, changed_fields, and previous_check_at. Off by default.
  • Parent domain checks for subdomains. For a subdomain such as mail.acme.com, each row adds parent_domain, parent_dmarc_record, parent_dmarc_policy, parent_dmarc_subdomain_policy, parent_spf_valid, and parent_has_mx, plus dmarc_inherited, effective_dmarc_policy, and a separate parent_aware_score that counts an inherited DMARC policy. deliverability_score is unchanged. On by default.

No price change. Existing fields and saved inputs work as before.

📬 What can Domain Deliverability Checker do?

Give it a domain and it returns a complete email deliverability verdict in one flat row: SPF, DKIM and DMARC with policy, MX records and mail provider, DNS blacklist status, catch-all detection, domain age, and a single 0 to 100 health score.

Pure DNS and SMTP. No browser, no proxy, no paid third-party APIs.

📦 What you get⚙️ Features and integrations
🛡️ SPF, DKIM and DMARC with the actual policy
💯 A 0 to 100 score and a low/medium/high risk level
🚫 DNS blacklist status with the zones queried
🧾 42 flat fields, always present, null when absent
📮 Mail provider detection from MX
📅 Domain age via RDAP, with a SOA fallback
🧊 24 hour cache, repeat lookups skip the network, not the per-row charge
⬇️ Export to JSON, CSV, Excel, HTML or XML

Bought by outbound agencies, sales operations teams and Clay users who need to check domain health before sending cold email. Where most actors check one slice, just DNS or just blacklists or just DMARC, this returns the whole verdict in a single row.

🚫 This audits a domain, not a mailbox. It does not verify individual email addresses. If you need per-address verification, use Work Email Waterfall Finder.

💡 Why use Domain Deliverability Checker?

If you wantRead these fields
One number to gate ondeliverability_score, risk_level
Whether authentication is actually set upspf_valid, spf_policy, dkim_present, dmarc_policy
Who runs their mailmail_provider, mx_records
Reputation problemsblacklisted, blacklists_listed, blacklist_status
Early warning signsspam_trap_risk, spam_trap_flags, domain_age_days
Whether the domain even sendshas_mx, has_website

💯 The score model, stated in full

has_mx +20; valid SPF +20 (hard -all +5); DKIM present +15; valid DMARC +15 (quarantine +5, reject +10); blacklist clean +15 (unknown +7); catch-all not detected +5 (detected -10). Capped 0 to 100.

Risk level: 80 or more low, 50 to 79 medium, under 50 high.

The model is published so you can disagree with it and rebuild your own from the raw fields, all of which are on the row.

▶️ Ready-to-run examples

Each is a preconfigured version of this actor. Open one and run it immediately.

ExampleWhat it does
SPF DKIM DMARC Checker for Any DomainFull email authentication check on any domain
Bulk Email Deliverability CheckerScore a list of domains before launching cold outreach
DMARC Policy and Blacklist LookupCheck DMARC policy and scan for blacklist presence
Live Domain Health RecheckForce a fresh check with no cached result
Catch-All Domain DetectionDetect whether a domain accepts all addresses

📋 What data can Domain Deliverability Checker extract?

42 fields per domain: 39 result fields plus row_status, error_reason, and billable_events_json. Every field is always present; absent values are null.

FieldWhat it holds
spf_record, spf_valid, spf_policyRaw record, validity, and the qualifier on all
dkim_selectors_found, dkim_presentWhich common selectors returned a key
dmarc_record, dmarc_policy, dmarc_validRaw record and none, quarantine or reject
mx_records, has_mx, mail_providerHosts with priority, and the detected provider
catch_all, catch_all_statuscatch_all, not_catch_all or unknown
blacklisted, blacklists_listed, blacklists_checked, blacklist_statusWhich zones were queried and what they said
spam_trap_risk, spam_trap_flagsAdvisory heuristics for young or unauthenticated domains
domain_age_days, domain_age_sourceDays since registration, and whether it came from rdap or soa
has_websiteDomain has an A or AAAA record
deliverability_score, risk_levelThe composite verdict
audit_error, run_dateWhat stopped it, and when it ran
parent_domain, parent_dmarc_record, parent_dmarc_policy, parent_dmarc_subdomain_policy, parent_spf_valid, parent_has_mxFor a subdomain, its organizational domain and that domain's DMARC (p= and sp=), SPF, and MX. Null for a domain that is not a subdomain
dmarc_inherited, effective_dmarc_policyWhether the parent's DMARC governs a subdomain with no record of its own, and the policy that applies
parent_aware_scoreThe score with the effective DMARC policy counted. deliverability_score stays as before and ignores the parent
watch_status, changed_fields, previous_check_atWith only_changed: baseline or changed, which facts changed, and when the compared results were read. Null when only_changed is off

⚠️ A clean blacklist result means clean on the zones that answered, not an authoritative all-clear. Spamhaus and Barracuda block queries from cloud IPs and public resolvers without a paid data-query key, so some zones return unknown. Read blacklists_checked to see what was actually asked. The same care applies to dkim_present: an empty result means not found on a common selector, never a guarantee that DKIM is absent.

🛠️ How to check a domain's email deliverability

  1. Open the Input tab and put a bare domain in domain, without https:// or a trailing slash.
  2. For a list, use domains instead. It takes precedence and returns one row per domain.
  3. Click Start.
  4. Read deliverability_score and risk_level for the verdict.
  5. Read spf_policy, dmarc_policy and blacklist_status for what to fix.

🧪 Using it in Clay

Add an Apify enrichment column and map your domain column to domain. The output is flat and one row per domain, so every field maps directly to a Clay column with no JSON unwrapping.

Gate downstream sends on a formula like deliverability_score >= 70 to keep risky domains out of a sequence before they cost you a reputation.

🔌 MCP

$npm install @mambalabsdev/mcp-domain-deliverability-checker
{
"mcpServers": {
"domain-deliverability": {
"command": "npx",
"args": ["-y", "@mambalabsdev/mcp-domain-deliverability-checker"],
"env": { "APIFY_TOKEN": "YOUR_TOKEN" }
}
}
}

Tool: check_domain_deliverability with { "domain": "stripe.com" }. The Mamba Labs GTM Suite server exposes the wider fleet through one install.

💵 How much does it cost to audit a domain?

You are charged once per domain audited.

PlanPer domainPer 1,000 domains
Free$0.005$5.00
Bronze$0.00475$4.75
Silver$0.0045$4.50
Gold$0.00425$4.25

There is also an Actor start event at $0.00005, charged once per run per GB of memory.

Free Apify plans get 600 results per calendar month, resetting on the 1st. Paid plans have no monthly cap.

🛑 Your spending limit is respected. Set a maximum cost per run in Apify, or max_charge_usd on the Input tab, and the run stops before it would go over, keeping every result already charged. Each row's billable_events_json lists the events that row was charged for.

💳 This actor passes Apify platform usage costs through to you, unlike most of the Mamba Labs fleet, where we absorb them. That is compute and proxy usage billed at Apify's rates on top of the per-domain price above.

⚠️ A cached repeat lookup is served instantly but is still billed. This actor prices per result row, and Apify charges that event for every row written to the dataset, whether the answer came from the network or from the 24 hour cache. Corrected 2026-08-12: an earlier version of this section said cached repeat lookups were free. They are not, and they never were. Measured on 2026-08-12, an identical three domain re-run 75 minutes after the first was charged the same three result events. The cache saves you the wait and the platform usage, not the per-row price.

⌨️ Input

Everything is on the Input tab. Provide either domain or domains.

FieldTypeDefaultWhat it does
domainstringstripe.comBare domain, no scheme and no trailing slash.
domainsarraynoneBatch. Takes precedence over domain. One row per domain.
batchSizeinteger5Domains audited concurrently per wave. Maximum 10.
skipCachebooleanfalseForce a fresh audit and ignore any cached result.
attempt_catch_allbooleanfalseRun the SMTP catch-all probe. See Known limits before turning this on.
only_changedbooleanfalseWatch mode. Return only domains whose results changed since the last run with the same state_key; unchanged domains return no row and are not charged. Always reads fresh.
state_keystringnoneNames the saved results watch mode compares against. One per schedule.
max_charge_usdnumbernoneOptional. The run stops before the next result that would take this run's charges over this amount, and keeps every result already charged. Leave empty to rely only on the maximum cost per run you set in Apify.

📤 Output

One flat row per domain, exportable as JSON, CSV, Excel, HTML or XML.

{
"domain": "stripe.com",
"spf_record": "v=spf1 include:_spf.google.com ~all",
"spf_valid": true,
"spf_policy": "softfail",
"dkim_selectors_found": ["google", "s1", "s2"],
"dkim_present": true,
"dmarc_record": "v=DMARC1; p=reject;",
"dmarc_policy": "reject",
"dmarc_valid": true,
"mx_records": [{"host": "aspmx.l.google.com", "priority": 10}],
"has_mx": true,
"mail_provider": "Google Workspace",
"catch_all": null,
"catch_all_status": "unknown",
"blacklisted": false,
"blacklists_listed": [],
"blacklist_status": "clean",
"spam_trap_risk": "low",
"domain_age_days": 11238,
"domain_age_source": "rdap",
"has_website": true,
"deliverability_score": 95,
"risk_level": "low",
"run_date": "2026-06-19T08:10:59Z",
"parent_domain": null,
"parent_dmarc_record": null,
"parent_dmarc_policy": null,
"parent_dmarc_subdomain_policy": null,
"parent_spf_valid": null,
"parent_has_mx": null,
"dmarc_inherited": false,
"effective_dmarc_policy": "reject",
"parent_aware_score": 95,
"watch_status": null,
"changed_fields": null,
"previous_check_at": null
}

🧾 More fields on every row

FieldTypeWhat it holds
row_statusstringok, degraded, error, or notice (a notice row carries a message, not a result). Present on every row.
error_reasonstringWhy the row is degraded or an error, in plain words. Null on an ok row. Present on every row.
billable_events_jsonstringJSON list of the pricing events this row was charged for, for example [{"event":"apify-default-dataset-item","count":1}]. Lets you reconcile a run from the dataset alone. The once per run start event is not repeated on rows.

💡 Tips

  • Audit your own sending domains before a campaign, not just your prospects'. That is the use this actor gets bought for most.
  • spf_policy: "softfail" with dmarc_policy: "none" is the most common real finding on a domain that thinks it is set up correctly.
  • A young domain with no authentication is the classic spam-trap shape. spam_trap_flags names which heuristics fired.
  • Batch with domains rather than looping. Repeat lookups inside 24 hours are free anyway.

⚠️ Known limits

Catch-all is off by default. The Apify platform blocks outbound SMTP on port 25, so the catch-all probe returns unknown here. Enable attempt_catch_all only when running this actor on infrastructure that permits port 25 egress.

DNS blacklist coverage is best effort. Spamhaus and Barracuda block queries from cloud IPs and public resolvers without a paid data-query key, so some zones return unknown.

DKIM uses common-selector probing. DKIM selectors cannot be enumerated from DNS, so the actor checks a fixed list of provider selectors.

Domain age depends on the registry. RDAP returns the registration date for most TLDs; some registries omit or redact it, in which case the value is null or an approximate SOA-based fallback.

A domain with no MX is not an error. The row is emitted with has_mx: false, and the blacklist and SMTP checks are skipped.

Results are cached for 24 hours. Pass skipCache: true for a live audit.

❓ FAQ

Why is catch_all null?

Because the SMTP probe could not run. Apify blocks outbound port 25, so catch_all_status comes back unknown rather than a guess.

What does a score of 95 actually mean?

Read the score model above. It is published in full precisely so the number is not a black box.

Does it verify individual email addresses?

No. It audits the domain's sending setup, not a mailbox.

One domain failed in my batch. Did it break the run?

No. Failures are caught per domain, an empty record is pushed for that one, and the other rows are unaffected.

Is a clean result an all-clear?

Clean on the zones that answered. Check blacklists_checked.

🧩 Want other GTM data?

Mamba Labs builds a fleet of enrichment actors that share one flat output convention:

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI List Extractor for Any WebsiteD5hOdIez45M0NX5jD
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
Amazon Top Reviews Scraperwh6Mq6G6BlW1CRPwx
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
B2B Social Video TranscriptsdG2UYVKE2e4zfDucK
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Bluesky Posts ScraperKldSjS7wjoeZ7vQGm
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Business PDF Field ExtractorvM7JCk0CMAx5W0oJh
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Eventbrite Events Scrapersgc6znyrbjOy5Yk9f
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Facebook Posts ScraperT6jxIeq4ua0SLXnqG
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Maps Places ScraperSuvHCNJ7pIuw6gn54
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
Multi Platform Social Posts and CommentsicFuHR1EzDvUcfCQ5
Netherlands Rental ListingssGKGsbwoX18lFb6dR
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
News Site Article ArchiveNjcF3UD8791raFNHh
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Private Company Funding HistoryH02K3rQIVOYpnLYc3
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Property Owner Records0J7ovG1iaZpQD1P0T
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Semrush Domain Metrics3dqa0abJrpssHtrYL
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Streaming Subscription Prices by CountrytbMroS2Zyn57bW17E
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Tennis Match Datav3OX6zxXHZOf2yurO
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
Ticketmaster Event PricesCrvPX4IwLXQX9bls1
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
TikTok Video Statsuz9Q3cEycRgA6NfqA
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel and Video List ScrapertxaAjeBqgj5MStFE4
YouTube Channel Email FinderIDgKZcmeeuunUbccN
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything.

🆘 Support

Something wrong, or a mail provider the actor does not recognize? Open an issue on the Issues tab with the domain and the row, and we will look at it.

ℹ️ Sourcing and legal. Every field comes from public DNS records, public RDAP registry data and public DNSBL zones. Nothing reads a mailbox or sends a message. The catch-all probe, when enabled, opens an SMTP conversation and never delivers anything. You are responsible for how you use the output.

Built by Mamba Labs.