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

# OmnyFM Integration

> Auto-publish OmnyFM 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 OmnyFM integration auto-publishes new podcast episodes from your [OmnyFM](https://omny.fm) (Omny Studio) shows as Ghost posts. You can also import your full existing episode library.

## What this integration does

* **Auto-publishes** new episodes as Ghost posts as they go live on OmnyFM
* **Imports** your existing episode library as Ghost posts (one-time backfill)
* Optionally embeds the Omny player
* Configurable publish status

## Setup

1. In Omny Studio, find your **Organization ID** in account settings.
2. In Outpost, open the OmnyFM integration and enter your **Organization ID**.
3. Click **Load Available Programs** and select which programs (shows) to sync.
4. Configure per-program settings.

## Per-program settings

| Setting                  | Options               |
| ------------------------ | --------------------- |
| **Import mode**          | None / New only / All |
| **Ghost publish status** | Draft / Published     |
| **Embed mode**           | None / Omny player    |

## Episode-to-post mapping

| OmnyFM Field        | Ghost Post Field                                                             |
| ------------------- | ---------------------------------------------------------------------------- |
| Episode title       | Post title                                                                   |
| Episode description | Post body                                                                    |
| Clip URL            | Omny embed (if enabled)                                                      |
| Published at        | Post date                                                                    |
| Episode artwork     | Featured image, plus an auto-generated social sharing image for shared links |

Outpost checks OmnyFM for new episodes every hour and publishes any it finds according to your per-program settings.

## Multi-program support

If you have multiple shows on Omny Studio, you can connect and configure each program independently — different import modes and different publish statuses per show.

<Note>
  OmnyFM is used by many radio stations and large-scale podcast networks. If you have a high volume of historical episodes, use the **New only** import mode and manually trigger an import for historical content to avoid creating hundreds of posts at once.
</Note>
