Guide Notion → MailerLite & Mailchimp

How to write email campaigns in Notion

Nocadi turns a Notion database into branded, ready-to-send email campaigns on MailerLite and Mailchimp. This guide covers the one-time setup and, more importantly, every convention for authoring an email inside Notion: the 📨 columns, which blocks render, how to add buttons and merge variables, and the status flow that ships it.

How Nocadi works

You keep writing where you already work. Notion is the editor; Nocadi is the dispatcher that renders each page into a branded email and pushes it to your platform.

  1. Each row in your Notion campaigns database is one email. The page body is the content; a handful of 📨 columns hold the subject, audience and status.
  2. When you set the row's status to Ready to send, Nocadi renders the page and creates (or updates) a draft campaign in MailerLite or Mailchimp.
  3. You preview it, send yourself a test, and when it is right you set the status to Send to audience to ship it from Notion.
  4. After it goes out, opens, clicks and delivery counts write themselves back into the same Notion row.
The Nocadi dashboard showing connected Notion, platforms and recent campaigns

Nocadi never sends on its own. A change of status builds or refreshes a draft; a real send only happens when you set Send to audience. With team approvals on, that opens a team review first and the sign-off is the gate (see the status flow).

One-time setup

Five steps, once per workspace. After this you stay in Notion.

1. Create your account and organization

Sign up, verify your email, and name your organization. Everything in Nocadi (connections, databases, branding, teammates) lives inside that organization, so you can invite colleagues to share it later.

2. Connect Notion

Connect your Notion workspace and grant Nocadi access to the database you want to use. Be sure to allow Update content: Nocadi needs it to add and maintain the 📨 columns and to write previews and stats back to your rows.

The Notion OAuth screen granting Nocadi read and update access to a workspace

3. Connect MailerLite or Mailchimp

Add a marketing platform on the Connections page. MailerLite connects with an API token; Mailchimp connects with one click through OAuth. Set a default sender name and address while you are there; those become the from-line on every campaign unless a row overrides them.

The Connections page with MailerLite and Mailchimp connected

4. Set your brand

In template settings, set your logo, colors, fonts, content alignment and the footer text. This is the look every email inherits, so you never style anything in Notion itself. Fill in your mailing address here too: it is required for compliance, and it stops MailerLite from appending a second footer of its own.

The email template editor with logo, palette, alignment and footer address

5. Attach your campaigns database

Pick the Notion database to use as your campaigns list. On attach, Nocadi provisions the 📨 columns automatically and fills the audience picker from your connected platforms. You are ready to write.

The Add database dialog listing Notion databases shared with Nocadi

If the attach reports that columns could not be created, your Notion connection is missing Update content. Reconnect Notion, enable that capability, and re-run setup.

The campaign columns Nocadi adds

Nocadi owns a set of properties, all prefixed with the 📨 envelope so they group together and read as app fields. Some you fill in; the rest Nocadi writes for you.

ColumnWho fills itWhat it does
📨 StatusYouDrives the whole flow. You set Draft, Ready to send, Send test, Send to audience; Nocadi writes back In review, Approved, Scheduled, Sent, Rejected.
📨 SubjectYouThe subject line. If left empty, Nocadi uses the Notion page title.
📨 PreviewYouPreheader text shown after the subject in the inbox.
📨 AudienceYouWhich connected list or segment receives the campaign. The platform is read from your pick.
📨 Send atYouOptional. A future date (and time) to schedule the send instead of sending now. Times are UTC. Leave blank to send immediately.
📨 ResultNocadiThe outcome of the last sync, including any error to fix. Read-only.
📨 Preview URLNocadiA link to the in-app preview of the rendered email. Read-only.
📨 Recipients, Delivered, opens…NocadiSend and engagement stats, filled in after the campaign goes out. Read-only.
📨 Stats updatedNocadiWhen those numbers were last refreshed.
A Notion campaigns database showing the 📨 columns Nocadi provisioned

Nocadi only ever adds columns. If you already have a matching column (say a Subject), it reuses it. It never deletes or restructures your data, so it is safe to point at an existing database.

Writing the email in Notion

Write the page body the way you would write any Notion page. Nocadi converts it to email-safe HTML. You never add CSS or HTML; the look comes from your brand template.

Supported blocks

