List hygiene · Suppression · Delivery handoff

Every address earns its place on your list.

Subsbooth is the mailing CRM that sits between your data sources and your sending platform. It imports anything, cleans everything, keeps blocked contacts out for good — and hands over only what is truly send-ready.

No public pricing — every deployment is scoped to your volume. No mailbox probing. No silent corrections. Ever.
6-stage
cleanup pipeline — format, duplicates, typos, DNS/NS/MX, suppression, rules
6 formats
CSV · XLSX · XLS · TSV · TXT · JSON — plus a full import API
100%
of corrections approved by a human. Nothing is changed silently
0
live SMTP probes. Verdicts come from DNS, MX and reference data
The sorting line

From raw file to send-ready, one verdict at a time

Every address that enters Subsbooth walks the same line. Each stage attaches a verdict and a plain-language reason — so you always know why a contact is in, out, or waiting.

STAGE 1
Format
Spaces, hidden characters, broken @ signs, bad dots, over-length, unsupported international forms.
STAGE 2
Duplicates
Within the file, across the whole CRM, and per list — history and blocks survive the merge.
STAGE 3
Typos
Likely domain mistakes get a suggestion. You accept or reject — Subsbooth never auto-corrects.
STAGE 4
DNS · NS · MX
NXDOMAIN, dead name servers, Null MX, A/AAAA fallback. Timeouts become Recheck, never Invalid.
STAGE 5
Suppression
Reference database, spamtraps, honeytraps, disposable domains, unsubscribes and complaints.
STAGE 6
Rules
Your keyword blocks, domain blocks and regex rules — editable without touching the core.
Hard rules

Opinionated where it protects your reputation

Subsbooth is built on rules that never bend — because one bad send costs more than a thousand good ones.

An active block always winsA Clean result never overrides an unsubscribe, a complaint, or a platform block. Blocks are stored separately and checked last.
Imports can't resurrect the deadRe-importing a blocked contact updates its fields — the block stays exactly where it was.
Temporary is not permanentA DNS timeout or SERVFAIL becomes Recheck. Subsbooth never turns a hiccup into a lifetime Invalid.
No silent correctionsTypo suggestions wait for a human. An accepted correction goes through the full pipeline again before it can be used.
Final check at the doorSend-ready lists are re-verified the instant before handoff. What was true an hour ago isn't assumed to be true now.
Unclear is not successIf the sending platform doesn't clearly accept a transfer, it isn't marked as sent. No optimistic bookkeeping.
ISP INTELLIGENCE

Know the mailbox behind every address

Subsbooth maps every contact to its real mailbox provider — by domain list and by where the MX actually points. icloud.com, me.com and mac.com are Apple. A custom domain with MX at Google is Google Workspace. Segment and throttle by ISP before you ever hit send.

  • Provider breakdown per list — Gmail, Apple, Microsoft-hosted, Yahoo, corporate and the long tail
  • MX-based detection for custom domains hosted on Workspace, 365 and others
  • Filter & queue by ISP to shape sends around each provider's tolerance
List health · Provider mix
Gmail / Workspace41.2%
Apple (icloud · me · mac)17.8%
Microsoft (outlook · hotmail · 365)22.4%
Yahoo / AOL9.1%
Corporate & other MX9.5%
NORMALIZED DATA

One format in the database, every format at import

Files arrive messy. Subsbooth stores clean. Countries are kept both as full names and ISO 3166 Alpha-2 codes, so segments are built on GB, not on eleven spellings of "United Kingdom". Phone numbers are normalized to E.164 no matter how they arrive.

  • Country stored twice — human-readable name + ISO Alpha-2 for segments and platform handoff
  • Phones normalized to E.164 — +1-515-210-1122, 001 515 2101122 and (515) 210-1122 all become one value
  • Original values preserved — the imported raw value is never thrown away
Normalization
// country in: "United Kingdom", "U.K.", "uk" out: { name: "United Kingdom", iso: "GB" } // phone (any of these…) in: "+1-515-210-1122" · "0015152101122" in: "515-210-1122" · "+1 (515) 2101122" out: "+15152101122" // E.164

