- Pillar 1, one API for every gate attribute: The Explorium API returns firmographics, job level, job department, technographics, and contact data from 150M+ company profiles and 800M+ people profiles behind one credential.
- Pillar 2, built for scale: Explorium filters up to 1,000 entities per call at 100 QPS sustained, so a 5,000-record list clears the gates in one batch, not 5,000 lookups.
- Pillar 3, affordable by design: A unified credit pool cuts spend 30-60% versus per-endpoint allocation, and cheapest-first ordering charges credits only on records that already survived the free filters.
- The gate sequence: Dedupe, role, seniority, size and industry bounds, geography and tech exclusions, then paid enrichment and verification on survivors only.
- The false-negative audit: Never delete a record. Log a reason code, hold out an ungated 5% as a control, and hand-review 20-30 disqualified records per week.
- Get started: Create a free Explorium account, no sales call, and run your first filtered fetch in minutes.
A pre-send disqualification pass is how you disqualify bad-fit leads before outbound: ordered, cheapest-first gates that cut the records who structurally cannot buy, with every cut writing a logged reason code you can audit. It is subtraction with an audit trail, not personalization.
The arithmetic forces the reframe. Cold email reply rates fell from 5.1% in 2024 to 3.43% in 2026, while small targeted campaigns reply at 5.8% versus 2.1% for large sends. Sending 500 unfiltered records burns domain reputation and teaches you nothing about which variable failed. The attribute layer is the decision that moves the number, so start from a working view of B2B data providers and a side-by-side comparison.
What Is a Pre-Send Disqualification Pass and Why Does It Beat Personalization?
A pre-send disqualification pass is an ordered set of attribute gates that removes bad-fit records from a prospect list before any email is written, and it beats personalization because a wrong-role recipient cannot reply no matter how good the copy is. Personalization lifts the reply rate of people who can buy; disqualification removes those who cannot.
❌ Why Copy-First Lists Fail Small B2B Teams
- Scraped-homepage personalization now reads as machine-generated, so the spend produces a negative signal.
- Hundreds of sends returning two rejections means the list never reached someone with authority.
- Bounce rates above 2% risk the sending domain, and unfiltered lists are where hard bounces concentrate.

