> ## 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.

# Megaphone Integration

> Auto-publish Megaphone podcast episodes as Ghost posts and import your existing episode library. Available on the Voyager plan and above.

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="voyager+" />

Outpost's Megaphone integration auto-publishes new podcast episodes from your [Megaphone](https://megaphone.fm) shows as Ghost posts. You can also import your full existing episode library, so podcast episodes show up alongside your written content.

## What this integration does

* **Auto-publishes** new episodes as Ghost posts as they go live on Megaphone
* **Imports** your existing episode library as Ghost posts (one-time backfill)
* Creates each post with the episode title, description, and audio player embed
* Publishes according to your configured settings

## Setup

1. In Megaphone, get your API credentials from **Settings → API Access**.
2. In Outpost, open the Megaphone integration and enter:
   * **API Token** — Your Megaphone API token.
   * **Network API URL** — Your Megaphone network API endpoint.
3. Click **Load Available Podcasts** and select which podcasts to sync.
4. Configure the podcast's settings (see below).

## Podcast settings

The integration connects one Megaphone podcast at a time, chosen from a dropdown. For the podcast you select:

| Setting                  | Options                       | Description                                   |
| ------------------------ | ----------------------------- | --------------------------------------------- |
| **Import mode**          | None / New only / All         | Whether to import episodes and which ones     |
| **Ghost publish status** | Draft / Published / Scheduled | Post status for imported episodes             |
| **Embed mode**           | None / Megaphone player       | Whether to embed the audio player in the post |

## Episode-to-post mapping

| Megaphone Field     | Ghost Post Field                                                             |
| ------------------- | ---------------------------------------------------------------------------- |
| Episode title       | Post title                                                                   |
| Episode description | Post excerpt                                                                 |
| Episode notes       | Post body                                                                    |
| Publication date    | Post published date                                                          |
| Audio URL           | Embedded audio player (if enabled)                                           |
| Episode artwork     | Featured image, plus an auto-generated social sharing image for shared links |

Outpost checks Megaphone for new episodes every hour and publishes any it finds according to these settings.

## Re-importing episodes

To import historical episodes, go to **Settings → Megaphone → \[Program] → Import All**. This runs a one-time import of all existing episodes.