See Subsbooth on your own data.

We don't publish pricing — every deployment is scoped to your list volume, cleanup frequency and platform connections. Send us a message and we'll walk you through it on a real file.

Request access
Platform

Every screen of the console, explained

Subsbooth is organized like a sorting facility: data comes in through Upload, walks the Cleanup line, waits in Review when unsure, and leaves through Send-Ready and Queues — with Reports watching everything. Here is what each area does, in full.

Dashboard List Manager Contacts Upload Upload & Download history Reports & History Users Settings
DASHBOARD

The whole account on one screen

The dashboard shows where every contact across every list and category sits in the sorting line right now — from raw import through to send-ready — plus today's activity and the health of your sending platform connection.

  • Pipeline counters — Not checked, Checking, Clean, Needs review, Recheck, Invalid, each with its share of the total
  • Today's numbers — contacts checked, new suppressions, average time to send-ready, queues running
  • Mailbox provider mix — Apple, Google Workspace, Microsoft, Yahoo and the rest, resolved by known-domain list and by where MX actually points
  • Invalid & review reasons — Suppressed list, Likely typo, DNS error, Spamtrap, Invalid format, Honeytrap, each as a percentage of flagged
  • Top import sources over the last 30 days, so you see which feeds carry the account
  • Sending platform health — connection state, last full sync, transfers in the last 24h, unclear responses held, blocks received today, average batch turnaround
  • Recent line activity — a running feed of imports, syncs and platform suppressions with record counts and outcomes
  • Category & list filter — scope everything above to one category (e.g. iGaming · Casino) or one list
Account overview · all lists
Contacts1,148,206
Send-ready66.9%
Clean812,930 · 70.8%
Needs review46,210 · 4.0%
Recheck12,480 · 1.1%
Invalid255,246 · 22.2%
Checked today218,940
Avg. time to send-ready4m 12s
LIST MANAGER

Lists with a category, a source, and a health score

Every list carries a category (iGaming · Casino, iGaming · Betting, Health · GLP — or your own taxonomy), a source name, a type (File or API) and an owner. Membership is independent: one contact can sit in several lists, and removing it from one never touches the others.

  • Per-list columns — contacts, clean count, consent rate, send-ready rate, last cleanup, last import, created date, status
  • Stale detection — lists with no cleanup in 14+ days are flagged so nothing goes out on old verdicts
  • Merge lists — combining lists keeps blocks, consent and history for every merged contact
  • Bulk import lists — create many lists at once from a file
  • Filters — by owner, category, status and source type (file / API)
  • List detail panel — fields captured (email required, everything else optional), consent breakdown (opted-in / unknown / no consent), and top countries by ISO code
List · GLP Renewal Push #114
Category / SourceHEALTH · GLP / renewal_batch_114
Contacts / Clean184,302 / 131,590
Consent · opted-in86.2%
Send-ready71.4%
Top countriesUS 41.2 · GB 19.0 · CA 12.4
Last cleanup2 min ago
StatusACTIVE
CONTACTS

A global database with affiliate-grade filtering

Contacts live once, globally. Filter across every list or scope to one — on cleanup status and on the tracking fields a professional mailer actually uses: offer, source, destination.

  • Sixteen filters — owner, mailing list, status, country, ISP, consent, language, tag, host/domain, exact offer domain, offer name, exact source, exact destination, source contact ID, duplicate flag, and date range
  • Every row shows the lanes separately — cleanup status, consent, ISP, country (ISO), E.164 phone, offer fields, source, list count
  • Bulk actions from any filter — download the result, save it to a list, or create a sending queue directly from it
  • Add & edit by hand — manual entries walk the same cleanup line as imports; a changed email address is always cleaned again
  • Archive, don't lose — archiving removes a contact from all send-ready lists while keeping its full history
Contact row · fields
email: [email protected] status: Clean · consent: Opted-in isp: Yahoo · country: AU phone: +61412345678 // E.164 offer: luckyspinhub.com · Lucky Spin Hub source: casino_q3_api · lists: 2 actions: Download · Save to list · Create queue
UPLOAD — STEP BY STEP