✅ What Subtraction Gives You Instead
- Every cut is deterministic and explainable from a stored attribute.
- Enrichment and verification spend concentrates on the surviving 30-40%.
- The reason-code log turns an opaque filter into a reviewable dataset, which is the point of data enrichment.
“AI is bad at the part everyone uses it for and good at the part nobody does. I write the emails. AI decides who gets one.” Developer-founder, r/EntrepreneurRideAlong
Which Attributes Actually Predict a Bad-Fit Lead?
Role, seniority, and function predict bad-fit leads more reliably than any company attribute, because a person in the wrong department has zero probability of buying regardless of how well the company matches your ICP (ideal customer profile). Company bounds come second, behavioral signals last.
🔑 Gate on Role Before Anything Else
job_levelcarries c-suite, president, owner, director, senior manager, manager, junior, advisor, and freelancer, so a seniority floor is one filter value.job_departmentcarries 29 values including engineering, IT, data, finance, and operations, which cuts a wrong function in one gate.job_titlewithinclude_related_job_titlescatches title variants without a regex list.has_contact_detailsaccepts email, phone, email_or_phone, or email_and_phone, so unreachable records never reach the paid stage.
curl --request POST --url https://api.explorium.ai/v2/prospects/fetch \
--header "API_KEY: $EXPLORIUM_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"size": 1000,
"filters": {
"job_level": {"values": ["director", "c-suite"]},
"job_department": {"values": ["operations", "data"]},
"has_contact_details": {"value": "email"}
}
}'🏗️ Company Bounds Come Second
company_sizebuckets run 1-10 through 10001+, so a two-bucket band replaces a fuzzy headcount guess.company_revenue,company_age, andis_public_companycut companies that cannot fund your price.naics_category,linkedin_category, orgoogle_categorybound the industry, one taxonomy per request.company_tech_stack_techhandles technographic exclusions, meaning cuts based on software a company already runs. Coverage depth varies, so check the firmographic and role coverage comparison.
In What Order Should the Gates Run to Keep Enrichment Cost Down?
Run the gates cheapest-first: free deterministic filters that need no enrichment call, then paid enrichment on survivors, then email verification last, because verification benchmarks at $0.003-0.008 per contact per month. Ordering is a cost decision before it is a quality decision.
🔄 The Gate Sequence
| Order | Gate | Attribute source | Cost | Reason code |
|---|---|---|---|---|
| 1 | Dedupe vs CRM and past sends | Your own records | No credits | DUPLICATE_ACCOUNT |
| 2 | Function and role fit | job_department | Filter only | ROLE_MISMATCH |
| 3 | Seniority floor | job_level | Filter only | SENIORITY_BELOW_THRESHOLD |
| 4 | Size and revenue bounds | company_size | Filter only | SIZE_OUT_OF_BOUNDS |
| 5 | Industry bounds | naics_category | Filter only | INDUSTRY_EXCLUDED |
| 6 | Geography exclusions | country_code | Filter only | GEO_EXCLUDED |
| 7 | Technographic exclusions | company_tech_stack_tech | Filter only | TECH_DISQUALIFIER |
| 8 | Enrich survivors | Explorium Contact Enrichment | Credits charged | NO_VERIFIED_EMAIL |
| 9 | Email verification | Verification service | $0.003-0.008 each | CATCH_ALL_UNVERIFIABLE |
💰 Why the Order Saves Real Money
- Gates 1-7 are filter payloads on
/v2/businesses/fetchand/v2/prospects/fetch, so cut records never trigger an enrichment charge. - On a 5,000-record list, cutting 60% before gate 8 removes 3,000 enrichment calls and 3,000 verifications.
- Explorium’s unified credit pool keeps saved credits usable on every other endpoint.
- Run the sequence on a free Explorium account and confirm the survivor count before scaling.
- Verification stays last: about a third of B2B contacts sit on catch-all domains no verifier can confirm, so tag them CATCH_ALL_UNVERIFIABLE rather than delete them. See this lead enrichment workflow.
“Bad list plus generic pain equals silence. Put the budget into targeting, not prose.” Practitioner, r/EmailProspecting
How Do You Log Why a Lead Was Disqualified?
Write every disqualified record to a separate table with a reason code, the gate that fired, the attribute value, and a timestamp, and never delete the row, because a deleted record cannot be audited for false negatives.
📊 The Reason-Code Schema
| Reason code | Attribute logged | Review priority |
|---|---|---|
| ROLE_MISMATCH | job_department | High |
| SENIORITY_BELOW_THRESHOLD | job_level | High |
| SIZE_OUT_OF_BOUNDS | company_size | Medium |
| INDUSTRY_EXCLUDED | naics_category | Medium |
| GEO_EXCLUDED | country_code | Low |
| TECH_DISQUALIFIER | company_tech_stack_tech | High |
| NO_VERIFIED_EMAIL | enrichment response | Low |
| CATCH_ALL_UNVERIFIABLE | verification status | Medium |
🏗️ Writing the Log
def gate(record, rules):
for gate_id, code, field in rules:
value = record.get(field)
if not passes(gate_id, value):
log_disqualified({
"prospect_id": record["prospect_id"],
"gate_id": gate_id,
"reason_code": code,
"attribute_value": value,
"timestamp": utcnow(),
})
return False
return TrueA record exits at the first failing gate. The same rules drop into AI outbound tooling without a schema change.
Ready to run the gates on real attributes instead of scraped homepage text? Start a free trial: 100 credits, no subscription required
How Do You Know the Filter Is Not Killing Good Leads?
Audit false negatives with three mechanisms: an ungated 5% hold-out that acts as a control, a weekly stratified hand-review of 20-30 disqualified records per reason code, and a per-code false-negative rate with a retirement threshold set in advance at 10%. Nothing else reports a lead your filter wrongly killed.
⚠️ The Objection That Kills Naive Automation
“If I automate the filtering before I know what a good lead looks like, I’ll never see the ones it wrongly killed. Nothing reports a false negative.” Developer-founder, r/EntrepreneurRideAlong
A false positive shows up as a bounce. A false negative shows up as silence you never attribute. Scoring audits that hunt low-score records sales would have taken cut bad leads reaching sales by 35%.
✅ The Audit Procedure
- Write every disqualified record to the log. Never delete.
- Reserve a random 5% hold-out that bypasses all gates and gets sent to anyway. Its reply rate is your control.
- Each week, pull 20-30 disqualified records stratified by reason code and hand-review for fit.
- Compute the false-negative rate per reason code. Above 10% means the gate is too tight.
- Loosen or retire that gate, then re-run the pass against the stored log.
SELECT reason_code,
COUNT(*) AS cut,
ROUND(100.0 * SUM(human_would_keep) / COUNT(*), 1) AS fn_rate
FROM disqualified_review
GROUP BY reason_code
ORDER BY fn_rate DESC;The hold-out is the only number that says whether the pass is net positive, and it is why signal-qualified sends beat volume sends in every published lead generation workflow.
How Does the Explorium API Power Every Gate?
The Explorium API is the attribute layer the gates query, and it wins on three fronts: one credential covers every gate attribute across 150M+ company profiles and 800M+ people profiles, it filters up to 1,000 entities per call at 100 QPS sustained, and its unified credit pool cuts spend 30-60% versus per-endpoint plans.
🔑 One API for Every Gate Attribute
- Firmographics, technographics, funding, and contact data come from 50+ sources behind one credential, so no gate needs a second vendor.
/v2/businesses/matchand/v2/prospects/matchresolve a name or domain to a stable entity id at 97.8%+ company match accuracy.- 18 buying-signal categories with 80+ signal types become later-stage gates once the deterministic ones are stable.
🚀 Built for Scale on Small Budgets
- Up to 1,000 entities per call at 100 QPS sustained on 99.999% uptime, so a list clears in one batch.
- Async
/jobvariants queue a surviving segment instead of looping single lookups. page_sizecaps at 100 andsizeat 60,000 records per fetch query.
💰 Affordable by Design
- Free account, no sales call, first API call in minutes.
- Credits flow into a unified pool across every endpoint: no per-endpoint allocation, no seat tax.
- Gates 1-7 are filter parameters rather than enrichment calls, so cut records cost nothing.
import requests
resp = requests.post(
"https://api.explorium.ai/v2/prospects/contacts_information/enrich",
headers={"API_KEY": API_KEY},
json={"prospect_ids": survivors[:1000]},
).json()
See where the attribute layer sits in the stack on the Explorium product overview.
How Often Should You Re-Run the Pass as Data Decays?
Re-run the full pass every 90 days, because 70.8% of business contacts change within 12 months and job title decays fastest at 65.8%, so a seniority gate set nine months ago is filtering on stale attributes.
🔄 A Refresh Cadence That Holds
- Every 90 days: re-fetch role and seniority attributes, then re-run gates 2 and 3.
- Every 180 days: re-check size, revenue, and technographic attributes.
- Before each campaign: re-verify addresses last checked more than 30 days ago.
⚠️ What Changes Between Runs
- Records cut as SENIORITY_BELOW_THRESHOLD often re-qualify after a promotion, so re-score the log too.
- Annual B2B data decay runs 22.5-70.3% by field, so treat year-old attributes as unverified.
- Compare refresh cadence and match accuracy on the provider comparison page before committing.
Getting Started: Your First Disqualification Pass in 5 Steps
Run the first pass on the Explorium API with a free account, filtering before enriching, and measure the survivor count before you write a single email.
- Step 1: Create a free Explorium account and generate an API key, no sales call required.
- Step 2: Match your list with
/v2/businesses/matchto get stable entity ids. - Step 3: Apply gates 1-7 as filter parameters and log every cut with a reason code.
- Step 4: Enrich only survivors with Explorium Contact Enrichment, then verify emails last.
- Step 5: Reserve the 5% hold-out and set the 10% false-negative threshold before sending.
🔑 The Decision Framework
Pick the attribute layer on three questions. Does one credential cover every gate attribute? The Explorium API returns firmographics, role data, technographics, and contact data from 150M+ company profiles and 800M+ people profiles. Does it filter at list scale? Up to 1,000 entities per call at 100 QPS sustained. Does the pricing punish aggressive filtering? A unified credit pool cuts spend 30-60% versus per-endpoint allocation. On all three, the Explorium API is the layer to build the pass on.
Cut the 60% of your list that should never have been on it, then spend credits on the rest. Enrich your first 100 records free
Related Posts
- Best Cold Email Skill 2026: Top 3 Ranked for RevOps
- Best Lead Generation Skill 2026: Top 3 Ranked for RevOps
- Best MCP for Account Enrichment With Intent 2026