Follow these steps at your club’s own website. Available screens and actions depend on your account’s role and the programs your club has enabled.
Overview
Every member-facing email or text. Dues receipts, renewal reminders, camp confirmations, ticket replies, workflow messages, newsletter campaigns. Goes out through one shared send engine. That engine logs every attempt and enforces the same opt-out rules no matter which feature triggered the send. This article explains those rules so you can read a blocked send correctly instead of guessing.
Marketing vs. transactional
A message is one or the other, decided by the feature that sends it. Not by anything the member controls:
Marketing: campaigns (newsletters, one-shot blasts) only.
Transactional: everything else: dues receipts, renewal/dues notices, camp and lap confirmations, waitlist offers, ticket replies, workflow automations, bond and statement notices.
Unsubscribe only blocks marketing mail. A member who clicks "unsubscribe" on a newsletter still gets their dues receipt, renewal reminder, and any workflow email — those are transactional and unsubscribe doesn't touch them. The only things that block transactional mail are a hard bounce or a spam complaint — those block everything, marketing and transactional alike, because they're signals the address itself is a delivery risk, not a preference.
"Email address not confirmed"
A blocked row with this reason is not an opt-out at all: it is an address that arrived from an import (or was typed into the subscriber list by staff) and that nobody at that inbox has confirmed yet. Nothing member-facing reaches it, transactional included: until the person clicks the confirmation link or signs in once. See Email confirmation; the fix is to send (or re-send) the confirmation email from Admin › Member import, not to touch the suppression list.
Reading message-log status
Every send attempt writes one row, whichever of these statuses:
| Status | Meaning |
|---|---|
queued | Materialized for a campaign send, not yet attempted |
sent | Handed to the email/SMS provider |
delivered / opened / clicked | Provider confirmed delivery / engagement (email only, via webhook) |
blocked | Never left the system. Suppressed, opted out, club not yet live, or a platform-wide outbound pause is engaged |
failed | Provider or transport threw an error |
bounced / complained | Provider reported a hard bounce or spam complaint (auto-adds a suppression) |
Where to see it:
A household's Activity tab (
Households → [household] → Activity) lists every send to that household asemail <status>: <subject>orsms <status>: <subject>: for exampleemail blocked: October newsletter. It does not show why it was blocked.A campaign's recipient list (
Campaigns → [campaign], once sending has started) shows a Status badge per recipient plus a Detail column with the actual reason. E.g.suppressed: unsubscribe,suppressed: hard_bounce,suppressed: complaint,suppressed: manual,email_opt_in is false, orplatform outbound pause engaged. .... This is the place to look when you need the reason, not just the fact that something was blocked.
Unsubscribe: one click, no login, two tables stay in sync
Members unsubscribe from a link in any marketing email. No portal login required. That single click does two things atomically: it adds a suppression record for that address, and it flips the matching newsletter-subscriber record to unsubscribed. They can't drift apart, because both updates happen in the same step. The link itself is valid for a limited window (90 days. A fixed platform value, the same for every club, not an org setting) and safely handles being clicked twice: some email providers submit the unsubscribe automatically in addition to the member's own click, and that's harmless.
Staff cannot undo a member's unsubscribe — and today, neither can the member. The admin Suppressions console (/admin/suppressions) can remove a suppression staff added manually there ("stop emailing this address"), and — new as of 2026-08-21 — an admin (that role specifically) can Lift a hard-bounce or complaint row with a written reason, for the case where the underlying cause is fixed: the classic example is a typo'd address that bounced once and has since been corrected on the household's People tab. Lift only after fixing the cause — resuming sends to a genuinely dead address hurts the club's sender reputation. An unsubscribe row still can't be removed by anyone on staff — that's the member's own choice, not a deliverability fact. Re-adding the address on the public newsletter signup form (or in the admin subscribers list) doesn't fix it either: that only re-marks the address as a newsletter audience member, it does not remove the underlying suppression, so marketing sends stay blocked regardless. There is currently no working path, staff or self-serve, to reverse an email unsubscribe — don't promise a member it can be flipped back. Flipping a member's "Email opt-in" checkbox on their household People tab does not reverse an unsubscribe either — that checkbox only affects whether new campaign sends queue them at all, not whether the underlying suppression blocks the actual send.
SMS: opt-in lives per member, not in a suppression table
Unlike email, there is no SMS suppression list. Whether a member gets texted is controlled entirely by their own SMS opt-in flag (edit it per member on the household's People tab, or via a segment filter). Any feature that sends SMS is responsible for checking that flag itself before sending. There's no shared gate like the email suppression check. If you're building or configuring something new that sends SMS, don't assume opt-in is enforced automatically.
SMS also has a fixed daily cap per organization, enforced before every send attempt as a cost guardrail. It is a code constant, not adjustable in Settings — trips are logged as blocked sends and trigger an internal ops alert, not a member-facing error.
Household copies (CC) follow the same suppression rules
A household member (a second adult, a family member) can opt to be copied when the primary contact is contacted. Set per person on the household's People/family record. For email it's a real cc:; for SMS it's a separate text to that person (there's no cc on a text). The copy path runs through the same send engine and honors the same rules:
Each cc address is filtered for that message's kind: a marketing-unsubscribed adult is dropped from a marketing cc but kept on transactional cc, exactly like the primary recipient; a hard bounce/complaint drops it from everything.
The cc list is de-duplicated against the primary recipient and recorded on the message, so the Cc line shows in the Activity email drill-in.
The default is on for household-addressed transactional mail (receipts, invoices, ticket replies). Auth / magic-link email is never copied.
An SMS copy consumes the daily cap once per copy, and still requires that person's own SMS opt-in.
If delivery is paused across the platform
If the message log says a platform-wide outbound pause is engaged, contact Swim Ops support. This is a service-level pause, not a problem with the recipient’s address or preferences. Staff sign-in email remains available.