# Campaigns
Source: https://docs.aden.space/docs/help/promote-grow/campaigns

Send, schedule, and track promotional emails, SMS messages, and listen-and-rate promos to contacts from a team, organisation, or the admin panel.
{/* Generated by `bun docs:publish` from docs/features/campaigns.md: edit the spec, not this file. */}

## What it is [#what-it-is]

Campaigns let you reach your audience directly. Write a promotional email or
a short text message, pick which contacts to send it to, and send it now or
schedule it for a specific date and time.

Email campaigns support a rich editor with content blocks. You can embed a
track preview with streaming links, add custom buttons, and personalize each
message with the contact's name. SMS campaigns are plain text with the same
template variables.

You don't have to start from a blank page. The composer's **Choose template**
picker comes stocked with ready-made starting points for the campaigns artists
send most: releasing an album, dropping a single, pitching a song to curators
or press, rewarding superfans with an exclusive first listen, driving pre-saves
before release day, and announcing live dates. Pick one and it fills in the
subject and body with editable copy and the right personalization variables;
your own saved templates live under **My templates** in the same picker.

Both channel types track delivery: opens and clicks per recipient for email,
delivered/failed status per recipient for SMS. Email campaigns also collect
what people write **back**: a sent campaign's detail page lists the replies it
caused, so an answer doesn't vanish into one person's inbox. See
[campaign replies](./campaign-replies.md).

**Promos** are the third channel: send a track or album to DJs, tastemakers
and press, where each recipient gets a personal listen-and-rate link
(1–10 rating + comment) instead of a broadcast email. The campaigns sidebar
filters by channel (All / Email / SMS / Promos), sent promos show their
response count and average rating, and a promo's recipients can be saved as
a contact group so email/SMS campaigns can target the same audience. The
full promo loop (tables, public token page, feedback actions) is documented
in `docs/features/organisations.md` → "Label ops surfaces".

All three channels compose the same way. Promos open a full-page composer at
`/promos/create` inside the campaigns detail pane (the same layout as the email
and SMS composers, not a dialog), and every composer carries a channel switcher
at the top (Email / SMS / Promo) so you can flip between channels in one click.
The switcher is hidden on the admin cross-team flow, which has no promo channel.

**Aden promo network.** A promo's audience is either an external email list or
the Aden promo network: teams that opted in to receive demos from other artists.
A team opts in with the "Receive demo promos" toggle in team settings
(`teams.receive_demo_promos`); once on, it appears in the network's member
picker, tagged with its `teams.genres` for genre targeting. In the composer's
"Send to" switch, "Aden network" lists opted-in teams (searchable, genre-filter
chips, select-all): the sender picks artists but never sees their emails. On
submit the composer sends `networkTeamIds`; `createPromo` re-checks each team's
opt-in and resolves a deliverable address server-side
(`promo_fallback_email` → `email` → first `contact_emails` entry), then runs the
normal per-recipient personal-link/invite pipeline. Combined recipients (emails +
network) are capped at 200 per promo.

## Using it [#using-it]

### Sending an email campaign [#sending-an-email-campaign]

1. Open your team's **Emails** page and click **New campaign**.
2. Give the campaign a subject line and write your content in the editor. Use
   `{{contact.firstName}}` or `{{contact.fullName}}` to personalize. You can
   also insert `{{track.title}}`, `{{track.url}}`, and other track variables if
   the campaign is about a specific track.
3. Type `/` in the body to add music. **Track**, **Album**, **Playlist** and
   **Merch** sit at the top of the menu, open a picker, and drop a card where
   you typed the `/`: cover, title, a link to the public page and the
   streaming icons. The public link goes to the artist's own domain when they
   have one (a domain pointed at that track or album first, then the domain
   serving their profile), otherwise to their Aden page.
4. Optionally click **Signature** in the action bar to insert one of your saved
   email signatures (see the [email signatures](./email-signatures.md) feature)
   into the body. In the rich editor it lands at the cursor; in plain-HTML mode
   it is appended to the source.