A three-step wizard that never surprises you

Step 1 — Source. Pick a file (CSV, XLSX, XLS, TSV, TXT or JSON) or point a system at the API. Subsbooth detects rows, columns and encoding, and you set the category, source name and target list up front.

Step 2 — Preview & match. Map each file column to a CRM field: email (required), first/last name, mobile, country, consent status and date, source contact ID. Unmapped columns aren't dropped — they're kept as tags. A live preview shows the first rows already normalized: phones as E.164, countries as name + ISO code.

Step 3 — Confirm. Good rows import; bad rows never stop them. Rejects are isolated and returned with a reason on every line. Cleanup starts automatically for new or changed addresses.

  • Re-imports are idempotent — same file twice never creates uncontrolled duplicates, and can never remove an existing block
  • API imports follow the same three rules with per-contact accepted / updated / rejected results in the response
Column matching · renewal_batch_114.csv
email_addr → Email address ✓ fname → First name ✓ phone_raw → Mobile number ✓ // → E.164 country_txt → Country (name + ISO) ✓ opt_in_flag → Consent status ✓ src_ref_id → Source contact ID promo_code → unmapped — kept as tag 18,204 rows · 11 columns · UTF-8
UPLOAD & DOWNLOAD HISTORY

Every run and every export, accounted for

Upload history shows each import run with who ran it, when, how long it took, and exactly where every row landed — added, invalid, duplicate, or caught by a contact, domain, or word suppression. Download history shows every export you've generated, whether it's been pulled yet, and how many rows it covers.

  • Per-run breakdown — total · added · invalid · duplicate · suppressed by contact · by domain · by words
  • Filter runs by user, list and date range
  • Export tracking — created at, downloaded at (or "Not downloaded"), processed vs. total rows
  • Named exports — e.g. "DNS Invalid Suppressed Merged", "full send-ready" — so files stay identifiable weeks later
Import run · 2026-07-17 09:02
Total rows512,607
Added508,206
Invalid315
Duplicate0
Suppressed · contact164
Suppressed · domain3,323
Suppressed · words328
Duration01:00:52
REPORTS & HISTORY

Four lanes, never merged into one score

Cleanup, consent, internal suppressions and sending platform status are always reported separately — because a single "quality score" hides exactly the thing you need to know.

  • Import, cleanup, send and suppression reports, each with weekly counts and drill-down
  • Activity & audit log — filterable by imports, cleanup, suppressions and platform events, with actor, time, event and list on every line
  • Per-contact history — a timeline of every important change: imported by whom, cleanup verdict and why, added to send-ready, passed to platform in which batch, platform status received — each stamped with who or what made the change
  • One-click exports — send-ready contacts, excluded with reasons, all cleanup results, and import reports
Contact history · [email protected]
07-15 09:41 Imported via file import 07-15 09:41 Clean — MX → Apple cleanup 07-15 09:44 Added to send-ready system 07-15 10:02 Passed to platform b#182 user 07-15 10:06 Status: Send allowed platform
USERS

One clear role today, room for more tomorrow

V1 ships with a single internal user role — every approved user can do everything, and every action is attributable. The user list shows name, email, role, last-active time and status, with invitation and deactivation controls.

  • Attribution everywhere — imports, decisions, transfers and exports carry the user who did them
  • Deactivation removes access instantly without deleting the audit trail
  • Designed for growth — role levels and approval chains are a planned extension that won't require rebuilding the foundation
Users
J. WalcottACTIVE · just now
Priya NandanACTIVE · 2 days ago
Marcus LeeINACTIVE · 14 days
SETTINGS

Account-wide defaults, list-level overrides

