Reach: contacts, lists, and campaigns
Wallu Reach
Reach: contacts, lists, and campaigns
How Wallu Reach stores your contacts, builds lists and segments, and sends email campaigns with A/B testing and per-recipient timing.
Reach: contacts, lists, and campaigns
Wallu Reach is the email marketing side of the platform. You build a list of contacts, design a campaign, and send it — with tracking, A/B testing, and automatic compliance and deliverability guards baked in. This page covers how contacts, lists, and campaigns fit together. For a step-by-step of building and sending one campaign, see Email Campaigns.
You reach it from the Reach area of the dashboard, which is split into sub-views: Dashboard, Campaigns, Lists, Subscribers, Forms, Automations, Templates, Analytics, SMS, Lead scoring, Domains, and Settings.
<!-- SCREENSHOT: Reach dashboard showing email performance chart, quick actions, and recent campaigns -->
Contacts (the Lead database)
Every contact in Reach is stored as a Lead. A lead has:
email(required) and optionalnameandphonestatus— one ofsubscribed,unsubscribed, orbounced. Onlysubscribedleads receive campaigns.source— where the contact came from (e.g.Web Widget,Manual Import, or aForm:name)tags— a JSON array; this is what drives list membership and segmentation (more below)metadata— a JSON blob for any extra fields you carry- consent fields (
consentSource,consentIp,confirmedAt) for tracking how and when the contact opted in
Leads are strictly scoped per account by ownerId, and an email can only exist once per account (email + ownerId is unique), so re-importing the same address won't create duplicates.
Contacts arrive from several places: leads captured by your chat widget, signup form submissions, manual entry, and CSV import. The same Lead table also feeds your Lead Pipeline — Reach and the pipeline read the same underlying contacts.
Importing contacts
In Lists, use Import contacts to upload a .csv. You must create (or select) a list first — the importer attaches each row to that list. It imports row by row, so the results summary reports how many were imported versus failed/duplicates. You can also add a single subscriber manually.
<!-- SCREENSHOT: Import contacts button and CSV upload flow in the Lists view -->
Lists and segmentation
A List is a named container for contacts. When you create a list it gets a name and description; its subscriber count is computed live.
Segmentation in Reach is tag-based. A campaign targets exactly one list, and when it sends, the recipients are the contacts whose tags contain that list's name and whose status is subscribed. This means:
- Moving someone into or out of a segment is a matter of tags.
- The default catch-all is list id
1("All Subscribers") — a campaign left on the default list goes to every subscribed contact in your account.
Because list matching is by name, keep list names distinct — a list called VIP will match any contact tagged with text containing VIP.
List hygiene
Each list has a hygiene score (0–100) and a last-run timestamp. Running a hygiene check (Clean) verifies every active contact on the list without any external API:
- Syntax validation (stricter than a basic regex)
- Disposable-domain detection (a built-in list of ~550 throwaway domains)
- Role-based address detection (
info@,admin@,noreply@,support@, and similar) - MX-record lookup — does the domain actually accept mail?
Contacts that fail are marked bounced (so they're excluded from future sends), and anything already on your suppression list is caught too. The score drops for each invalid or risky address, and you get back a list of the first 50 flagged emails with reasons. Cleaning before a big send is the single cheapest way to protect your sender reputation.
Campaigns
A Campaign holds the email you're sending: name, subject, previewText, HTML content, an optional target listId, and a status that moves through draft → scheduled → sending → sent (or paused / review).
You design the body in the visual email builder (blocks: headers, text, images, buttons, dividers, products, social links) or paste your own HTML. You can save designs as reusable Templates.
A/B testing
A campaign can carry variants — each with its own subject and content. When a campaign has variants, Reach rotates them across your recipients (recipient N gets variant N mod number-of-variants), and tracks sends per variant so you can compare open and click rates.
Scheduling and Perfect Timing
You can send immediately, schedule for a future time (scheduledAt — a scheduler picks it up when due), or enable Perfect Timing. With Perfect Timing on, Reach looks at each recipient's historical email-open times and schedules their copy for the hour of day they're most likely to open. Recipients with no open history fall back to 10:00.
How a send actually runs
When you send, Reach doesn't blast everything at once. It:
- Resolves the recipients (owner-scoped,
subscribed, on the target list) and counts them for billing. - Checks your plan and monthly email allowance.
- Renders each email — merging
{{first_name}},{{name}},{{email}}and a per-recipient signed unsubscribe link — and appends the tracking pixel and click-tracking links. - Enqueues one job per recipient into a background send queue.
A worker then drains the queue with retries, per-provider throttling, and a circuit breaker that auto-pauses the campaign if bounces get too high. Those deliverability and compliance guards are covered in the next article. Campaign stats (sent, delivered, opened, clicked, bounced, unsubscribed) update as the queue drains — see Analytics for the reporting views.
Sender identity and settings
Before your first send, set your sender details in Reach → Settings: from-name, from-email, reply-to, company name, and — required — a physical company mailing address. Reach will hard-block a campaign send if the mailing address is missing, because it's legally required in every marketing email. Domain authentication (SPF/DKIM) is set up in the Domains view; see the deliverability article for details.
Replies land in your inbox
Replies to your campaigns don't vanish. Inbound mail routes through Reach's webhook into the Unified Inbox and the AI reply pipeline, so a customer answering your newsletter becomes a real conversation (with heavy filtering to drop bounces, auto-replies, and mailing-loop noise first).
API
The core endpoints (all require auth):
GET /api/email/campaigns,POST /api/email/campaigns(create/update),DELETE /api/email/campaigns/:idPOST /api/email/campaigns/sendPOST /api/email/test— send yourself a testGET /api/email/statsGET /api/lists,POST /api/lists,DELETE /api/lists/:id,POST /api/lists/:id/cleanGET/POST /api/lists/subscribers,DELETE /api/lists/subscribers/:idGET/POST /api/leads
See the API reference for the full surface. New to the platform? Start with Getting Started.
AI Build Email, deliverability, warmup & suppression
The one-button AI Build Email, plus how Reach protects your sender reputation: suppression, list warmup, domain auth, CAN-SPAM guards, and the bounce circuit breaker.
AI Build Email, deliverability, warmup & suppression
This article covers the AI email builder and the machinery that keeps your mail landing in inboxes instead of spam folders. For the basics of contacts, lists, and campaigns, see the Reach overview and campaigns guide.
AI Build Email
Inside the visual email builder there's a AI Build Email button. Give it a one-line prompt (plus optional tone, goal, and image style), and it designs a complete email in one shot: subject line, preheader, copy, layout, and AI-generated images composited into the design.
How it works:
- The copy and layout are generated as structured blocks (headers, text, buttons, images, products, social links) that drop straight into the builder — not raw HTML you have to clean up.
- Images are generated with Gemini's image model, optimized, and hosted so they load in recipients' inboxes. You choose how many images to allow (0–5).
- It automatically pulls your brand kit from Studio — logo, brand name, and color palette — so buttons and headers match your brand, and your logo can be composited into the hero image.
Requirements and cost
AI Build Email is gated two ways:
- Plan — it requires a Pro or Enterprise plan (the same gate as the AI writer). On the free plan you'll be prompted to upgrade.
- Reach AI Credits — a separate credit pool from your monthly email allowance. Each build costs 1 credit for the copy plus 2 credits per image generated. So a 3-image email costs up to 7 credits. The build modal shows your live balance and a Buy credits link before you spend anything, and if you don't have enough credits for even the copy, it stops before generating.
<!-- SCREENSHOT: AI Build Email modal with prompt field, image count selector, and Reach AI Credit balance -->
One deliberate rule: the AI never produces an image-only email — it always includes real text, because image-only emails hurt deliverability.
Suppression list (never email a bad address again)
Reach keeps a suppression list (the blocklist) and consults it on every send. An address lands on it automatically when:
- It hard-bounces
- The recipient files a spam complaint
- The recipient unsubscribes
Once suppressed, that address is skipped on all future campaigns — even if a duplicate or re-imported lead row for the same email is still marked subscribed. This matters because sending to known-bad addresses is the fastest way to wreck a sending domain's reputation. Bounces and complaints also flip the underlying lead's status to bounced or unsubscribed.
Unsubscribes are one-click and RFC-compliant: every campaign email carries a per-recipient signed unsubscribe link (a leaked link can only unsubscribe its intended recipient, not an arbitrary contact), and one click flips the lead to unsubscribed and adds it to suppression.
CAN-SPAM and compliance guards
Reach enforces the legal basics for you rather than trusting you to remember them:
- Physical address required. If you haven't set a company mailing address in Reach → Settings, a campaign send is blocked with a clear message. When present, the address is appended to every email.
- Unsubscribe link required. If your HTML doesn't already contain an unsubscribe link, Reach appends one automatically.
- First-campaign review. A brand-new account's very first campaign, if it targets more than 50 recipients, is flagged once for review. Look over your recipient list and click Send again to confirm — it's a one-time confirmation gate, not a permanent block.
List warmup for a new sending IP
When you start sending from a fresh IP, blasting your full list on day one gets you throttled or blocklisted by mailbox providers. Reach includes an IP warmup schedule that ramps your allowed daily volume gradually over roughly four weeks:
- Days 1–2: 50/day
- Days 3–4: 100/day
- Days 5–6: 200/day
- Days 7–8: 500/day
- Days 9–12: 1,000/day
- Days 13–16: 2,000/day
- Days 17–20: 5,000/day
- Days 21–24: 10,000/day
- Days 25–28: 25,000/day
- Day 29+: 50,000/day
While warmup is active, sends are capped at the current day's limit. This ramp runs as a backend protection — there isn't a dedicated Warmup view, dashboard, or seed-address screen in the app today, so it isn't something you turn on or configure from a page in the UI. Warmup can also send its own branded seed emails on a schedule (hourly between 08:00–22:00 UTC) to build a positive sending history, but that seed-email job is gated off by default and is not currently running in production.
<!-- SCREENSHOT: the IP warmup ramp schedule — daily send limits stepping up over roughly four weeks -->
Domain authentication (SPF/DKIM)
Authenticated mail is trusted mail. In Reach → Settings / Domains, verify the sending domain of your from-address. Reach provisions the identity and returns the DNS records you need to add at your domain registrar — four in total: an SPF record, a DKIM record, a Return Path, and a DMARC record. SPF is not handled for you on the sending side: you must add a Root SPF record to your root domain's @ record (include:spf.postal.wallu.ai), alongside the other three. Verification status is reported back as not_configured, pending, or verified. Until the records verify, expect worse inbox placement.
Under the hood, Reach sends through a dedicated mail server (Postal) and falls back to Amazon SES if that's unavailable — you don't manage either directly.
The send queue and bounce circuit breaker
Campaigns are never sent in one burst. Each recipient becomes a queued job that a background worker processes with:
- Concurrency limits so you don't spike a provider
- Per-ISP throttling — if a mailbox provider (Gmail, Outlook, Yahoo…) starts rate-limiting, Reach backs off for that domain and retries later
- Automatic retries with exponential backoff on transient failures
- A circuit breaker — if the combined bounce + failure rate on a campaign crosses ~15%, Reach automatically pauses the campaign and cancels the remaining recipients to protect your reputation
This means a bad list self-limits instead of quietly torching your domain. If a campaign shows as paused shortly after starting, the circuit breaker likely tripped — clean the list (see hygiene in the overview) before resuming.
Reputation monitoring
Reach tracks per-account sending reputation and can auto-pause a sender whose metrics go bad. The reputation control panel itself (overview, per-user reputation, pause/unpause, alerts) is an owner/admin-only tool — it's not exposed to regular accounts — but the auto-pause protections it powers apply to every send.
Related
- Email Campaigns — build and send, step by step
- Analytics — opens, clicks, and campaign reporting
- Unified Inbox — where replies land
- Settings — account and sender configuration