A campaign in NimbusOS is not a single object. It is a graph: one Campaign row that references a sequence, a sending pool, a contact filter, send limits, platform routing, and a handful of stop conditions. Building your first one well sets the pattern every future campaign will follow. This article walks the full path from new draft to live send, calls out the deliverability gate that catches most first attempts, and lists the fields you should never leave at default.
By the end you will have launched a small cold outreach campaign to your tier A segment, cleared the deliverability brain resume gate, and understood how the platform protects your sending reputation even when you ask it to send aggressively.
Prerequisites
Before you build a campaign, three things must be true.
A sending pool exists. At least one EmailAccountHealth row must show is_active=true and a health score at or above your campaign's minimum. Three to five warmed inboxes is a reasonable floor for a first campaign. One inbox works but puts all of your reputation risk on one mailbox.
A contact segment or filter is defined. You can use a saved Segment, a tag, an ICP tier, or a grade. The smallest useful first campaign targets 50 to 200 contacts from tier A. Going larger with an unwarmed fleet is the most common cause of first campaign failure.
A sequence exists. Even a one step sequence works. The sequence is what the campaign enrolls contacts into. A campaign with no sequence will not launch.
If any of the three is missing, the campaign create screen will block you with a specific message rather than letting you draft a campaign that cannot ship.
Step 1: Pick the Campaign Type
Open /campaigns and click New Campaign. The first choice is campaign_type.
cold_outreach. What you want for almost every first campaign. Aggressive throttling, full deliverability brain supervision, explicit resume gate on launch.
nurture. For contacts who already engaged but have not converted. Gentler throttling, looser resume gate, assumes warmer rapport.
re_engagement. For contacts who went quiet. Lower send limits, enforced cooling off between touches, bounce tolerance lower than cold outreach.
warmup. An internal type used by the warmup engine. You do not create warmup campaigns manually; they exist so the sending fleet has a training ground.
For your first campaign pick cold_outreach. Get a feel for how the deliverability gate behaves. Then branch into the other types as your program matures.
Step 2: Attach the Sequence
Every campaign points at one EmailSequence. You can create the sequence from the campaign wizard if you have not built one yet, but it is cleaner to build sequences at /sequences first.
For a first campaign a two step sequence is usually right. Step 1 is a cold opener. Step 2 is a one line follow up three business days later if no reply.
Two things to confirm on the sequence before attaching.
Every step has a template. Empty step templates are the most common reason a launched campaign sits idle: the send worker skips steps with no content and logs a warning.
The sequence has stop_if_replied=true on at least one step. Otherwise a sequence will keep sending even after a reply lands in the unified inbox.
Step 3: Choose a Sending Pool
A Campaign holds sending_accounts as a many to many relation to EmailAccountHealth. You can pick individual accounts or a named pool.
For a first campaign, let NimbusOS recommend the pool. The recommendation algorithm reads every active EmailAccountHealth row, filters by the campaign's minimum health score, and ranks by recent deliverability and available send budget. The top N (where N is configurable per campaign) get selected.
Two settings matter for rotation.
Per account daily cap. Each inbox has a daily_send_limit. The campaign honors the lower of the campaign limit and the per inbox limit. Starting cap on a freshly warmed inbox should be 20 to 40 per day.
Smart gaps. smart_time_gaps=true randomizes the interval between sends inside an inbox's daily window. This is on by default and should stay on. Deterministic send timing is one of the fastest ways to tank a new inbox.
Step 4: Define the Contact Filter
The campaign runs against a contact set you define. Four ways to filter.
By segment. Pick a saved Segment. Dynamic segments update membership as contacts change, so new contacts that match will be enrolled going forward. Static segments enroll only the current members.
By tag. Pick one or more tags. All contacts carrying those tags are enrolled.
By ICP tier. Pick one or more of A, B, C, D. Most first campaigns target A only, or A plus B.
By grade. Pick one or more of A through F. Grade combines tier with engagement and intent, so grade-A is more selective than tier-A.
You can stack filters. A reasonable first campaign filter is "segment=Director and VP titles" AND "icp_tier in A, B" AND "grade in A, B". The preview count shows you exactly how many contacts will enter the sequence once the campaign is live.
Two field settings to tune carefully.
max_new_leads_per_day. Caps how many new contacts the sequence can enroll each day. For a first campaign with a 300 contact segment, 25 per day is healthy. At that pace it takes 12 days to drain the segment, which gives you time to read the responses and adjust copy.
daily_send_limit. Caps total sends (including follow ups) per day across the campaign. Should be a small multiple of max_new_leads_per_day to accommodate follow up steps.
Step 5: Configure Tracking and Stop Conditions
Two tracking flags and three stop conditions. Each has a defensible default.
open_tracking_enabled. On by default. Injects a 1x1 pixel. Some providers mark open tracking as a minor spam signal, but in B2B cold outreach the signal is small enough that the data is worth it.
link_tracking_enabled. On by default. Rewrites links to go through a tracking domain. If you have added a custom tracking domain in /link-tracking, the campaign uses it. Custom tracking domains have much better deliverability than shared ones.
stop_on_reply. On by default. When a contact replies, the sequence halts for that contact.
stop_on_domain_reply. Off by default. When any contact at the same company domain replies, the sequence halts for every contact at that domain. Very useful when running multi stakeholder outreach; you do not want to hit the whole company when the VP of Sales already replied.
stop_on_unsubscribe. On by default and non configurable. Required for CAN-SPAM and GDPR compliance.
Step 6: Pick the Sending Platform
NimbusOS can route sends through several platforms. The platform field on the campaign selects.
ReachInbox. Default. The platform NimbusOS ships against natively. Full bidirectional sync including warmup analytics, reply events, and bounce classification. If you are not sure, pick this.
Smartlead. Route through a connected Smartlead account. NimbusOS owns the campaign definition; the send happens in Smartlead.
Instantly. Same pattern as Smartlead.
Lemlist. Same pattern.
Native. Skip any intermediary and send directly from a connected Gmail, Microsoft 365, or SMTP account. This path is slower at scale but gives you full ownership of every send.
The platform choice does not change how the campaign is defined in NimbusOS. It changes how the send is executed downstream.
Step 7: The Resume Gate Check
Click Launch. Before the campaign moves to active status, the deliverability brain runs the resume gate check.
The gate has three hard conditions that all must be true.
At least 20 inboxes at stage 3 or higher. Stage is computed by get_inbox_stage() using days warming and cumulative warmup sends. Stage 3 is the point where the inbox has enough history to send cold safely.
At least 25 percent of the fleet at stage 3 or higher. Raw stage count matters, but so does fleet proportion. If you have 200 inboxes but only 20 at stage 3, the fleet is too immature for a new cold launch.
7 day bounce rate under 2 percent. The fleet level bounce rate across all recent sends. Above 2 percent signals list hygiene problems that a new campaign will make worse.
If any condition fails, the launch is blocked with an explicit reason. The gate is not a suggestion. It is a guardrail, and it has saved more sender reputations than any warmup tool.
If the gate fails because of low stage count, the fix is usually time: wait another week for more inboxes to graduate. If it fails because of bounce rate, the fix is list hygiene: run an email verification job against the target segment and re evaluate.
Step 8: Live Monitoring
Once the campaign is active, three surfaces become important.
The campaign detail page. Shows live metrics: total_sent, delivered, opened, clicked, replied, bounced, unsubscribed, spam_complaints. Rates are derived automatically.
The unified inbox. Every reply, bounce, and out of office lands there tagged by the reply intelligence classifier. The first few replies are the fastest feedback on the offer.
The deliverability dashboard. Watch the fleet level NDS score. If it dips by more than 5 points in a day during a new campaign, pause the send and investigate before resuming.
Step 9: Iterating
The first campaign is a learning artifact. Plan to iterate twice.
Iteration 1, after the first 50 sends. Look at bounce rate, spam complaint rate, and reply intent distribution. If bounce rate is over 2 percent, pause and verify. If negative reply rate is much higher than positive, rewrite the subject or opener. If the numbers look healthy, let it keep running.
Iteration 2, after the first 200 sends. Enough volume to A/B test a variant. Create a second campaign with a variant subject line or opener, split the remaining segment, and compare after another 200 sends per variant. A/B testing in NimbusOS is built into /ab-testing with native winner selection.
Frequently Asked Questions
Can I launch a campaign without hitting the resume gate?
Not for cold outreach against contacts who have not opted in. The gate exists because cold outreach on an unwarmed fleet is the fastest way to burn a sending domain. Warmup campaigns, nurture campaigns with prior consent, and internal test campaigns bypass the gate.
How do I test the sequence before launching the full campaign?
Create a test campaign with max_new_leads_per_day=1 and a contact filter of one specific contact (you). Launch. The sequence sends to you. Reply from a different inbox to confirm stop conditions fire. Pause the campaign when done.
What happens when the campaign runs out of contacts?
It transitions to status completed. Sent contacts remain in the sequence until they finish or reply; they continue to receive follow ups. New enrollment stops.
Can I rename a campaign after launch?
Yes. The internal ID does not change. External sync with downstream platforms (ReachInbox, Smartlead) propagates the rename.
Does pausing a campaign stop scheduled follow ups?
Yes. Pause halts every scheduled send for the campaign. Resume re enqueues pending sends at their original schedule. Sends whose scheduled time has passed by more than 24 hours are dropped rather than re queued, to avoid confusing recipients with a delayed follow up.
What to Read Next
Immediately after launching your first campaign, the most useful pages are Campaign Analytics to read the live metrics without guesswork, Reply Intelligence for how replies get classified and routed, and Deliverability Overview for the NDS score and the alerts you should respect.