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

# Audience & fan graph

> Audience intelligence per artist — demographics, top markets, listener geography, social audience overlap, fan momentum. The 'fan graph' is the network view of how fans connect across your roster and storefront.

export const AriaPromptCard = ({prompt, surface = "web"}) => {
  const surfaces = {
    web: {
      href: "https://patchline.ai/dashboard",
      label: "Try in dashboard"
    },
    telegram: {
      href: "https://t.me/AriaMusicBizBot",
      label: "Try in Telegram"
    },
    claude: {
      href: "https://patchline.ai/claude",
      label: "Try in Claude"
    },
    mcp: {
      href: "https://patchline.ai/mcp",
      label: "Install MCP first"
    }
  };
  const s = surfaces[surface] ?? surfaces.web;
  return <div style={{
    display: "flex",
    justifyContent: "space-between",
    alignItems: "center",
    gap: "16px",
    padding: "12px 16px",
    marginBottom: "12px",
    borderRadius: "10px",
    border: "1px solid rgba(255,255,255,0.10)",
    background: "rgba(255,255,255,0.03)"
  }}>
      <code style={{
    fontFamily: "var(--font-family-mono)",
    fontSize: "14px",
    color: "inherit",
    flex: 1
  }}>
        "{prompt}"
      </code>
      <a href={s.href} target="_blank" rel="noopener noreferrer" style={{
    fontSize: "12px",
    fontWeight: 600,
    padding: "6px 12px",
    borderRadius: "999px",
    background: "linear-gradient(92deg, #00E6E2, #0068FF)",
    color: "#FFFFFF",
    textDecoration: "none",
    whiteSpace: "nowrap"
  }}>
        {s.label} →
      </a>
    </div>;
};

export const TierBadge = ({tier}) => {
  const styles = {
    free: {
      label: "Free",
      color: "#A1A1AA"
    },
    starter: {
      label: "Starter+",
      color: "#00E6E2"
    },
    pro: {
      label: "Pro+",
      color: "#0068FF"
    },
    scale: {
      label: "Scale+",
      color: "#7A5BFF"
    },
    enterprise: {
      label: "Enterprise",
      color: "#FF7A59"
    },
    all: {
      label: "All plans",
      color: "#22C55E"
    }
  };
  const t = styles[tier?.toLowerCase()] ?? styles.all;
  return <span style={{
    display: "inline-flex",
    alignItems: "center",
    gap: "4px",
    padding: "2px 10px",
    borderRadius: "999px",
    border: `1px solid ${t.color}40`,
    background: `${t.color}1A`,
    color: t.color,
    fontSize: "12px",
    fontWeight: 600,
    fontFamily: "var(--font-family-mono)",
    verticalAlign: "middle"
  }}>
      {t.label}
    </span>;
};

export const AICallout = ({page}) => {
  const slug = page ?? "";
  const mdUrl = `https://docs.patchline.ai${slug}.md`;
  return <div style={{
    marginTop: "32px",
    padding: "16px 20px",
    borderRadius: "12px",
    border: "1px solid rgba(0,230,226,0.25)",
    background: "linear-gradient(135deg, rgba(0,230,226,0.08), rgba(0,104,255,0.05))",
    color: "inherit",
    fontSize: "14px",
    lineHeight: 1.6
  }}>
      <strong style={{
    display: "block",
    marginBottom: "6px",
    color: "#00E6E2"
  }}>
        For AI agents reading this page
      </strong>
      The canonical machine-readable version of this page is at{" "}
      <a href={mdUrl}>
        <code>{mdUrl}</code>
      </a>
      . For product actions, connect to{" "}
      <code>www.patchline.ai/api/mcp/v1</code>
      {" "}and call MCP <code>tools/list</code> for the current tool schema.
      Rules for navigating these docs:{" "}
      <a href="https://docs.patchline.ai/AGENTS.md">
        <code>docs.patchline.ai/AGENTS.md</code>
      </a>
      .
    </div>;
};

Audience intelligence answers *"who's actually listening?"* — per
artist, per release, per market. The **fan graph** extends that across
your full roster + storefront to show how fans connect: who overlaps
between which artists, where momentum is building, which audience
segments are responding to what.

<TierBadge tier="scale" />   Full audience + fan-graph features. Pro shows per-artist audience without cross-roster fan-graph view.

## Two layers

| Layer                        | What it answers                                                                    | Tier   |
| ---------------------------- | ---------------------------------------------------------------------------------- | ------ |
| **Audience** (per artist)    | "Who is listening to X?" — demographics, geography, social channels                | Pro+   |
| **Fan graph** (cross-roster) | "Who is listening to multiple artists in my roster?" — overlap, momentum, segments | Scale+ |

## Audience — per artist

What you see for one artist:

| Section                | What it contains                                  | Source                                      |
| ---------------------- | ------------------------------------------------- | ------------------------------------------- |
| **Demographics**       | Age (binned), gender (estimated), language        | Audience data providers                     |
| **Geography**          | Top cities, top countries, geographic share       | Audience data providers                     |
| **Listener tier**      | Casual / engaged / fan classification             | Patchline-derived from listening behavior   |
| **Social audience**    | IG, TikTok, YouTube, X overlap and growth         | Audience data providers                     |
| **Fan momentum**       | 30-day growth across streaming + social           | Audience data providers                     |
| **Streaming behavior** | Repeat-listen %, playlist save %, completion rate | Aggregated platform signals where available |