Notion blockHow it renders
Heading 1 / 2 / 3Section headings, following your content alignment.
ParagraphBody text, with bold, italic, links and inline code preserved.
Bulleted / numbered listLists, always kept left-aligned for readability.
To-do listA checklist with ticked and unticked boxes.
QuoteAn indented, accented quote.
CalloutA colored box with its emoji. Multi-line and nested blocks are kept.
CodeA monospace block. One-liners follow your alignment; multi-line code stays left.
DividerA horizontal rule.
ImageAn inline image with its caption. Nocadi rehosts it so the link never expires.
ColumnsSide-by-side on desktop, stacked on mobile.
ToggleFlattened: the summary and its contents both show (email cannot fold).
A Notion campaign page using headings, lists, a callout and an image

Turn a link into a button

There is no button block in Notion, so Nocadi uses a simple rule: a paragraph whose only content is a single link becomes a call-to-action button. Put the link on its own line. The first such button in the email is the filled primary button; any later ones render as outline buttons.

A link on its own line in Notion rendered as a primary button in the email

Images and the hero

Drop images straight into the page. If the very first block is an image, Nocadi promotes it to a full-width hero at the top of the email, under your logo. Other images render inline at their natural size. A Notion image link normally expires within an hour, so Nocadi copies each image to stable storage before sending.

Alignment

Whether headings and paragraphs are centered or left-aligned is set once, in your brand template (centered by default). For readability, lists, quotes and multi-line code always stay left-aligned regardless of that setting.

Blocks that have no email-safe equivalent are dropped silently: tables, embedded databases, videos, files, audio, bookmarks and synced blocks. If something is missing from the rendered email, rebuild it with the supported blocks above.

Personalization variables

Use neutral merge tokens and Nocadi translates them to each platform's native tag on send. Write them anywhere text appears: the subject, the preview, headings, paragraphs, list items and button labels.

Write thisInsertsFallback
{{ first_name }}The recipient's first nameYes
{{ last_name }}The recipient's last nameYes
{{ full_name }}First and last name togetherNo
{{ email }}The recipient's email addressYes

Add a fallback after a pipe for when the field is empty, for example {{ first_name | there }} renders "there" when no first name is on file. Fallbacks apply on MailerLite; Mailchimp ignores them and simply leaves the field blank. The one-click unsubscribe link is added to the footer for you, so you never write it yourself.

You do not have to memorize the exact spelling. Common variants like {{ firstname }}, {{ fname }} and {{ name }} all resolve to the first name.

A Notion subject and body using {{ first_name }} merge tokens

Two rules keep a send from going out broken. Write each token as plain, unformatted text: if bold, italic or a link cuts through the braces, the sync fails. And only the variables above are allowed; an unrecognized token like {{ company }} blocks the sync until you fix it. The exact reason always shows up in 📨 Result. Tokens written inside a code block are left literal, so you can document syntax safely.

Sending: the 📨 Status flow

The 📨 Status select is the control surface, and it holds two kinds of value: the commands you set to drive Nocadi, and the states Nocadi writes back so the row always reflects what happened.

You set these

StatusWhat happens
DraftNothing leaves Notion. Write and edit freely.
Ready to sendNocadi builds or updates the draft campaign on your platform. Edit the page and it re-syncs.
Send testEmails a live preview to you, then returns the row to Draft.
Send to audienceDispatches the campaign to the whole audience. With team approvals on, it starts a review first and sends after sign-off.

Nocadi sets these (read-only)

StatusWhat it means
In reviewTeam approvals are on and the send is paused while approvers sign off. 📨 Result tracks who is still pending, and each approver is emailed the campaign.
ApprovedYour team approved the campaign; it sends (or schedules) automatically.
ScheduledQueued for the 📨 Send at time. Change the time to reschedule, or set Status back to Draft (or clear 📨 Send at) to cancel.
SentThe campaign has gone out.
RejectedAn approver blocked the send. The reason is written to 📨 Result. Edit the campaign and set Status back to Send to audience to start a fresh review.
The 📨 Status select open, showing the commands you set (Draft, Ready to send, Send test, Send to audience) and the states Nocadi writes back (In review, Approved, Scheduled, Sent, Rejected)

Choose the audience

