> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.outpost.pub/llms.txt
> Use this file to discover all available pages before exploring further.

# Ad Campaigns

> Schedule targeted ad placements on your Ghost post pages, filtered by audience segment and post tags.

export const PlanStatus = ({tier, status, beta, deprecated}) => {
  const variants = {
    luna: {
      bg: "#8340B9",
      color: "#ffffff",
      border: "1px solid #8340B9"
    },
    voyager: {
      bg: "#6B2FA0",
      color: "#ffffff",
      border: "1px solid #6B2FA0"
    },
    "space-station": {
      bg: "transparent",
      color: "#8340B9",
      border: "1px solid #8340B9"
    },
    "all-plans": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    labs: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    beta: {
      bg: "transparent",
      color: "#a16207",
      border: "1px solid #a16207"
    },
    "invite-only": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    bespoke: {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    "outpost-hosted": {
      bg: "transparent",
      color: "#525252",
      border: "1px solid #a3a3a3"
    },
    deprecated: {
      bg: "transparent",
      color: "#b91c1c",
      border: "1px solid #b91c1c"
    }
  };
  const chip = (variant, label) => {
    const s = variants[variant] || variants["all-plans"];
    return <span key={variant + ":" + label} style={{
      display: "inline-flex",
      alignItems: "center",
      padding: "0.15rem 0.55rem",
      fontSize: "0.7rem",
      fontWeight: 700,
      letterSpacing: "0.05em",
      textTransform: "uppercase",
      borderRadius: "3px",
      lineHeight: 1.4,
      whiteSpace: "nowrap",
      backgroundColor: s.bg,
      color: s.color,
      border: s.border
    }}>
        {label}
      </span>;
  };
  const tierLabel = {
    "luna": "Luna",
    "voyager+": "Voyager+",
    "voyager-luna": "Voyager + Luna",
    "space-station+": "Space Station+",
    "all-plans": "All plans"
  };
  const tierVariant = {
    "luna": "luna",
    "voyager+": "voyager",
    "voyager-luna": "voyager",
    "space-station+": "space-station",
    "all-plans": "all-plans"
  };
  const statusLabel = {
    "labs": "Labs",
    "invite-only": "Invite-only",
    "bespoke": "Bespoke",
    "deprecated": "Deprecated",
    "outpost-hosted": "Outpost Hosted"
  };
  return <span style={{
    display: "inline-flex",
    gap: "0.4rem",
    flexWrap: "wrap",
    alignItems: "center",
    margin: "0 0 1.25rem 0"
  }}>
      {tier && chip(tierVariant[tier], tierLabel[tier])}
      {status && chip(status, statusLabel[status])}
      {beta && chip("beta", "Beta")}
      {deprecated && chip("deprecated", "Deprecated")}
    </span>;
};

<PlanStatus tier="luna" status="labs" beta />

<Info>
  Ad Campaigns currently focus on inserting ads into the body of posts. They do not place ads in your theme or in newsletters.
</Info>

Ad Campaigns inject ads into your Ghost post pages, filtered by audience segment and post tags. Each campaign holds one or more ads, runs on a schedule, and is delivered through Outpost's Ghost site plugin — readers see the ads on the live site as they read posts.

<Frame caption="Ad Campaigns list showing campaign name, status, audience, and date range">
  <img src="https://mintcdn.com/outpost-eb0cfbad/Puv2oanajvRKHMQC/images/labs/ad-campaigns-list.png?fit=max&auto=format&n=Puv2oanajvRKHMQC&q=85&s=4708137e7109920c991c3c3a5f788326" alt="Ad Campaigns list with campaign name, enabled status, audience targeting, and active date range" width="3110" height="1431" data-path="images/labs/ad-campaigns-list.png" />
</Frame>

***

## How ad campaigns work

When a reader loads a Ghost post page, Outpost's site plugin runs through the active ad campaigns. If a campaign matches the reader's audience type and the post's tags, its ads are injected into the post body on the live site.

Each campaign contains one or more **ads** (campaign items). Ads can be created inline when building the campaign — you don't need to author them in the CTA library first.

***

## Creating an ad campaign

Go to **Ad Campaigns** under the Labs group in the left navigation and click **New Campaign**.

### Basic settings

| Field                             | Description                                                                                                                                                       |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Off / On**                      | Toggle the campaign on or off. Off campaigns are skipped.                                                                                                         |
| **Campaign Name (internal)**      | Internal label for identifying the campaign. Required.                                                                                                            |
| **Slug**                          | Unique URL-safe identifier for the campaign. Required, unique per site.                                                                                           |
| **Client Name**                   | Optional — name of the advertiser or sponsor.                                                                                                                     |
| **Start Date**                    | When the campaign becomes active. The active window starts up to a day before this date in UTC, so a campaign scheduled to start tomorrow may begin late tonight. |
| **End Date**                      | When the campaign stops running. Optional — leave blank for an open-ended campaign. The active window ends roughly a day after this date in UTC.                  |
| **Timezone**                      | Timezone used for the start and end dates. Defaults to UTC.                                                                                                       |
| **Don't Show on Posts with Tags** | Ghost tags that exclude the campaign from injection.                                                                                                              |
| **Show on Posts with Tags**       | Ghost tags that scope the campaign — only posts with these tags will display ads.                                                                                 |

### Adding ads

Click **Add Ad** inside a campaign to pick the ad format:

* **Banner Ad** — wide horizontal placement.
* **Square Ad** — square placement.
* **HTML** — paste your own HTML for full control.

Each format opens an inline editor where you set the creative, link, and per-ad settings. New ads created this way live as CTAs in the CTA library; you can also add an existing CTA to a campaign by reusing one you've already designed.

### Audience targeting

Each ad in the campaign can target one or more audience types:

| Audience          | Description                                             |
| ----------------- | ------------------------------------------------------- |
| **Unknown**       | Anonymous visitors who are not logged in or recognized. |
| **Free**          | Free members.                                           |
| **Paid**          | Paid subscribers.                                       |
| **Complimentary** | Members with complimentary subscriptions.               |

If no audience is specified, the ad shows to all audience types.

### Tag targeting

| Field                             | Description                                                    |
| --------------------------------- | -------------------------------------------------------------- |
| **Show on Posts with Tags**       | Only run the campaign on Ghost posts tagged with one of these. |
| **Don't Show on Posts with Tags** | Skip posts tagged with one of these.                           |

Tag targeting is optional. If both lists are empty, the campaign runs on every post.

### Site-wide exclusions

The **Site-Wide Exclusions** tab on the Ad Campaigns page lets you set Ghost tags that exclude every campaign for your publication. These global exclusions are merged with each campaign's own "Don't Show" tags, so a tag in either list keeps ads off matching posts.

***

## Campaign status

| Status       | Meaning                                                                             |
| ------------ | ----------------------------------------------------------------------------------- |
| **On**       | Campaign is active. Ads inject on matching posts within the scheduled window.       |
| **Off**      | Campaign is configured but paused. No ads run.                                      |
| **Finished** | The end date has passed and Outpost has marked the campaign finished automatically. |

***

## Ad Tool vs. Ad Campaigns

Ad Campaigns is the scheduled, audience-targeted system. The [In-Post Ad Inserter (Ad Tool)](/features/ad-tool) is a simpler always-on placement system also delivered via the Ghost site plugin.

Both run on the same channel — your live Ghost post pages — and they can overlap. If you have both enabled, take care that placements don't collide on the same post.

***

## Use cases

* **Sponsor takeovers** — Run a sponsor's banner across all paid-tier post views for a fixed window.
* **Upgrade promotions** — Show upgrade ads only to free readers, only on premium-track tagged posts.
* **Cross-promotions** — Promote partner publications to specific audience segments.
* **Seasonal campaigns** — Time-limited promotions with automatic start and end dates.

***

## Related features

<CardGroup cols={2}>
  <Card title="In-Post Ad Inserter" icon="ad" href="/features/ad-tool">
    Always-on ad placement on your Ghost post pages.
  </Card>

  <Card title="Sponsorship Boxes" icon="rectangle-ad" href="/features/sponsorship-boxes">
    Branded sponsor blocks designed for inline post placement.
  </Card>

  <Card title="CTAs" icon="bullhorn" href="/features/ctas">
    The CTA library that holds ad creatives, including ads created from inside Ad Campaigns.
  </Card>

  <Card title="Email Campaigns" icon="paper-plane" href="/features/email-campaigns">
    One-time email sends, separate from Ad Campaigns. Email-injected ads are not currently supported.
  </Card>
</CardGroup>

***

## FAQ

<AccordionGroup>
  <Accordion title="Do Ad Campaigns inject into newsletters or emails?">
    No. The current Beta delivers ads to your Ghost post pages via the site plugin. Newsletters and Outpost-sent emails are not affected. The in-app description on the Ad Campaigns page calls this out explicitly.
  </Accordion>

  <Accordion title="Can I run multiple ad campaigns at once?">
    Yes. Every active campaign that matches a post's tags and the reader's audience type runs on that post. Use tag targeting and audience filters to control which ads appear where.
  </Accordion>

  <Accordion title="What's the difference between Ad Campaigns and Sponsorship Boxes?">
    Ad Campaigns is the scheduled, audience-targeted system delivered via the Ghost site plugin. [Sponsorship Boxes](/features/sponsorship-boxes) are individual sponsor blocks you create once and either insert into a new Ghost draft or copy/paste into an existing post.
  </Accordion>

  <Accordion title="Do I need to create CTAs before creating a campaign?">
    No. You can create a Banner, Square, or HTML ad inline when adding an ad to a campaign. Existing CTAs from your library are also available to reuse.
  </Accordion>
</AccordionGroup>