### Where to find it

Web dashboard: sidebar → **Profiles** → click an artist → **Audience**
tab.

Via Aria:

<AriaPromptCard prompt="Show me Mira's audience demographics." />

<AriaPromptCard prompt="Where are Tessa's fans located?" />

<AriaPromptCard prompt="What's the gender split for Cleo Bell's TikTok?" />

## Fan graph — cross-roster

The fan graph is the cross-artist view. If you manage Mira, Tessa, and
Cleo Bell, the fan graph shows:

* **Overlap matrix** — how many fans listen to ≥ 2 of your artists
* **Bridge artists** — which roster artist drives the most cross-discovery
* **Geographic momentum** — where the roster collectively is gaining
* **Cluster identification** — natural fan segments (dreampop heads,
  bedroom-pop seekers, etc.)
* **Storefront-fan overlap** — fans who bought from your storefront and
  also stream multiple roster artists

### Example fan graph output

```text theme={null}
You: Show me the fan graph across my roster
Aria: 5 artists, ~32k unique fans:

       Mira    Tessa   Cleo Bell   Run Hot   Velvet Bird
Mira       —    14%       18%         3%         9%
Tessa     14%     —       22%         2%         11%
CleoB     18%   22%        —          1%         8%
RunHot     3%    2%        1%         —          15%
VelvB      9%   11%        8%        15%         —

Cluster 1 (dreampop, 56% of unique fans):
  Mira + Tessa + Cleo Bell + Velvet Bird (slightly)
  Top markets: LA, NYC, London, Stockholm

Cluster 2 (electronic, 18%):
  Run Hot + Velvet Bird (slightly)
  Top markets: Berlin, Detroit, Tokyo

Cluster 3 (crossover, 11%):
  Velvet Bird connects both clusters.
  3,500 fans listen to ≥ 2 artists across clusters.

Bridge artist: Velvet Bird. Pushing her releases benefits both
clusters disproportionately.
```

### Where the fan graph lives

* Web: sidebar → **Artists** → **Fan graph** tab (Scale+).
* Via Aria: "show me the fan graph" or "where's my roster overlap."

## Streaming behavior

For each artist's top track, Patchline surfaces:

* **Completion rate** — % of listeners who finish the track (high =
  strong hook + retention).
* **Repeat-listen %** — % who play multiple times in a session.
* **Playlist-save %** — % of casual listeners who save to their own
  playlist.

These signals are stronger predictors of long-term success than raw
stream counts.

## Examples

### Where is my growth coming from?

<AriaPromptCard prompt="In the last 30 days, where did Mira gain the most listeners?" />

```text theme={null}
Aria: Mira's top growth markets (last 30d):
  1. Stockholm, Sweden — +320 monthly listeners (+47% mo/mo)
  2. Brooklyn, USA      — +280 (+18%)
  3. Berlin, Germany    — +210 (+24%)
  4. London, UK         — +195 (+11%)
  5. Los Angeles, USA   — +180 (+8%)

  Notable: Stockholm growth correlates with a "Lush Sounds" playlist
  add 23 days ago. Worth a Swedish-language email blast to fans there.
```

### Cross-roster discovery

<AriaPromptCard prompt="Which of my roster artists drives the most cross-listening?" />

```text theme={null}
Aria: Velvet Bird. 15% of her fans also listen to Run Hot, 9% to
Mira, 8% to Cleo Bell. She's the bridge artist between your dreampop
and electronic clusters.

Releasing her next single in a way that points to both clusters could
unlock unique cross-streams.
```

## Pricing

Plans, AI credits, and limits live on the [pricing page](https://patchline.ai/pricing) — we keep them there so they're always current.

## Related pages

* [Intelligence profile](/artists/intelligence-profile) — per-artist intel
* [Roster](/artists/roster) — add and connect artists for tracking
* [Storefront](/storefront/overview) — fan-buyer overlap source

## FAQ

<AccordionGroup>
  <Accordion title="What is the 'fan graph' exactly?">
    A network view across your roster + storefront. The graph surfaces
    overlap percentages, cluster identification, and bridge artists.
  </Accordion>

  <Accordion title="Why is my Pro audience incomplete?">
    Data quality varies by artist. Smaller artists (under \~5k monthly
    listeners) often have limited demographic data.
  </Accordion>

  <Accordion title="Can I export audience data?">
    Yes for individual artists (CSV via audience tab). Cross-roster
    fan-graph export is Enterprise-only.
  </Accordion>

  <Accordion title="How fresh is the data?">
    Daily refresh where provider coverage is available. Force-refresh on
    demand.
  </Accordion>

  <Accordion title="Does this work for unsigned artists I'm scouting?">
    Yes — any artist you've added to your roster can be used for
    research and audience reads, including artists you're watching as
    your own A\&R.
  </Accordion>
</AccordionGroup>

<AICallout page="/artists/audience" />