Set 📨 Audience from its drop-down. Nocadi keeps that list in sync with your connected platforms, and each option is namespaced by platform, for example MailerLite — Newsletter. Because the platform is read from your pick, there is no separate destination column to set.

The 📨 Audience drop-down showing namespaced options from each connected platform

Schedule a future send

To send later instead of right away, set a future date in 📨 Send at before you move Status to Send to audience. Nocadi hands the finished campaign to your platform right away, and your platform delivers it at the 📨 Send at time; the row shows Scheduled until it goes out. Include a time for precise control; leave 📨 Send at blank to send immediately. Reschedule by changing the time, or cancel by clearing the date or setting Status back to Draft.

Scheduled times are read in UTC. Nocadi has no per-account time zone, so 2:00 PM means 14:00 UTC, and a date with no time goes out at 00:00 (midnight) UTC that day. If you are not on UTC, convert your intended local time to UTC when you set it, or turn on Notion's own time-zone option for that date and Nocadi will honor the offset.

Setting Status to Send to audience dispatches to the whole audience, so set it deliberately. The send is irreversible, but it is guarded against duplicates: the same campaign can never go to the same audience twice. Want a required sign-off before anything goes out? Turn on team approvals below.

Team approvals

Approvals are optional and off by default. An organization owner or admin can turn them on under Settings, Approvals, choose which teammates can approve, and set how many of them must sign off before a campaign goes out.

With approvals on, Send to audience no longer sends straight away. The row moves to In review and every approver is emailed the full campaign with an Open in Notion link and a one-click approve or reject link, and 📨 Result shows who is still pending. Once enough approve, the row turns Approved and the campaign goes out exactly once. A single rejection blocks it, moves the row to Rejected, and writes the reason to 📨 Result.

Approvers always sign off on the exact content that ships. Edit the campaign after it is in review and the earlier approvals no longer count, so a fresh round starts on the next attempt. Fix a rejected campaign the same way, then set Status back to Send to audience to try again.

Preview and test before you send

Two ways to see exactly what recipients will get, both without leaving the row.

Open 📨 Preview URL for a live, in-app render of the email. The preview highlights every merge variable as a chip and warns you about any unknown or broken token before it can block a send, so you can fix issues early.

To check it in a real inbox, set Status to Send test. Nocadi emails the rendered campaign to you, using the same branding and merge-tag substitution as the real thing. 📨 Result confirms where it went. Test as many times as you like; only Send to audience reaches your real list.

The in-app campaign preview with variable chips and a validation banner

Results write back

After a campaign sends, Nocadi pulls the numbers from your platform and writes them into the same Notion row, so your reporting lives next to your content.

Recipients, deliveries, opens, clicks and other engagement counts fill the 📨 stats columns, and 📨 Stats updated records when they were last refreshed. The numbers keep updating for a while after the send, so your database doubles as a campaign dashboard with no spreadsheets to maintain.

Troubleshooting

Whenever a sync cannot complete, the reason is written to 📨 Result on that row. The common ones:

What you seeThe fix
"Unknown variable(s)…"You used a token Nocadi does not know. Use only the supported variables and check the spelling.
"Variable(s) split by formatting…"Bold, italic or a link cut through a token. Retype it as plain text.
Columns were not created on attachReconnect Notion and grant Update content, then re-run setup.
A second footer in MailerLiteAdd your mailing address in template settings so your footer satisfies the requirement.
A block is missing from the emailIt is an unsupported block (table, video, file…). Rebuild it with a supported block.
The 📨 Result column showing a clear sync error message on a campaign row

Quick reference

Blocks that render

  • Headings, paragraphs
  • Lists, to-dos, quotes
  • Callouts, code, dividers
  • Images, columns, toggles
  • A lone link becomes a button

Variables

  • {{ first_name }}
  • {{ last_name }}
  • {{ full_name }}
  • {{ email }}
  • Fallback: {{ first_name | there }}

Status flow

  • You set:
  • Draft: edit freely
  • Ready to send: build draft
  • Send test: email yourself
  • Send to audience: dispatch
  • Nocadi sets:
  • In review: awaiting sign-off
  • Approved: team signed off
  • Scheduled: queued for Send at
  • Rejected: blocked, see Result
  • Sent: gone out

Ready to write your first campaign?

Connect your Notion workspace and a marketing platform, attach a database, and send your first email without leaving Notion.