Defaults apply everywhere unless a list overrides them — so policy lives in one place and exceptions are deliberate.

  • General — organization, time zone, your category taxonomy, report currency
  • Notifications — import finished, cleanup finished with totals, weekly suppression digest, and a queue-failure alert that can't be turned off
  • Domain checks — DNS/NS/MX on new domains, a revalidation window (e.g. every 30 days), and cached-result reuse inside that window
  • Cleanup defaults — auto-run after import, role-address handling (review vs. block), and whether consent carries to a corrected address (off by default — a corrected address starts with no assumed consent)
  • Sending defaults — throttle (1,000 rec/min default), recheck-before-transfer, full status sync frequency
  • Data retention — how long to keep invalid contacts (e.g. 180 days), suppressed contacts (indefinitely, so blocks never resurface), import history, plus auto-delete on a confirmed request
  • Security & access — re-authentication for large exports, IP allowlists for API keys, audit-log export for compliance review
Defaults in force
Auto-run cleanup after importON
Role address auto-blockREVIEW ONLY
Consent to corrected addressOFF
Domain revalidationevery 30 days
Recheck before transferENABLED
Keep suppressed contactsindefinitely
Re-auth for exports > 50K rowsON

Want the full walkthrough?

We'll take one of your real files through the whole line — import, cleanup, review, queue — on a call.

Book a walkthrough
Cleanup Engine

Verdicts you can defend, reasons you can read

The engine never guesses and never probes. It builds every verdict from format rules, DNS reality, reference data and your own suppression rules — and writes the reason down in plain language. No HELO, no live SMTP.

The six stages Rule sets per list Domain validation Review queue Suppression system Result taxonomy Send-ready

What gets checked, stage by stage

@

Format & syntax

Missing or doubled @ signs, empty local parts, invalid dots, spaces, broken quotes, illegal characters, over-length addresses, and unsupported international forms — with "unsupported" and "invalid" reported as different reasons.

≡

Basic hygiene

Leading/trailing spaces and hidden broken characters stripped; a consistent matching form created; the original imported value always kept. The part before the @ is never altered by provider-specific folklore — no dot-stripping, no plus-tag removal.

×2

Duplicates

Repeats inside one file, matches against the whole CRM, and per-list membership checks — matched on source contact ID when available, plus agreed email rules. Merges preserve list membership, consent, blocks and history. Unsafe matches go to human review, never auto-merged.

~

Likely typos

Common-domain mistakes detected against reference data — outlok.com is one character from outlook.com, gmial.com is a transposition of gmail.com. Only the domain spelling is suggested; the part before the @ is untouched, and no account confirmation is ever claimed.

NS

DNS · NS · MX

Domain existence (NXDOMAIN = gone), working name servers, MX records, Null MX ("this domain accepts no mail"), and standard A/AAAA fallback when no MX exists but a valid route does. All mail routes are tried before a domain fails; one working route is enough.

!

Risk flags

Disposable domains (synced daily from a public reference feed), temporary inbox services, role addresses (sales@, admin@, support@), and your blocked domains. You decide per category which flags hard-block and which only ask for review.

RULE SETS

Rules are configured per list, not hard-coded

Each list carries its own rule set. Turn checks on or off, and choose whether a rule blocks or only flags — without touching the core, and without a rebuild. A Casino list can auto-block role addresses while a Health list sends them to review.

  • Toggleable checks — format & syntax, duplicate match, typo suggestion, DNS/NS/MX + Null MX, suppressions, word & regex patterns
  • Block vs. review per rule — e.g. "role address: review only" on one list, "block" on another
  • Run on any scope — one import batch, one list, or a selected set of contacts
  • Live run telemetry — rows queued, completed, and how many domain results were served from cache
  • New rules can be added later without replacing the pipeline — the flexibility is designed in
Rule set · GLP Renewal Push #114
Format & syntaxON
Duplicate matchON
Domain typo suggestON
DNS / NS / MX + Null MXON
Contact / domain suppressionsON
Word & regex suppressions14 PATTERNS
Role address (sales@, admin@)REVIEW ONLY
DOMAIN VALIDATION

How a domain verdict is actually reached

Every possibility has a defined outcome — and temporary problems are never converted into permanent failures. One recent result is reused for every contact on the same domain until the revalidation window you set (e.g. 30 days) passes.

