Data APIs for US consumer, business & mover audiences. REST + JSON.
The official LeadsPlease® Data APIs expose four U.S. audience databases over one REST/JSON surface — Consumer (210M+), Business (18M+), New Homeowner, and New Mover. Every record ships with a USPS-validated postal address (CASS + DPV), plus email and phone where available, at high coverage. Consumer and Business refresh every 30 days; New Homeowner and New Mover refresh weekly. Bearer-token auth, OpenAPI 3.0 spec, polygon + radial + ZIP geos, 30+ demographics, signed CSV downloads. Same data engine that powers leadsplease.com checkout — exposed as endpoints you can call from any backend.
You only pay for emails that actually deliver.
Every email order is validated per-record, in real time. The moment a request hits our email endpoint, we pull the selected records from our database, push them to an accredited third-party verification service while the call is open, and return only the confirmed-deliverable addresses to you. No bounces in the file. No charges for what didn’t verify — we absorb the verification cost.
No other U.S. audience vendor runs this loop inside the API call. They either ship unverified email lists, or charge you for the bounces too. We don’t.
Data API vs. direct-mail APIs — we’re the data layer, not the print layer
Search "direct mail API" and you'll find Lob, Postalytics, PostGrid, PostcardMania, and Lettrlabs — all excellent print-and-mail APIs that take a CSV and turn it into postcards. None of them generate the audience CSV. That's the LeadsPlease® Data API. The cleanest stack: pull the audience from us, hand it to your print partner.
| Capability | LeadsPlease® Data API | Lob / Postalytics / PostGrid | PostcardMania / Lettrlabs |
|---|---|---|---|
| Generate audience from demographics | ✓ 30+ selects, polygon geo | — bring your own CSV | — resells third-party data |
| USPS-verified consumer + business records | ✓ 250M + 18M, CASS-certified | — validates addresses you supply | ~ via partner data |
| Intent Data (in-market signals) | ✓ Percentile-scored field | ✗ no | ✗ no |
| List Aggregation (multi-list dedupe) | ✓ Industry first | ✗ no | ✗ no |
| Subscriptions (auto-pilot fresh records) | ✓ NHO/NM/T65 daily push | ✗ no | ✗ no |
| Print + mail postcards / letters | — hand off to your print partner | ✓ Full print fulfilment | ✓ Full print fulfilment |
| Order minimum | ✓ None | ~ Per-piece minimums | ~ 250–500 pcs typical |
| Free tier for development | ✓ TEST creds, 1K count cap | ~ Sandbox modes | ✗ Account required |
If you’re building a direct-mail product, an SMB CRM, or a real-estate / insurance / mortgage platform: call our Data API to build the audience, then hand the resulting signed CSV URL to Lob, Postalytics, or PostGrid for print fulfilment. Your users get audience-selection + print in one flow; you charge a single bundled price; your stack stays focused. DataWidget® for Web-to-Print ships this exact pattern as a drop-in widget if you'd rather skip the API integration.
From auth to CSV in five calls
Every list-build follows the same pipeline. The Subscriptions endpoint wraps step 2–5 into a single recurring delivery for New Mover / New Homeowner.
Authenticate
POST /auth with username + password. Returns a 20-minute JWT to send as Authorization: Bearer <token>.
Define criteria
POST /search-criteria with list type, geos (manual/radial/polygon), demographics, and which contact data points to include (direct mail, email, phone). Returns a criteriaId.
Get count
POST /counts with the criteriaId. Returns the exact number of records that match. Rate-limited to 10/min.
Create & download
POST /lists → status URL. Poll until Completed. Response includes a signed download URL for the generated CSV.
Endpoint quick reference
💡 Same backend, different surface: the embeddable DataWidget® for Web-to-Print calls these exact same endpoints behind the scenes. Build with the API directly, or drop the widget into your audience-selection UX with a 30-second embed — they share the data layer.
Eight core endpoints cover 95% of integrations. Full schemas in the Swagger UI.
Authenticate
Trade username + password for a 20-minute JWT. No prior token required.
Create criteria
Persist a list type + geo + demographic combo. Returns a criteriaId reusable across count + list calls.
Get count
How many records match these criteria? 10 calls/min. Use this for live UI estimates and pricing previews.
Create list
Triggers async CSV generation. Returns a status URL to poll.
Check list status
Status flips Pending → Completed; once complete, response includes a signed download URL.
Aggregate lists — unique to LeadsPlease®
Merge any number of completed lists into a single, deduplicated CSV. Add or remove member lists at any time; the aggregate auto-regenerates on next download. No other U.S. mailing-list API offers this — you'd otherwise have to download N CSVs and dedupe yourself in Pandas. Powers multi-region campaigns, quarterly mail drops, and saved-search rollups.
Discover filters
Fetch the full demographic catalog for a given list type and affiliate code. Drives dynamic UIs.
SIC lookup
Find SIC codes by description (e.g. ?description=Restaurant) or fetch the full 13,806-code catalog.
Subscriptions — fresh leads, daily push
Save criteria once; receive only newly-loaded matches on your cadence. Powers New Homeowner / New Mover / T65 / Intent Data automated drops. Incremental, deduplicated, EMAIL delivery (more channels coming).
Run a real call right now
Below is the exact pipeline that powers the LeadsPlease® checkout. Every snippet is copy-paste ready against TEST. Swap the base URL to https://api.leadsplease.com when you're ready for live.
Want the full interactive runner?
The Swagger UI gives you in-browser request bodies and "Try it out" against TEST — no client setup needed.
1Authenticate — trade credentials for a JWT
POST your username and password. The response includes accessToken — valid for 20 minutes. Re-call this endpoint when it expires; no refresh-token flow needed.
# Trade credentials for a JWT (TEST environment) curl -X POST https://api-test.leadsplease.com/api/v1/auth \ -H "Content-Type: application/json" \ -d '{"username":"john@example.com","password":"yourpassword"}' # → { "accessToken": "eyJhbGciOiJIUzUxMi..." }
const r = await fetch('https://api-test.leadsplease.com/api/v1/auth', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); const { accessToken } = await r.json();
import requests r = requests.post( "https://api-test.leadsplease.com/api/v1/auth", json={"username": username, "password": password}, ) access_token = r.json()["accessToken"]
2Create criteria — pick list type, geos, demographics
Below: a Consumer list across two ZIP codes (Scottsdale 85255 + Flagstaff 86001), filtered to high-value home owners who are December birthdays and donate to animal-welfare or cultural causes.
curl -X POST https://api-test.leadsplease.com/api/v1/search-criteria \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d @criteria.json # → { "id": "a9bae6d8-17bb-11f1-8fa0-0afff3a94407" }
{
"listType": "consumer",
"geoCriteriaType": "manual",
"affiliateCode": "lp",
"contactDataPoints": ["direct_mail"],
"geos": [
{ "name": "85255", "type": "zip" },
{ "name": "86001", "type": "zip" }
],
"demographics": [
{ "name": "charityDonor", "codes": ["aw", "cc"] },
{ "name": "current_home_value", "codes": ["Q", "R", "S"] },
{ "name": "personbirthmonthonly", "codes": ["12"] }
]
}
3Get count — how many match?
Rate-limited to 10/min. Use this for live count estimates as the user adjusts filters in your UI.
curl -X POST https://api-test.leadsplease.com/api/v1/counts \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"criteriaId":"a9bae6d8-17bb-11f1-8fa0-0afff3a94407"}' # → { "count": 1247 }
4Create list — trigger async CSV generation
Returns a status URL. Poll it until status flips from Pending to Completed; the same response then includes a signed download URL.
curl -X POST https://api-test.leadsplease.com/api/v1/lists \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"criteriaId":"a9bae6d8-17bb-11f1-8fa0-0afff3a94407","name":"AZ donor list"}' # → { # "id": "list_4f8a...", # "status": "Pending", # "statusUrl": "https://api-test.leadsplease.com/api/v1/lists/list_4f8a..." # }
5Poll status & download
Typically 30–90 seconds end-to-end depending on list size. The download URL is signed and time-limited.
curl https://api-test.leadsplease.com/api/v1/lists/list_4f8a... \ -H "Authorization: Bearer $TOKEN" # → { # "id": "list_4f8a...", # "status": "Completed", # "downloadUrl": "https://api-test.leadsplease.com/files/list_4f8a.csv?signature=..." # }
Bonus — one-shot SIC keyword lookup
No auth required. Useful for autocomplete in business-list builders.
curl 'https://api-test.leadsplease.com/api/v1/sic-codes/search?description=Restaurant' # → [ # { "sicCode": "5812", "description": "Eating Places", "parentCode": "58" }, # { "sicCode": "5812008", "description": "Restaurants - Italian", "parentCode": "5812" }, # ... # ]
API Reference — live Swagger UI
Embedded directly from the LeadsPlease® OpenAPI 3.0 spec. Expand any endpoint to see request/response schemas, parameter types, example payloads, and the inline "Try it out" runner. Same source-of-truth that powers the upstream Swagger UI — just rendered here so you don't bounce off the docs site.
Six common patterns
Patterns we see most often in the wild. Most teams ship something working in less than a day — the data is real, the spec is OpenAPI, and the polling pattern is well-trodden.
Find the 2–5% who are buying right now — ignore the other 95%
Standard demographic mail converts at 0.5–1.5%. Layer the Intent Data overlay (auto-in-market, kitchen-remodel-in-market, switching-insurance-in-market, etc.) and the same audience converts at 5–12%. Solar installer mailing 10K homes hits the 200–500 actively quoting now — not the 9,500 who don't care. Same postage, 5–10× the response. Intent overlays sell for 30–60% more, so reseller margin compounds against a bigger ticket.
Embed list-building inside your postcard tool
Print & mail companies (postcard apps, EDDM platforms) call /counts live as the user paints a polygon on a map, then /lists at checkout. Their customers never leave their app; LeadsPlease® is the data backend.
Recurring auto-pilot feeds — New Homeowner, New Mover, T65, Intent Data
Real-estate apps, Medicare AEP brokers, and home-service marketers subscribe to a saved Criteria once and receive a fresh CSV the moment new matching records load — never the same household twice. The first 30 days after a move or close are the peak spend window; Subscriptions delivers those records the day they enter the database, not weeks later.
Turning-65 birthday targeting
Insurance brokers buy weekly lists of people turning 65 in the next 90 days for Medicare Annual Enrollment outreach. personbirthmonthonly + age_min/age_max filters carve a precise birthday cohort.
SIC-code prospecting at scale
Sales-tech tools fetch verified business contacts by 4-digit or 7-digit SIC, then enrich with employee size + sales volume + executive title. The /sic-codes/search endpoint powers the "find your industry" autocomplete.
Audience handoff into your ESP
Pull a list with contactDataPoints=[email], get a CSV signed URL, pipe directly into Klaviyo / HubSpot / Mailchimp via their import APIs. Lights-out workflow no human touches.
National insurance carrier — agent-driven steak-dinner invitations
A national insurer's local agents host monthly senior-financial events and invite ~10 distinct demographic micro-segments per ZIP (high-net-worth retirees, recent widows, veterans, female heads of household 65+, etc.). With the Aggregation API integrated into the agent booking system, an agent picks a ZIP, sees live counts of all 10 segments in seconds, enters the quantity wanted from each, clicks Generate Invitation List. The booking system fires 10 list jobs + one /list-aggregations call — deduplicated CSV lands in the print partner's API inbox in under 60 seconds. No Excel. No double-mailing the household that fits three of the ten micro-segments. No 3–5 day wait on corporate marketing.
Claimant-prospect lists by demo + geo
Legal-tech firms build claimant prospect pools by demographic + geography (e.g. women 50–75 within 50 miles of specific medical facilities). geoCriteriaType=radial + age + gender filters do this in one criteria object.
Frequently asked
How do I authenticate?
/auth — you receive a JWT access token valid for 20 minutes. Include it as Authorization: Bearer <token> on every authenticated endpoint. Tokens auto-rotate on expiry; just call /auth again.What's the rate limit?
Do you have an OpenAPI / Swagger spec?
How fresh is the data?
How does pricing work? $ PREPAID CREDITS
How do Subscriptions work? ⚡ AUTO-PILOT
POST /search-criteria with geo + demographics + Intent overlays — returns a criteriaId. (2) POST /subscriptions wrapping that criteriaId with a name, deliveryChannels, and metadata — returns a subscriptionId. (3) Done. A daily background job checks whether new data has been loaded that matches your criteria; when there is, a fresh CSV is generated and delivered. Each delivery is incremental — only records not previously sent. No double-mailing, no manual workflow, no "remind me to pull a new list next month." Currently delivers via EMAIL; webhook + S3 push channels on the roadmap. Ideal for New Homeowner (peak-spend 30-day window), New Mover (relocation 30-day window), T65 / Medicare AEP (fixed birthday eligibility), and the daily Intent Data refresh — the leads where freshness measurably moves response rates.What's Intent Data, and why does it matter? ⚡ NEW
What output formats are supported?
contactDataPoints.Can I aggregate multiple lists into one file? ★ INDUSTRY FIRST
How is the LeadsPlease® Data API different from Lob, Postalytics, and PostGrid? ⚡ COMPARISON
Prices
Prepaid credits: $100 = 100 credits, and records draw down your balance at the standard LeadsPlease® per-record data rates. No subscription. No monthly fee. No minimum per order.
Load credits → pull records. No subscription. No minimum per order.
Buy a credit pack — 1 credit = $1 of data — and every order draws down your balance at the standard LeadsPlease® per-record data rates, the exact same per-unit prices the public LeadsPlease.com checkout uses. Every funded account gets full LIVE access, support, SLAs, and production rate limits — there is no access fee. The difference vs the website: it enforces a $125–$300 minimum per order; the API does not.
A 1-record lookup costs 0.12495 credits (12.5 cents); a 100-record order costs 12.495 credits; 1,000 records cost 124.95 credits. Volume discounts kick in at 2,500 / 5,000 / 10,000 / 25,000-record breakpoints — the per-record data rates shown in the matrix below. Credits are valid 12 months from purchase, oldest spent first; optional auto‑top‑up keeps a balance you never think about.
Worked examples — consumer mail-only
💳 Credit packs
Credit Packs
1 credit = $1 of data. No subscription, no monthly fee — records draw down your balance at the per-record data rates above. Bigger packs earn bonus credits.
| Pack | Credits | Bonus |
|---|---|---|
| $100 | 100 | — |
| $500 | 525 | +5% |
| $1,000 | 1,100 | +10% |
| $2,500 | 2,875 | +15% |
| $5,000+ | 6,000+ | +20% |
Credits valid 12 months from purchase · oldest spent first · optional auto‑top‑up.
Every funded account includes
- Full LIVE + TEST environment access
- Production rate limits (10 Count calls/min per key; higher limits on request)
- Unlimited List downloads
- ★ List Aggregation API (industry-first, unique to LP)
- ⚡ Subscriptions API (New Homeowner / Mover / T65 / Intent)
- ⚡ Intent Data overlay Live now · included
- Priority email support · 1 business day
- 99.9% uptime SLA
- Records draw down at LP per-record data rates above · no order minimum
Create your free account on the Get Started tab, then email tech@leadsplease.com or call (866) 306-8674 and we load your first pack.
Enterprise
High-volume, white-label, OEM. Custom credit commitments with negotiated below-standard per-record rates.
- Everything a funded account gets
- Dedicated infrastructure
- White-label / OEM licensing
- Custom data points + filters
- Slack-shared on-call channel
- Volume-discounted per-record data rates below standard
- Quarterly business reviews + roadmap input
- DPA, SOC 2 + security questionnaire support
Book a call, or email tech@leadsplease.com.
Want to build before you buy? On the Get Started tab create a free TEST account — an API key for the TEST environment with every endpoint open (criteria, counts, lists, aggregation, subscriptions), no monthly call quota, no charges and no credit card. List downloads on TEST return sample data; production records need a funded LIVE key.
Get started
You're 60 seconds away from your API key. Create your free TEST account below — the key arrives instantly by email and opens every endpoint on the TEST environment: live counts on the full consumer & business databases, list creation with sample output, aggregation and subscriptions, with no monthly call quota, no charges and no credit card. When you're ready to pull records, load a credit pack ($100 = 100 credits, bonus credits on larger packs, no monthly fee, no order minimum) and the same key goes LIVE. Details on the Prices tab.
Create your free LeadsPlease® account
One signup unlocks the Test version of every product — the Data API, the DataWidget® and the MCP. We email your affiliate code and key in under a minute. No credit card required.
Create my free account →30-second smoke test (TEST environment)
Once you have a username/password from us, this is the smallest possible end-to-end smoke test — auth → criteria → count, in three calls.
#!/usr/bin/env bash # Replace USERNAME / PASSWORD with the credentials we email you. BASE="https://api-test.leadsplease.com/api/v1" TOKEN=$(curl -s -X POST $BASE/auth \ -H "Content-Type: application/json" \ -d '{"username":"USERNAME","password":"PASSWORD"}' \ | jq -r '.accessToken') CID=$(curl -s -X POST $BASE/search-criteria \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"listType":"consumer","geoCriteriaType":"manual","affiliateCode":"lp","contactDataPoints":["direct_mail"],"geos":[{"name":"85255","type":"zip"}]}' \ | jq -r '.id') curl -s -X POST $BASE/counts \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"criteriaId\":\"$CID\"}" # → { "count": 28934 }
Spec, status, support
📘 Swagger UI — embedded on the API Reference tab (live spec, every endpoint, inline test runner)
📄 Full API manual — developer reference (v1.3.4)
✉️ Tech support — tech@leadsplease.com — phone (866) 306-8674 — replies within one business day; priority support for funded and Enterprise accounts.
Compliance & data handling
The data and the API are CCPA-compliant, GDPR-ready, CAN-SPAM compatible, and SOC 2 Type II certified. Mailing addresses are USPS CASS-certified for maximum deliverability. Every CSV download URL is signed and expires in 24 hours; we don't store your queries or downloaded files beyond standard operational logging.
For DPA, security questionnaire, or vendor-onboarding paperwork, email legal@leadsplease.com.