5. Choose recipients: individual contact emails or an entire contact group.
6. Optionally set a pace next to the recipient count ("All at once" by
   default): at most N recipients a day. The first batch goes out when you
   send or at the scheduled time, and each next batch 24 hours later, so a
   big list can run over days or weeks. The Send button then reads "Send over
   N days".
7. Click **Send now** to deliver immediately, or **Schedule** to pick a
   future date and time.

After sending, open the campaign from the list to see per-recipient open and
click counts.

### Sending from your own Gmail or Outlook [#sending-from-your-own-gmail-or-outlook]

The **From** field lists two kinds of sender. Aden mail addresses are signed
and delivered by Aden's infrastructure and track opens and clicks. Below them
are the Gmail and Outlook inboxes connected to your team, organisation, or your
own account (Settings → Inboxes). Pick one and the campaign leaves from that
mailbox, lands in its Sent folder, and replies come straight back to it. No
domain setup needed.

Two things to know about sending from your own inbox:

* **Recipients are blind-copied.** Each message goes to up to 50 people as
  BCC, so nobody sees anyone else's address. Copy that uses `{{contact.*}}`
  variables, or AI-personalized versions, is sent one message per person.
* **Providers cap daily sending.** Gmail allows about 500 emails a day for a
  personal account and 2,000 for Google Workspace; Outlook.com allows 300.
  Aden keeps 10% back for your own mail and spreads the rest over as many days
  as the audience needs. The From row tells you how many days a send will take
  and when it finishes, and the Send button reads "Send over N days". Progress
  is visible on the campaign while it runs, including "Paused until …" when a
  day's cap is spent.

Opens and clicks are not tracked for mail sent from a connected inbox. Use an
Aden mail address when you need them, or for very large audiences.

### Sending an SMS campaign [#sending-an-sms-campaign]

1. Go to **Emails → SMS** and click **New SMS**.
2. Write a short message. Use `{{contact.firstName}}` and `{{team.name}}`
   just like in email.
3. Pick recipients (E.164 phone numbers from your contacts).
4. Send immediately or schedule for later.

Delivery status (delivered, failed, segments used) appears in the campaign
detail view after the send completes.

### Saving a draft [#saving-a-draft]

On either the email or SMS composer, save your work at any time without
sending. Drafts appear in the campaign list and can be picked up and sent
later by any team member.

### Collaborating on a draft [#collaborating-on-a-draft]

Draft email campaigns have a status (`pending → in_progress → ready`) that
team members can update to signal where the campaign is in the review process.
Set it from the campaign detail view.

### Personalizing a campaign with AI [#personalizing-a-campaign-with-ai]

The panel uses the chat's model picker (`ChatAiModelSelect`): the same catalog,
with API-priced models gated on the team's own key or usage billing
(`hasApiPricingChatModels` on the emails context, false for org and admin
shells). `personalizeEmail` resolves the model through
`resolveChatLanguageModel` exactly like `/api/chat` and meters
subscription-billed usage with `reportBilledAiUsage`. The composer hands the
panel the email as plain text (`resolveEmailContent().text`) when it opens,
never the rendered HTML document, and a failed generation shows the server's
reason next to "Failed".

In the email composer, **Personalize with AI** rewrites your template into a
unique email per recipient, using everything the workspace knows: your bio,
recent tracks and albums, plus shows, tours, interviews, posts, and achieved
milestones from the last 12 months (each is a toggle, so you control what the
AI can draw from). Every generated email is editable before sending, and
recipients you've emailed before are recognized so the tone reads like a
follow-up instead of a cold intro.

You can also start from the AI assistant (in-app chat or any connected MCP
client like Claude): ask for something like &#x2A;"send a personalized yearly
update to all my bookers with what I released and where I played"*. The
assistant finds the matching contacts (a contact group, a tag, a company, or
criteria like "only engaged contacts"), writes a personal version for each
one from your real releases, shows, and press, and saves everything as a
draft campaign. Nothing is ever sent by the assistant. You review the draft
in the composer and press send yourself. The **Yearly update** template gives
you a ready-made structure for the classic January "here's my year" email to
bookers and promoters.