DomainNXDOMAINNSMXA/AAAA fallbackVerdict
gmail.comnookok—ACCEPTED
outlok.comnooknone foundnone foundNEEDS REVIEW
theirdomainxyz.comyes———INVALID
brandmail.conookNull MX—ACCEPTS NO MAIL
smallhost.ionotimeoutSERVFAIL—TEMPORARY — RECHECK

A live domain status screen

Every domain the account has ever seen, with its last-checked time, current status (Clean, DNS invalid, Suppressed) and reason — plus one-click revalidation and a "revalidate stale" bulk action.

Status list, not block list

Domain validation records what DNS says. Blocking a domain is a separate, deliberate act under Suppressions → Domains — the two are never mixed, so a DNS hiccup can't become a block.

Shared cache, fewer lookups

Results are shared across all lists. A run over 18,000 rows might reuse 4,000+ same-domain results — faster cleanup, less DNS noise, identical verdicts for identical domains.

NEEDS REVIEW

Four queues, one rule: nothing changes on its own

Everything the engine can't settle safely lands in a tabbed review queue, sorted by what kind of decision is needed. Each item shows the original value, the suggestion (if any), and the reason in plain words.

  • Typo suggestions — accept & re-clean, or reject. Accepted addresses go through the full pipeline again from stage one
  • Unmatched duplicates — when the source contact ID is missing and records can't be merged safely, you compare the candidates and pick, or keep them separate
  • Role addresses — keep and mark reviewed, or suppress, following each list's own rule
  • Unresolved MX — domains where mail routing couldn't be settled, held for a human call
  • Careful bulk actions — accept selected, accept all in a tab, or act on a filter — but never on the entire queue blind. Every decision lands in the contact's history with who and when
Review queue · 7,244 waiting
Typo suggestions4,910
Unmatched duplicates1,340
Role addresses610
Unresolved MX384
m.ellison@outlok.com → m.ellison@outlook.com "outlok.com" is one character from "outlook.com", a domain that receives mail. Only the domain spelling is suggested. [ Accept & re-clean ] [ Reject ]
SUPPRESSION SYSTEM

Four tabs that decide who never gets mailed

A suppression always wins over a Clean result. Imports, edits and cleanup can never remove one silently — and removing one block never removes another that's still active.

✉

Contacts

Individual do-not-send entries, added by hand, by file upload, by cleanup rules, or received from the sending platform. Each keeps its scope (all lists or one list), reason, source and date. An all-list suppression beats every list membership; a one-list suppression leaves other lists untouched.

◉

Domains

Block entire domains — disposable inbox services, competitor domains, Null MX domains — again scoped to all lists or one. Each entry shows how many contacts it currently matches, so you see the impact before and after. Bulk upload supported.

.*

Words & regex

Keyword and full regex patterns matched against the email address, first name, or last name — each independently switchable per pattern. Catch trap patterns (^spamtrap|honeypot@…), throwaway TLDs (\.xyz|\.top|\.click…), test data, gibberish local parts and repeated characters. Every pattern shows its live blocked-match count.

⇄

Integration feeds

Three live sources feed the suppression system: a public disposable-domain reference list synced daily, real-time MX/DNS lookups during cleanup, and blocks pulled from the sending platform's status sync — each with its connection state and last-sync time visible.

Word & regex patterns are evaluated as standard PCRE expressions — the same syntax your existing tools use — so proven rule sets can be moved over as-is.

The result taxonomy

Six cleanup results, two block lanes. Blocks are stored apart from cleanup so a Clean verdict can never quietly erase an unsubscribe.

ResultMeaning
NOT CHECKEDThe current address hasn't completed cleanup. Not checked means not send-ready — no exceptions.
CHECKINGCleanup is running right now.
CLEANNo cleanup rule currently blocks the address. Clean does not automatically mean send-ready — consent and blocks still apply.
NEEDS REVIEWA possible typo, unsafe duplicate merge, role address or risk flag is waiting for a human decision.
RECHECKA temporary problem (timeout, SERVFAIL) stopped a final verdict. Temporary problems are never converted into permanent failures.
INVALIDA permanent email or domain problem was found — with the specific reason attached: invalid format, NXDOMAIN, Null MX, and so on.
INTERNAL BLOCKYour do-not-send block, per list or across all lists, with reason, source and date.
PLATFORM BLOCKThe sending platform said do-not-send — unsubscribe, complaint or permanent delivery block. Stored as received, never reinterpreted.
SEND-READY

