Klaviyo Campaign Scheduling: Four Markets and One Send Calendar That Stays Right
Campaign requests from four markets are scheduled or held under one policy, built in Klaviyo after approval, and reassessed when a market freezes, segments change or templates arrive. The lifecycle manager approves every build and withdrawal.
Four markets, one send calendar and campaigns that change after they are built
Lifecycle marketing takes campaign requests from four market teams in an Airtable base: the offer, the segment, the send date and the template. The scheduling policy decides which ones go out. No two campaigns hit overlapping segments on the same day, each market has a weekly cap, and a campaign needs a template that has passed review. Scheduled campaigns are built in Klaviyo. Held ones wait in the base with their reason.
Most of the work comes after the first build. The German market freezes sends while a pricing change is reviewed. The data team revises two segments, which changes who overlaps with whom. Design assigns templates to campaigns that were waiting for one. Each change can turn a held campaign into a scheduled one that needs building, or a built one into a held one that has to come out of Klaviyo before it sends.
Who works in the room
People
Lifecycle marketing manager
Owns the scheduling policy and approves every build, withdrawal and close-out
Market leads
Request campaigns for their market and decide when a market freezes sends
Data team
Owns segment definitions and confirms each revision
Agents

NovaCampaign planner
Schedules or holds each request under the policy, builds approved campaigns in Klaviyo and withdraws ones that become held
Klaviyo
Airtable
Google Docs
RyanSend plan checker
Checks the coordinator's send plan against the decisions, with one review code per line
Airtable
Google Drive
FinMarket correspondence
Drafts replies to market leads on their own threads and picks up questions from Slack
The send calendar has one Kylon room. Nova is the default agent and owns the decisions and the builds, so a question about whether a campaign goes out on Thursday reaches Nova. Ryan checks the send plan, and Fin handles the market teams' email threads. Nova builds in Klaviyo through a grant the lifecycle manager approved for the room and reads the policy from Google Docs. After each reassessment, Nova posts the changed campaigns in the thread and mentions Ryan to check the plan against them before anyone acts.
How the week's campaigns get decided
Both the scheduling policy and the tier rules are Google Docs, and change notices arrive in the run folder. The withdrawal rule is spelled out in the room guidelines: a built campaign that becomes held is pulled from the schedule and renamed with the team's withdrawn prefix, never deleted.
- Agent works
- Person decides
- Arrives or gets recorded
flowchart TD
requests([Market teams request<br>campaigns in Airtable])
decide["<b>Nova</b> schedules or holds each<br>request under the policy"]
ok1["<b>Lifecycle manager</b> approves<br>before anything is built"]
build["<b>Nova</b> builds scheduled campaigns,<br>then sets follow-up tiers"]
plan["<b>Ryan</b> checks the send plan,<br>one review code per line"]
freeze["<b>Market lead</b><br>confirms a freeze"]
seg["<b>Data team</b> confirms<br>revised segments"]
bt["<b>Nova</b> reassesses held ones<br>with a reviewed template"]
wd["<b>Nova</b> proposes withdrawing<br>built ones, never deleting"]
ov["<b>Nova</b> re-checks them<br>for overlap and cap"]
reply["<b>Fin</b> drafts one reply on<br>the market lead's thread"]
appr["<b>Lifecycle manager</b> approves each<br>build and withdrawal"]
close["<b>Nova</b> writes one note per market"]
sign["<b>Lifecycle manager</b> signs off"]
requests --> decide --> ok1 --> build --> plan
plan --> freeze & seg & bt
freeze --> wd
seg --> ov
bt --> reply
wd & ov & reply --> appr --> close --> sign
class decide,build,plan,bt,wd,ov,reply,close agent
class ok1,freeze,seg,appr,sign person
class requests event
classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42| Stage | What happens | Who acts | Who decides |
|---|---|---|---|
| Decisions | Every request is scheduled or held under the policy, scheduled ones are built in Klaviyo, and follow-up tiers stay blank | Nova, from Airtable | The lifecycle manager approves before anything is built or written |
| Follow-up tiers | Each scheduled campaign gets a follow-up tier under the tier rules | Nova | The lifecycle manager approves |
| Send plan check | The coordinator's send plan is checked against the decisions, one review code per line | Ryan | The coordinator corrects the plan |
| Market freeze | Every campaign for the frozen market is reassessed, and built ones are withdrawn | Nova | The market lead confirms the freeze; the lifecycle manager approves |
| Segment revisions | Campaigns whose segments changed are checked again for overlap and cap | Nova | The data team confirms the segments |
| Template assignments | Held campaigns that now have a reviewed template are reassessed and built if they qualify | Nova, then Fin for the market reply | The lifecycle manager approves; a person sends the reply |
| Close-out | One note per market with what is scheduled, held and withdrawn | Nova | The lifecycle manager signs off |
When a market freezes or a segment is redrawn
The freeze for the German market arrives on Wednesday. Nova reassesses every German campaign, not only the ones going out this week. Two are already built in Klaviyo, so Nova proposes pulling them from the schedule and renaming them with the withdrawn prefix, and does it after the lifecycle manager approves. A German campaign that was already held stays held, with the freeze as its new reason.
A segment revision can cut either way. When the data team narrows a segment, a campaign held for overlap may now clear the policy, and Nova builds it after approval. When a market lead asks about a campaign that moved, Fin drafts one reply on the thread the lead started, names that one campaign, and leaves it for a person to send.
What the checks catch
- A send plan line that schedules a campaign the policy held, which is a wrong entry and not a missing one
- A campaign that moved from held to scheduled but was never built in Klaviyo
- A built campaign that is now held but still on the schedule
- Follow-up tiers filled in on the first pass, before the tier rules apply
- A second reply on the same request, or a reply on the wrong thread
What stays with people
- Approving every build and withdrawal before it touches Klaviyo
- Freezing a market, which the market lead decides
- Confirming segment definitions with the data team
- Sending each reply to a market lead and signing the close-out
Integrations in this workflow
Kylon is not a marketing automation platform and it does not replace Klaviyo. Campaigns stay in Klaviyo and requests stay in Airtable, and the room holds the decisions that connect them.
- Klaviyo holds the campaigns, segments and templates, and builds and withdrawals happen there
- Airtable holds the market teams' requests with each campaign's decision, reason and follow-up tier
- Google Docs holds the scheduling policy and the tier rules
- Google Drive keeps the run folder with the send plan and each change notice
- Gmail carries replies to market leads, sent by a person from Fin's drafts
- Slack is where market teams ask about a campaign's status
Where to start
One market and one week is enough to begin. Connect Klaviyo and the Airtable base to the room, link the policy doc, and put the withdrawal rule in the room guidelines: nothing is built or withdrawn until the lifecycle manager approves, and a withdrawn campaign is renamed, never deleted.
“A campaign that should not send has to come out of Klaviyo, not just off the plan.”
Set it up with your agent
Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.
Set up our campaign scheduling desk in this Room. Take it one step at a time and wait for my OK before you move on. 1. Connect Airtable, Gmail, Google Docs, Google Drive, Klaviyo and Slack. Tell me which ones still need connecting. 2. Ask me who works this desk: the lifecycle marketing manager, the market leads and the data team. Help me invite them to this Room. 3. Build a Campaign Plan App with columns Requested, Held, Approved and Built, one record per campaign request. Fill it from the open requests in Airtable. 4. Check each request against our scheduling policy and tier rules in Google Docs. Propose a decision, a reason and a follow-up tier for each. Flag overlap, cap breaches and missing reviewed templates, and show me the ones that fail. 5. Draft replies to market leads on their own Gmail threads and pick up status questions from Slack. Leave every reply for a person to send. Build or withdraw nothing in Klaviyo until the lifecycle marketing manager approves. Rename withdrawn campaigns with the team prefix. 6. Write our withdrawal rule, the approval order and who confirms what into this Room's guideline so every request and change follows it. 7. After one clean week, offer to turn the reassessment and check sequence into an Automation. Before you start, ask me for our rules one at a time.
Your first company harness. Where humans and agents run your business together.
More Use Cases
View allAd Creative Approvals: A Launch Board That Matches What Is Actually Live
The agency's launch sheet is audited against live Meta Ads campaigns and Instagram posts, every creative gets a status and a launch window on the Miro board, and holds, budget cuts and late approvals are absorbed mid-wave. The desk lead approves every board change.
Ad Delivery Make-Goods: Every Shortfall Settled as a Bonus Placement or a Credit
Insertion orders are reconciled against delivered impressions and contract terms in one Kylon room. Agents work Attio, the Notion delivery report and the Outlook contract threads, re-run bonus allocations when numbers change, and the ad operations lead approves every outcome.





