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? $ TWO-PART
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
Two tiers, two-part pricing: a monthly access fee for the API itself plus a per-record data fee at the standard LeadsPlease® per-record data rates. No minimum per order.
Monthly access fee + per-record data fee. No minimum per order.
The monthly tier covers API access, support, SLAs, and rate limits. Records are billed separately at the standard LeadsPlease® per-record data rates from the LP affiliate XML — the exact same per-unit prices the public LeadsPlease.com checkout uses. The difference: the website enforces a $125–$300 minimum per order; the API does not.
A 50-record order costs $6.25 (50 × $0.12495). A 1-record lookup costs 1.2 cents. 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.
Worked examples — consumer mail-only
⚡ Monthly access tiers
Standard
Everything most customers need. TEST + LIVE access from day one. Records bill at the per-record data rates above.
- Full LIVE + TEST environment access
- 50,000 Count calls / month (10/min rate-cap)
- Unlimited List downloads
- ★ List Aggregation API (industry-first, unique to LP)
- ⚡ Subscriptions API (New Homeowner / Mover / T65 / Intent)
- ⚡ Intent Data overlay Live now · included on this tier
- Priority email support · 1 business day
- 99.9% uptime SLA
- Records billed at LP per-record data rates above · no order minimum
Enterprise
High-volume, white-label, OEM. Negotiated below-standard per-record rates.
- Everything in Standard
- 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
Want to evaluate before committing? On the Get Started tab choose Free 30-day TEST — you'll get an API key restricted to Count calls only (no list downloads, no aggregation, no subscriptions), capped at 1,000 calls/month. All production traffic is on the Standard tier.
Get started
You're 60 seconds away from your API keys. Pick a plan, fill out the form, and we'll provision your key — Free 30-day TEST arrives instantly by email; Standard kicks off a Stripe Checkout for the $199/mo subscription and your LIVE keys land the moment payment confirms.
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 on free tier, four hours on Builder, one hour on Scale.
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.