Send-ready is a moment, not a label

A contact is send-ready only when cleanup is complete and passing, consent allows the planned email, the contact isn't archived, no internal or platform block is active, and the platform status is current. The list is rechecked the instant before transfer — a contact suppressed between preview and handoff is removed automatically, and the platform never sees it.

  • Exclusions grouped by reason — Invalid, unresolved review, temporary recheck, internal suppression, platform block, no consent — each with count and share
  • Open any excluded contact to see exactly which rule keeps it out
  • Snapshot log — every generated send-ready set is recorded with counts, who generated it, and whether it was used in a transfer or superseded
Excluded · 52,712 of 184,302
Invalid — cleanup39,842 · 75.6%
Needs review — unresolved7,244 · 13.7%
Recheck — temporary2,006 · 3.8%
Internal suppression1,806 · 3.4%
No consent on file1,502 · 2.9%
Sending platform block312 · 0.6%
Send-ready131,590 · 71.4%
Honesty by design

What Subsbooth deliberately does not do

Some things sound like features but are really liabilities. We leave them out on purpose.

No live SMTP / HELO probing

Subsbooth never connects to mailboxes to "test" them. Active probing burns sender reputation and trips traps. Verdicts come from DNS records, MX reality and reference data instead.

No address guessing or scraping

Subsbooth never finds, buys, scrapes or invents email addresses. It cleans the data you already lawfully hold — nothing else.

No inbox guarantees

No tool can honestly guarantee that a mailbox belongs to a specific person or that a message will reach the inbox. Subsbooth doesn't pretend to.

No bounce reinterpretation

Your sending platform reads raw bounces and makes delivery decisions. Subsbooth stores and obeys the clear status it returns — it never second-guesses it.

Curious what your list really looks like?

Send a sample through the engine and get the full verdict breakdown — Clean, Review, Recheck, Invalid — with reasons on every row.

Run a sample
Integrations & API

Clean lists, delivered wherever you send

Export files, push over API, or fire webhooks into any marketing platform. Build throttled queues from any filter, map or create custom fields on the target side, and get clear statuses back — with a full sync to catch anything missed.

Outbound Queues & throttling Batch & contact logs Status feedback Platform connections API access
OUTBOUND

Three ways out, one set of rules

However contacts leave Subsbooth — file export, direct API push, or webhook — they pass the same final send-ready check first. Only approved contacts cross the boundary, and every one gets tagged internally: Sent to marketing app — Yes/No.

  • File export in the format your platform expects, with result and reason columns included
  • API / webhook delivery usable with any marketing platform — Sendbooth, MW, or whatever you run
  • Custom field mapping — choose exactly which fields travel, and create tags or custom fields on the platform side through its own API when they don't exist yet
  • Country ships as ISO Alpha-2 — segments on the platform are built on GB, not on free-text country names
  • Phones ship as E.164 — one canonical format, whatever the file looked like
