Trailblaze Data
Home
Loading your outbound route…
Your outbound route
Choose a stop to open it HealthyLook soonNeeds youNot set upLoading your route…
Past lists
All resultsQueue
Suppression
The addresses, keywords and phone numbers you never want contacted. Every list is checked against them first, and matches are never charged.
Add email addresses
Upload a file or paste addresses. They go on your private do-not-contact list, and every list you upload from then on is checked against it before verification.Drag & drop a CSV / XLSX here, or click to chooseOr paste addresses, one per line or separated by commas.Your email list
Email Folder Reason Source Added
Add keywords
Any record whose company name or email matches one of these words is marked Excluded and not charged. Phone numbers on a row whose company name matches are removed before phone screening, also free. Matching is whole-word: 'capital' matches 'Capital City Pavers' but not 'recapitalize'.Your keywords
Keyword Folder Added
Add phone numbers
Paste or upload phone numbers you never want screened or called. US numbers only; we keep the 10 digits. They are checked before every phone screening and are never charged. Private to your workspace.Drag & drop a CSV / XLSX here, or click to chooseOr paste numbers, one per line.Your phone list
Phone Folder Source Added
Phone screening
Check phone numbers before you dial. No email needed.
- Your phone suppression list Removed first, never charged
- Your keywords Rows whose company matches, also free
- Serial-litigator lists Known repeat filers
- Do-Not-Call registries Federal and state
- Do-Not-Call complainers People who have complained before
Loading phone screening…
Your phone lists
Results
Every list you have run, with its counts, Miles and downloads. Open a list to see its five-stage check.
What clean, flagged and excluded mean
Download clean list = deliverable · Flagged records = undeliverable, risky, catch-all and excluded · Every record = everything, each with its status. Status values: deliverable · risky · catch-all · undeliverable · excluded · duplicate.
Excluded — not returned for outreach. Matches to your own suppression list or keywords are not charged; every other address is checked and charged at 1 Mile. See Billing history for exact charges.
Gates
The tools your outbound runs through. Connect each one once, then work from here.
- Loading your route…
More sending tools
They’ll appear here as each one is ready; we haven’t set dates.
Mail Room
Every reply to every connected mailbox, in one place.
Loading your mailboxes…
Loading your replies…
Choose a conversation to read it here
The whole thread opens in this pane, ready to answer. Opening a reply marks it read.
Seed inboxes
Drop a seed on your list and see where the send actually lands.
- Create a seed and copy its address.
- Add the address to the list you are about to send.
- Send as usual. Each arrival shows where it landed: Inbox, Promotions or Spam.
Loading your seed inboxes…
How to read a placement
Each arrival at a seed shows where your mail landed. Here is what each one tells you.
- Inbox
- Reached the main inbox. Keep the same domain, content and sending pace for this list.
- Promotions
- Delivered, but sorted as marketing. Plainer mail, with fewer links and images, tends to reach the main inbox.
- Spam
- Filtered as junk. Check your sending domain on Deliverability before you send more.
- Waiting
- Nothing has landed yet. A seed only sees mail sent after its address is on your list.
One seed is one mailbox, so each arrival is a spot check, not a rate. To compare two sends, give each one its own seed.
Flight School
Short, serious lessons on clean lists and mail that lands, then the live checks to prove it.
Ground School
Deliverability
Check the domains you send from, watch them for trouble, and hear the moment something changes.
Domain health check
- SPF, DKIM and DMARC The three records that prove the mail is yours, with a fix for anything missing or weak
- MX and reverse DNS Whether the domain receives mail, and whether its address resolves back to a name
- Blocklists The domain and its mail-server addresses against 35 public blocklists, with a removal link for every listing
Blocklist monitors
Change these emails in Notifications
Billing
Your Miles, your plan, and what you’ve paid.
Miles
1 Mile = 1 checkBuy Miles once
Top-up Miles never expire.
Your Miles over time · last 30 days
Payments and receipts
Amounts in USDYour plan
Change planMonthly plans
All plansAll plans, side by side
Swipe the table sideways to see every tier →
Need more room? Size suppression, seed inboxes and Mail Room add-ons
Miles activity: Miles added and spent, with your running balance
See the full pricing page for everything each plan includes.
Settings
Your account, API access, security and notifications.
Profile
Signed in as —Single sign-on
2-step verification
Notifications
Account
Plan & close account
Team
Security
Change password
Data retention
Your data
By requestAuthorized apps
API key
LiveAPI
LiveYour key
Base URL
https://api.trailblazedata.com/functions/v1
Send your key on every request, either header:
Authorization: Bearer tbk_live_...
x-api-key: tbk_live_...
Treat the key like a password. Anyone holding it can pull your records and spend your Miles.
Submit a list
POSTPOST https://api.trailblazedata.com/functions/v1/client-verify-submit?action=submitcurl -X POST "https://api.trailblazedata.com/functions/v1/client-verify-submit?action=submit" \
-H "Authorization: Bearer $TB_API_KEY" \
-H "content-type: application/json" \
-d '{
"list_label": "Q4 outbound - west",
"rows": [
{"email":"dana@example.com","first_name":"Dana","last_name":"Reyes","company_name":"Example Co"},
{"email":"sam@example.org","first_name":"Sam","last_name":"Okafor","company_name":"Example Org"}
],
"opts": { "scrub_keywords": true, "scrub_list": true }
}'
| Field | Required | Notes |
|---|---|---|
rows | Yes | 1–10,000 per request. Over 10,000 the request is refused, never truncated — split it. |
list_label | No | Your own label, up to 200 characters. Defaults to “Client upload”. |
opts.scrub_keywords | No | Default on. Removes records matching your keyword rules. |
opts.scrub_list | No | Default on. Applies your own suppression list. |
Both suppression checks default to on because that is the safer setting for your list. Send false only if you deliberately want those records back.
The response carries your run_id. Keep it.
Miles. The check runs against your balance. If the list would cost more Miles than you hold, nothing is submitted and nothing is charged — you get 402 with the amount needed and your current balance, so you can top up and resend the same payload unchanged.
Check a run
GETcurl "https://api.trailblazedata.com/functions/v1/client-verify-submit?action=status&run_id=$RUN_ID" \ -H "Authorization: Bearer $TB_API_KEY"
curl "https://api.trailblazedata.com/functions/v1/client-verify-submit?action=runs" \ -H "Authorization: Bearer $TB_API_KEY"
Pull your results
GETTotals
curl "https://api.trailblazedata.com/functions/v1/client-portal?action=summary" \ -H "Authorization: Bearer $TB_API_KEY"
You get counts by class. The useful number is what came out — the undeliverable, risky and excluded records we caught and held back before they could touch your sending reputation.
Records, paged
curl "https://api.trailblazedata.com/functions/v1/client-portal?action=list&limit=100&offset=0" \ -H "Authorization: Bearer $TB_API_KEY"
Download a clean list
curl "https://api.trailblazedata.com/functions/v1/client-portal?action=export&run_id=$RUN_ID&class=deliverable&limit=5000" \ -H "Authorization: Bearer $TB_API_KEY"
| Parameter | Notes |
|---|---|
run_id | Optional. Restricts the export to one run. |
class | deliverable, risky, catch_all, undeliverable, unverified, excluded, duplicate, pending, or all. |
limit / offset | Up to 5,000 rows per response. Page with offset; has_more tells you when to stop. |
Columns returned: record_uid, first_name, last_name, company_name, job_title, email, phone, mobile, website, linkedin_url, industry, city, state, zip, verification, added_at.
excluded is a single class covering records held back for several reasons. It is not broken out further.
Errors
| HTTP | Body | What it means | What to do |
|---|---|---|---|
400 | bad_request | Malformed JSON, or rows missing or empty. | Fix the payload. |
401 | unauthorized | No key, an unrecognized key, or a key that has been regenerated or turned off. | Check the header. Every rejected credential returns this same response — we do not confirm whether a key ever existed. |
402 | insufficient_miles | The list costs more Miles than you hold. Nothing was submitted or charged. | Top up, resend the same payload. Response carries needed and available. |
403 | forbidden / not_api_eligible | A valid key on an action keys cannot use (billing, profile, notifications, key management). | Use the app for that action. |
404 | not_found | The run_id is not one of yours, or does not exist. | Check the id. |
405 | method_not_allowed | Wrong HTTP verb. | submit is POST; status, runs, summary, list, export are GET. |
409 | verify_limit_reached | You have hit your plan’s monthly row allowance. | Talk to us about your plan. |
413 | too_many_rows | More than 10,000 rows in one submit, or the per-request cap on another action. | Split the request. |
429 | rate_limited | Too many requests. | Back off and retry — see the rate limits below. |
500 | server error | Our side. | Retry once, then contact support with the time of the call. |
Rate limits
60 / minOver that you get 429; wait and retry. Repeatedly sending an invalid key is limited separately and more tightly, so do not use the API to test keys.
The window is fixed rather than rolling — pace your calls evenly rather than sending a burst on the minute boundary.
For large jobs: one submit of up to 10,000 rows costs one request. Submitting in a loop of small batches is slower and more likely to hit the limit.
Looking after your key
- Store it in your secret manager or environment, never in source control, a spreadsheet, or a browser front end. A key in client-side JavaScript is a key you have given away.
- Send it over HTTPS only. Never in a URL query string — URLs end up in logs and browser history.
- Rotate it if anyone who had access leaves, or if you suspect exposure. Rotation is instant, and the old key stops working the moment the new one appears — schedule it.
- One key per account today. If you need separate keys per system or per environment, tell us; that is on the roadmap and we would like to know who wants it.
- Rotating your key does not touch your data, your runs, or your Miles.
Verify a list
Add a file or paste addresses. You see what it costs before anything runs.
File
Upload a list
Append matches on email and fills blanks on leads you already have. It never creates leads and never verifies. Unmatched rows are ignored.Drop to use this file insteadDrag & drop a CSV / XLSX here, or click to chooseNeeds an Email or Phone column. Nothing is charged until you press Verify.Drop to add your listNeeds an Email or Phone column. Nothing is charged until you press Verify.Columns
Choose which column holds the email, and which hold phone numbers.
Pasted addresses: nothing to map.
All columns, with what each one is used for
What gets checked
See how many emails and phone numbers get checked once duplicates and your suppression list come out.
Cost
Nothing is charged until you press Verify.