MailMoo
Concepts

Campaign

One audience, one piece of content, one sequence.

A campaign is the unit you create, launch and measure. It ties together three things:

PartWhat it is
A lead listWho the campaign goes to
ContentThe video, deck or landing page recipients receive
A sequenceWhat gets sent, on which channel, and when

Each of those is exactly one per campaign. That is the single most useful thing to know about the model: changing the audience, the content or the sequence means a new campaign, not a variant of an existing one.

Why one of each

It keeps attribution honest. Because a campaign has one audience and one sequence, its reply rate means something specific. A campaign that could send three different sequences to five different lists would produce a number nobody could act on.

The practical consequence is that campaigns are cheap and plentiful. Scaling usually means more campaigns, not bigger ones.

Lifecycle

A campaign is a draft until its sequence is started. Building one changes nothing in the world; starting it begins contacting people. Those are separate actions in the app, and separate permissions over the API, for the same reason.

Once running, it can be paused and resumed. Pausing stops further steps going out; it does not undo what was already sent.

Building one over the API

A campaign is built in the order its parts depend on each other, and stays a draft throughout:

  1. campaigns.createDraft creates it with its sender profiles and a sequence, copied from another campaign or built from a template. campaigns.listSenders lists the sender profiles and whether each can still send.
  2. Leads go in with campaigns.leads.bulkEnrollInCampaign for people already in the workspace, or leadFinder.addProspectsToCampaign for new ones.
  3. campaigns.scoreLeads scores them, if they are not scored already.
  4. campaigns.setSequenceActive starts it.

campaigns.rerun does steps 1 and 2 in one call for a campaign's existing leads, and campaigns.copySequence replaces the sequence of a campaign that already exists. Each of these accepts dryRun, which returns what would happen without changing anything.

Metrics

A campaign reports how many leads it holds, how far they have progressed, how much was sent, and how much came back. See Sequences for reading them, and campaigns.getMetrics for fetching them programmatically.

On this page