Campaigns are one-to-many email and SMS sends to a segment of your contacts. Newsletters, product launches, seasonal promos, multi-step drips. Campaigns can be one-shot sends OR multi-step drips with per-step channel switching.
Find them in the sidebar under Campaigns.
Send modes
Every campaign picks one of three send modes:
- Send now — one message, one moment. Choose your audience, write the message, click send.
- Scheduled — same as Send now but fires at a future time. Cron-driven, no client needed open.
- Drip — multiple steps with delays between. Each step can be email OR SMS independently. Exit conditions (open / click / reply) on later steps can short-circuit the rest of the sequence if the contact already engaged.
Channel per step (mixed-channel drips)
In a drip campaign, each step has its own channel toggle. You can build email → SMS → email sequences. Contacts missing the channel needed for a step (e.g. no phone for an SMS step) silently skip that step — the rest of the audience continues unaffected.
Two campaign types
- Email campaign — uses your connected Resend account for the send. Drag-and-drop designer with text blocks, image blocks, button blocks, brand colors, and merge tags. One email, many recipients, your sending domain.
- SMS campaign — uses your connected Twilio account. One SMS body (with merge tags), many recipients. Sent through your default sending number unless you pick another.
Building a campaign
- Campaigns → + New campaign → pick Email or SMS
- Pick a template (optional) — start from a pre-built template (welcome series, win-back, appointment reminder, etc.) and tweak. Or start from scratch.
- Build the message. Email: drag blocks into the canvas, set colors, type your copy, add merge tags via the merge-tag picker. SMS: type the body, watch the segment counter, add merge tags.
- Pick the audience. A campaign sends to either a saved view, a tag, or a custom filter (e.g. all contacts in the "Buyer" pipeline with no activity in 30 days). The recipient count updates live as you tweak the filter.
- Pick the send time. Send now or Schedule for a specific time. Scheduled campaigns fire from the per-minute server cron — no client open required.
- Review and send. Final preview with the first 3 recipients fully merged so you can sanity-check before commit.
Templates
Groundbase ships with a starter set of pre-built campaign templates targeting common service-business scenarios: welcome series, customer reactivation, appointment reminders, post-purchase follow-up, real estate buyer drip, recruiter outreach, monthly newsletter, win-back.
Each template includes the subject line (email) or first message (SMS), suggested audience filter, and the full body with merge tags. Start from one, customize, save your own copy.
Merge tags
Same tags as templates: {{first_name}}, {{last_name}}, {{full_name}}, {{company_name}}, {{email}}, {{phone}}, plus custom fields via {{cf.<field_key>}}. See Email integration for the full list.
Tracking + reporting
Once a campaign sends, the campaign detail page shows:
- Sent / failed counts as the dispatch progresses
- Delivered / bounced (email) — reported back by Resend within seconds of the send. A bounce records the reason, so a permanently dead address is distinguishable from a temporary failure.
- Opens + clicks (email) — only if you have set up tracking in Resend. Both are off until you do; see below.
- Replies — for SMS, when a recipient texts back. For email, when a reply arrives in a mailbox you have connected to Groundbase.
- Opt-outs — unsubscribes and STOP replies are counted and the contact is suppressed from future sends
Turning on open and click tracking
Neither is on by default, and nothing inside Groundbase switches them on. The tracking happens on Resend's side; Groundbase records the events it is sent. If you have never set this up, opens and clicks will read zero no matter how many people open or click.
Both need a tracking subdomain — a subdomain of your sending domain that Resend redirects links through, such as links.yourdomain.com.
In Resend → Domains → your domain → Enable Tracking:
- Enter a subdomain.
linksis a good neutral choice — recipients can see this domain when they hover a link, solinks.reads better thantrack.orclick. - Tick Enable click tracking, Enable open tracking, or both.
- Press Add domain. Resend then gives you a CNAME record.
- Add that record to your DNS and wait for Resend to mark it Verified.
If your DNS is on Cloudflare, Resend's Auto configure adds the record for you. If you add it by hand, it must be DNS only (grey cloud), not Proxied (orange cloud) — a proxied CNAME breaks the redirect and every link in your emails stops working. Cloudflare defaults new CNAMEs to proxied, so this is the most common way the setup fails.
Tracking is applied at send time, so it affects campaigns sent after the record verifies. It is not retroactive, and a campaign sent while the record was still pending will report nothing.
What each one costs you
- Open tracking injects a 1×1 invisible image, which is the only way an open can be measured — so an otherwise image-free email now contains an image. The numbers are also soft: Apple Mail Privacy Protection loads the pixel whether or not anyone read the message, and Gmail proxies images. Treat opens as directional, never as a denominator.
- Click tracking rewrites every link to redirect through your tracking subdomain. That subdomain starts with no reputation of its own, and if your link text displays a URL, the visible text will name a different domain than the link actually points at — a pattern spam filters score against. If you turn click tracking on, avoid bare URLs as link text: write "read the guide" rather than "example.com/guide".
Neither is required. Tagging your links with UTM parameters lets you measure campaign traffic in your analytics without any tracking subdomain — you lose per-recipient attribution, but the links stay clean.
Limits
- Email: governed by your Resend account's send limits (free tier = 100/day, 3,000/month; paid tiers scale up)
- SMS: governed by your Twilio account + your A2P 10DLC campaign caps (see A2P 10DLC)
- Recipient cap per send: 10,000. For anything larger, split into multiple sends or contact support.
Daily send limit, sending windows, and how campaigns share them
Two throttles sit between a campaign and the inbox, and both wait rather than fail. A recipient held back by either stays queued and goes out at the next opportunity — nothing is dropped, and nothing is marked failed.
Daily send limit (Settings → Email) caps how many campaign emails go out per day, counted in your account's timezone. It exists mainly for domain warming: a new sending domain that suddenly emits hundreds of cold emails gets filtered, so you start low and raise it over weeks.
The limit can be set two ways — for the whole account, or for one sending domain.
- An account-wide limit covers every campaign email you send, whatever address it goes out from. If you send from a single domain, this is the only setting you need.
- A per-domain limit applies only to mail from that one domain — 20 a day from a new outreach domain, say, while your established domain runs on its own separate budget.
Reputation attaches to the domain, not to your account, which is why the per-domain setting exists. If you are warming a second domain alongside an established one, a single account-wide number throttles the pair jointly and cannot stop a whole day's allowance landing on the new domain — the exact thing warming is meant to prevent.
A domain with no limit of its own falls back to the account-wide number. That fallback runs one way only, and it is the part worth remembering: once a domain has a limit of its own, the account-wide number no longer governs it. Lowering the account-wide figure from 36 to 20 leaves a domain explicitly set to 36 still sending 36. Settings → Email lists each domain's own limit next to the account figure — when you change either, read the per-domain row rather than the headline number.
Sending window (set per campaign) restricts sending to particular days and hours — Monday to Friday, 1pm to 5pm, for instance. Outside the window, queued recipients wait.
Neither limit belongs to an individual campaign. Several active campaigns share whichever allowance applies to them, and Groundbase interleaves them rather than draining one before starting the next — it takes a recipient from each campaign in turn. With a limit of 20 and four active campaigns, you get roughly five from each, not twenty from the first and nothing from the other three.
This matters most for multi-step drips, because follow-up steps draw on the same daily limit as first sends. As people progress through a sequence, later waves take a growing share of each day's allowance and new prospects enter more slowly. A four-step drip eventually costs four sends per person, so a limit of 20 a day introduces roughly five new people per day once the sequence is fully in flight. If a campaign seems to be crawling, this is usually why — check how much of the day's allowance is going to follow-ups before raising the limit.
AI assistant — draft a campaign
The AI assistant (via Claude + the Groundbase MCP) can draft a full campaign for you. Ask:
Draft a welcome email campaign for new leads, friendly tone, with a CTA to book a discovery call.
It builds the campaign as a draft (subject + body + audience filter), and you review and send. Same merge tags, same templates, same delivery path — Claude just gives you a first draft you'd otherwise type by hand.
Drip step exit conditions — what they mean
Each drip step from step 2 onward has three optional "skip this step if the contact already…" toggles. They live on the step you might want to skip, not on the step that already fired.
- Opened the previous email — only available when the previous step was email. SMS has no open tracking.
- Clicked a link in the previous email — same, email-only. Requires the previous email to have at least one trackable link.
- Replied — works for both email and SMS. For SMS, the reply detection fires when the contact texts your number after the step fired. For email, reply detection requires your "from" email mailbox to be connected to Groundbase via IMAP (otherwise replies go to a black hole and we can't see them).
If you build a 3-step drip with "skip if replied" on step 3, and the contact replied to step 2, step 3 is silently skipped and the contact's campaign journey ends there.
Open tracking caveat
Open tracking is inherently unreliable across the email industry. Apple Mail Privacy Protection auto-fires opens whether the user actually read the email or not. Gmail's image proxy sometimes skips tracking pixels for senders it's seen recently. Outlook is somewhere in the middle.
Use clicks as the more reliable engagement signal — clicks fire on actual user action.
Email reply detection requires IMAP
For drip "exit if replied" to work on email steps, the sender mailbox (the from-address) must be connected to Groundbase via IMAP. If you send from a Resend-only address like hello@yourdomain.com and don't have a mailbox monitoring that address, replies won't be detected — they arrive in a Resend-managed inbox you don't have visibility into.
Three working setups:
- Gmail "Send mail as" alias. In Gmail, add
hello@yourdomain.comas a Send-mail-as alias (via Settings → Accounts) AND set up MX records or Cloudflare Email Routing to forwardhello@yourdomain.comto your Gmail inbox. Then in Groundbase: Settings → Email → Connect, use the underlying Gmail address (not the alias) with an app password. - Real mailbox on your domain (Google Workspace, Microsoft 365, custom IMAP). Connect that mailbox in Groundbase Settings → Email.
- Skip the IMAP route — send from your personal Gmail directly. Less branded, but the inbox is already connected.
If your Inbox in Groundbase isn't loading mail, the same IMAP path that reads your inbox is the path that detects replies — fixing one fixes both.
Footer & unsubscribe
The Footer block in the email designer auto-renders an unsubscribe link, your business address (configurable in Settings → SMS compliance for the legal name), and any custom legal copy. The {{unsubscribe_url}} merge tag gets substituted at send time with a unique per-recipient unsubscribe URL.
Don't remove the Footer block from cold outreach campaigns — CAN-SPAM and CASL require an unsubscribe mechanism + physical address, and the Footer satisfies both.
Suppression — unsubscribed contacts never receive future campaigns
Once a contact clicks unsubscribe, they're added to your suppression list and every future campaign automatically skips them at queue time. There's no per-campaign override — opt-outs are global per user account.
If a contact wants back IN (rare but happens), there's currently no in-app re-subscribe button. They'd need to be removed from the suppression list manually; email support if this comes up.
Send timing in production
Use day or hour delays for real drips. Sub-hour delays (like 3 minutes between steps) work mechanically but make sends look like a marketing automation sequence to Gmail's spam filter, which can push the second email to spam regardless of content. Real-world drips space steps 1–3 days apart.
Cost
Groundbase doesn't charge per send. Email: Resend bills your account directly (free tier covers most small businesses). SMS: Twilio bills your account directly at their per-segment rate. We don't sit between you and the meter on either.