Handoff payload · excerpt
{ "email": "[email protected]", "first_name": "Jordan", "country": "GB", // ISO Alpha-2 "phone": "+447700900123", // E.164 "list_id": "glp-renewal-114", "custom_fields": { "tag": "glp_renewal_114" } }
QUEUES & THROTTLING

Build a queue from any column, then set the pace

A queue starts as a filter — ISP, country, source, segment, or any column on the list — and becomes a controlled outbound stream. You choose the destination, map the custom fields, and decide exactly how fast records leave.

  • Filter-driven — e.g. "ISP: Google + Outlook · Country: US, CA, GB" matches 58,220 contacts, ready to queue
  • System default throttle — 1,000 records/minute, tuned to avoid timeouts
  • High volume mode — 10,000 records/minute when the destination can take it
  • Randomized interval — set a min/max delay in milliseconds between individual sends, so the destination never sees a flat, bot-like rate
  • Live progress — sent vs. matched, real throughput, failures, ETA, and how many contacts have the "sent to app" tag applied
  • Pause, resume, edit — timing can be changed on a running queue; a paused queue resumes where it stopped
queue_00042 · GLP Renewal Push #114
Filterisp: google,outlook · geo: US,CA,GB
Matched contacts58,220
DestinationSyncBooth · 6 fields mapped
Throttle998 rec/min actual
Progress36,680 / 58,220 · ETA 6 min
Failed12
"Sent to app" tag applied36,668
SENDING LOGS

Two log levels: per batch, and per contact

The batch log shows every chunk that left a queue — started, finished, records, accepted, failed, and the platform's response. An unclear transfer is never shown as successful: unclear records are held, and a retried batch can't create duplicate sends.

The contact log goes one level deeper: the exact API request and response for every single contact, timestamped, with full payloads a click away. When a platform disputes what it received, you have the receipt.

  • Batch responses handled — accepted · partial with unclear records held · timeout with safe requeue
  • Per-contact request/response pairs — the JSON that went out and the subscriber ID that came back
  • Idempotent retries — a requeued batch re-sends only what was never confirmed
Batch log · queue_00042
#00182 1,000 → 1,000 accepted #00181 1,000 → 1,000 accepted #00180 1,000 → 982 ok · 18 unclear — held #00179 1,000 → timeout — requeued, no dupes // contact level req: {"EMAIL":"…","FNAME":"…","COUNTRY":"KE"} res: {"status":"success", "subscriber_uid":"sv8687qw7y192"}
STATUS FEEDBACK

Clear statuses in, never raw bounces

The sending platform owns delivery decisions. It returns clear contact statuses that Subsbooth stores and enforces — each identified by contact, status, simple reason, effective time and scope. Subsbooth never reads or reinterprets raw bounce messages.

  • Statuses handled — send allowed · do not send · unsubscribed · complaint · permanent delivery block · platform block removed
  • Idempotent & ordered — the same update twice changes a contact once; an old update never overwrites a newer status
  • No guessing — an update that can't be matched safely changes nobody; unmatched records are shown for review
  • Block removal is surgical — a platform update that removes a block removes only the matching platform block; unsubscribes and internal suppressions stay
  • Full status sync — on demand or on a schedule (e.g. every 4 hours), comparing Subsbooth's status against the platform's and recovering anything missed
Inbound status · applied
event: "unsubscribed" contact: [email protected] reason: "user clicked unsubscribe" effective: 2026-07-14T09:31:02Z scope: all lists result: suppression added · removed from all send-ready lists // platform health, right now last sync: 09:12 today · unclear held: 18 blocks received today: 312
PLATFORM CONNECTIONS

One active platform, cleanly bounded

V1 connects one sending platform at a time — deliberately. The connection screen shows the platform, its auth method, how many custom fields are synced, and the last status sync. A second destination slot is visible and ready; the architecture supports switching or adding platforms later without touching the contact and cleanup foundation.

  • Vendor-neutral by design — the platform must accept the agreed contacts and return the agreed statuses; no vendor is baked in
  • Outbound webhook — push status and suppression events to your own endpoint as they happen
  • Suppression feeds live separately — inbound reference feeds are under Suppressions; this screen is destinations only
Integrations
SyncBoothCONNECTED · API KEY
Custom fields synced6
Last status sync09:12 today
MWREADY TO CONNECT
Outbound webhookACTIVE · status, suppression
API ACCESS

Import and query without leaving your systems

The API accepts the same contact and list fields as file import and runs the exact same matching, cleanup and block rules — nothing skips the line. Keys are scoped, rate-limited, revocable, and can be restricted to approved IP ranges.

  • Per-contact results in every response — accepted, updated, or rejected with a plain reason
  • Category + source set by the caller on every list, so API data is as traceable as files
  • Idempotent by design — re-sending the same data never creates uncontrolled duplicates and can never remove an existing block
  • Key management — reveal, regenerate, rate limit visible (e.g. 120 req/min), creation date tracked
POST /v1/contacts
curl -X POST https://api.subsbooth.com/v1/contacts \ -H "Authorization: Bearer sb_live_xxxx" \ -d '{ "email": "[email protected]", "list_id": 701, "source": "renewal_batch_114", "country": "US", "mobile": "+15152101122" }' // response { "result": "accepted", "cleanup": "queued" }

Connecting a specific platform?

Tell us which sending platform and source systems you use — we'll map the fields, statuses and sync flow with you before anything is built.

Discuss your stack
Security & GDPR

Built for lists that must stay lawful

Subsbooth treats consent, suppression and auditability as core data — not afterthoughts. Here is how the platform supports your GDPR and e-privacy obligations.

Privacy by design, in the product itself

✓

Consent as first-class data

Consent or subscription status and its date travel with every contact. A contact without consent information that allows the planned email is never send-ready — the engine enforces it, not a checklist.

⊘

Suppression that cannot be undone by accident

Unsubscribes, complaints and do-not-send blocks survive imports, edits and cleanup. No Clean verdict, no re-import, no sync can silently remove them.

≣

Full audit trail

Every important change records what happened, when, and whether a user, an import, cleanup or the sending platform did it — supporting your accountability obligations under Art. 5(2) GDPR.

↧

Data minimization

Only the email address is required. Everything else is optional and agreed in advance. Subsbooth never enriches, buys, scrapes or guesses personal data it wasn't given.

⌫

Retention & erasure on your rules

Keep-and-delete rules are defined by you, the controller, and applied by the platform — including export of a contact's data and removal on request, supporting data-subject rights (Art. 15–17).

◇

No covert processing

No live SMTP probing, no mailbox verification pings, no tracking pixels inside Subsbooth. Domain-level DNS/MX lookups are the only external checks — they involve domains, not people.

Roles and responsibilities

Clear lines keep compliance simple.

RoleWho
Data controllerYou, the customer. You decide what contact data is processed, on what lawful basis, and for how long. You confirm you have the right to email the people on your lists — Subsbooth does not and cannot make that legal judgment for you.
Data processorSubsbooth. We process contact data only on your documented instructions, for the purposes of import, cleanup, suppression, handoff and reporting described in the platform.
Sub-processorsHosting and infrastructure providers under written agreements with equivalent safeguards. The current list is available on request and provided with your DPA.
Data processing agreementA GDPR Art. 28 DPA, including standard contractual clauses where transfers outside the EEA apply, is part of every customer agreement.

Operational security

Access control

Only approved internal users can access the console. API access uses scoped keys that can be rotated and revoked. Every session and API call is attributable.

Encryption

Data is encrypted in transit (TLS 1.2+) and at rest. Exports are generated on demand and access-logged.

Resilience

Interrupted imports, cleanups, transfers and syncs resume safely and visibly — no half-finished state pretending to be complete, no lost blocks during recovery.

Breach handling

Documented incident response with processor notification duties under GDPR Art. 33 reflected in the DPA — we notify you without undue delay so you can meet your own deadlines.

Need our DPA, sub-processor list, or security documentation for your vendor review? Contact us — we'll send the current versions.
Contact

Let's scope it to your lists

We don't publish pricing, because no two mailing operations are alike. Tell us about your volume, sources and sending platform — we'll come back within one business day with a walkthrough and a proposal.

@
Sales & walkthroughs

[email protected] — demos, scoping, proposals

?
Support

[email protected] — existing customers, console & API

§
Privacy & legal

[email protected] — DPAs, data-subject requests, security reviews

⏱
Response time

Within one business day, Monday–Friday.

Prefer email? Include your approximate list size, import frequency and sending platform — it lets us skip a call and answer precisely.
Thanks — your message is ready. We'll reply within one business day.

By sending, you agree we may use your details to respond to your inquiry, as described in our Privacy Policy.