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

# Stripe

> Track revenue, subscriptions, and customer metrics from Stripe — monthly and annual recurring revenue, churn, balance, and more — as live KPIs in Ciclo.

## Overview

Connecting [Stripe](https://stripe.com) brings your payments and subscription data into your
strategy. Ciclo reads your charges, subscriptions, customers, invoices, and balance so the
numbers that matter — revenue, monthly and annual recurring revenue, new and churned
subscriptions, customer growth — appear as key performance indicators
([KPIs](/features/performance-kpis)) alongside the rest of your strategy and refresh
automatically.

You connect Stripe with a **read-only Restricted API Key** you create in Stripe (see
[Connect Stripe](#connect-stripe) below). The sync is one-way (Stripe → Ciclo): Ciclo reads your
account to populate KPIs and — because the key is read-only — can never create charges, change
subscriptions, or alter anything in Stripe.

<Note>
  Connecting and configuring integrations is limited to **organisation administrators**.
  Stripe does not link to [Actions](/features/actions) — it powers revenue and customer KPIs only.
</Note>

## Before you start

* You need an **administrator** role in Ciclo — the **Connect** and **Configure** buttons are
  hidden for everyone else.
* You need access to your **Stripe Dashboard** with permission to create API keys.

## Connect Stripe

Stripe connects with a **read-only Restricted API Key** — there's no pop-up login. You create a
key in Stripe that can *read* the data Ciclo needs (and nothing else), then paste it into Ciclo
once. Setting the key's permissions is the only fiddly part, so it's worth following closely.

<Steps>
  <Step title="Open Connected Apps">
    Go to **Settings** from the account menu, open the **Connected Apps** tab, find **Stripe**,
    and select **Connect**. A **Connect Stripe** dialog opens, listing the required permissions
    and a link to create the key.

    <Frame caption="Stripe in the Connected Apps list">
      <img src="https://mintcdn.com/ciclostrategy-5e0b62a7/H8jxLx4Wa2MCIXsS/images/integrations/connected-apps.png?fit=max&auto=format&n=H8jxLx4Wa2MCIXsS&q=85&s=d569ed0ea96c5d00de2477b8d93e0f91" alt="The Stripe row in the Connected Apps settings tab" width="1400" height="880" data-path="images/integrations/connected-apps.png" />
    </Frame>
  </Step>

  <Step title="Open Stripe's restricted key page">
    In the dialog, select **Create a restricted API key →**. This opens Stripe's **Create
    restricted key** page in a new tab. Give the key a name you'll recognise later — for example
    *Ciclo Strategy*.
  </Step>

  <Step title="Grant read access (the important bit)">
    Stripe groups its permissions, and you only ever need to grant **Read**. Two permission
    groups cover everything Ciclo reads:

    * Set **Core** to **Read**
    * Set **Billing** to **Read**
    * Leave every other group as **None**

    That's all you need. **Core** covers balance, charges, refunds, and customers; **Billing**
    covers invoices and subscriptions — exactly the data Ciclo's KPIs use.

    <Frame caption="Set the Core and Billing groups to Read">
      <img src="https://mintcdn.com/ciclostrategy-5e0b62a7/H8jxLx4Wa2MCIXsS/images/integrations/stripe/restricted-key-permissions.png?fit=max&auto=format&n=H8jxLx4Wa2MCIXsS&q=85&s=16b8544db913925c9f6be58256dc1ea5" alt="Stripe's Create a restricted key screen with the Core and Billing permission groups both set to Read" width="1400" height="911" data-path="images/integrations/stripe/restricted-key-permissions.png" />
    </Frame>
  </Step>

  <Step title="Create and copy the key">
    Select **Create key** at the bottom of Stripe's page, then **copy** the key — it begins with
    `rk_`. Stripe shows the full key only once, so copy it before leaving the page.
  </Step>

  <Step title="Paste the key into Ciclo">
    Back in the **Connect Stripe** dialog, paste the key into the **API key** field and select
    **Connect**. Ciclo checks the key can read charges, customers, subscriptions, invoices, and
    balance, then stores it encrypted — the key is never shown again.

    <Frame caption="Pasting your Stripe restricted key into Ciclo">
      <img src="https://mintcdn.com/ciclostrategy-5e0b62a7/H8jxLx4Wa2MCIXsS/images/integrations/stripe/connect-dialog.png?fit=max&auto=format&n=H8jxLx4Wa2MCIXsS&q=85&s=bdca7b05363adfe023da1c748eec458a" alt="The Connect Stripe dialog showing the required permissions, the create-key link, and the API key field" width="1014" height="780" data-path="images/integrations/stripe/connect-dialog.png" />
    </Frame>
  </Step>

  <Step title="Confirm the connection">
    On success, Stripe shows a green **Connected** status, named after your Stripe business.
  </Step>
</Steps>

<Note>
  If Ciclo reports the key is **missing read access** to one of the resources, the restricted key
  was created without that permission. Edit the key in Stripe (or create a new one), make sure
  **Core** and **Billing** are both set to **Read**, then reconnect.
</Note>

<Tip>
  Treat the restricted key like a password. Because it's **read-only** it can never move money or
  change your Stripe data — but if it's ever exposed, **roll** (delete) it in Stripe and reconnect
  with a fresh key. Your KPIs reconnect automatically.
</Tip>

## Track Stripe KPIs

<Steps>
  <Step title="Open the configuration">
    On the **Stripe** row, select **Configure**, then **Add New KPI**.
  </Step>

  <Step title="Name it and pick a template">
    Give the KPI a clear name, then choose a **Query Template** — see the
    [catalogue below](#available-stripe-kpis).
  </Step>

  <Step title="Create the KPI">
    Select **Create KPI**. It appears on your [Performance page](/features/performance-kpis)
    and refreshes automatically.
  </Step>
</Steps>

### Available Stripe KPIs

<AccordionGroup>
  <Accordion title="Revenue & balance" icon="money-bill-trend-up">
    * **Revenue (30 days)** — total value of successful charges in the last 30 days.
    * **Available Balance** — current balance available for payout.
    * **Refunds (30 days)** — total value of refunds issued in the last 30 days.
  </Accordion>

  <Accordion title="Recurring revenue" icon="arrows-rotate">
    * **Monthly Recurring Revenue (MRR)** — computed from all active subscriptions, normalised
      to a monthly amount.
    * **Annual Recurring Revenue (ARR)** — MRR × 12.
  </Accordion>

  <Accordion title="Subscriptions" icon="repeat">
    * **Active Subscriptions** — count of all currently active subscriptions.
    * **New Subscriptions (30 days)** — subscriptions created in the last 30 days.
    * **Canceled Subscriptions (30 days)** — subscriptions canceled in the last 30 days.
  </Accordion>

  <Accordion title="Customers" icon="users">
    * **Total Customers** — total customers in your Stripe account.
    * **New Customers (30 days)** — customers created in the last 30 days.
  </Accordion>

  <Accordion title="Invoices" icon="file-invoice">
    * **Outstanding Invoices (value)** — total value of all open (unpaid) invoices.
    * **Outstanding Invoices (count)** — number of open (unpaid) invoices.
  </Accordion>
</AccordionGroup>

## Customising a KPI (optional)

You don't need any of this to get great results — the built-in templates are designed to be
accurate on their own. Pick a template and you're done. Expand the sections below only if you
want to fine-tune or go further.

<AccordionGroup>
  <Accordion title="Tweak a template to fit" icon="sliders">
    Date-windowed KPIs use a rolling window (e.g. the last 30 days). If a template is close but
    not quite right, you can adjust it instead of starting from scratch — for example, change the
    reporting period from the last 30 days to the last 90 days by editing `{date-30d}` to
    `{date-90d}`. The templates simply fill the **Query** field in for you; editing it is optional.
  </Accordion>

  <Accordion title="Write your own query" icon="code">
    Power users can point a KPI at other Stripe data. For everything that's possible, see:

    <Card title="Stripe API reference" icon="stripe" href="https://docs.stripe.com/api">
      The resources, list endpoints, and filters Stripe makes available.
    </Card>
  </Accordion>
</AccordionGroup>

<Note>
  For very large accounts, count- and sum-based KPIs (customers, charges, refunds, invoices) are
  read up to a generous limit and flagged as **approximate** beyond it. Likewise, **Available
  Balance** is summed across currencies when you hold more than one, and shown as approximate.
  The values still track the right trend — they just stop being exact at the extremes.
</Note>

## Disconnecting Stripe

Select **Disconnect** on the Stripe row. Ciclo shows which KPIs rely on Stripe before you
confirm, then deletes its stored copy of the key so it can no longer read your account.

To fully revoke access, also **delete (roll) the restricted key** in your Stripe Dashboard
(**Developers → API keys**) — disconnecting removes Ciclo's copy, but the key itself keeps
working in Stripe until you delete it there.

<Note>
  Disconnecting **preserves history** — KPIs keep their recorded values. They stop syncing until
  you reconnect, then resume automatically.
</Note>

## Related

<CardGroup cols={2}>
  <Card title="Integrations overview" icon="plug" href="/integrations/overview" />

  <Card title="QuickBooks" icon="calculator" href="/integrations/quickbooks" />

  <Card title="Performance & KPIs" icon="chart-line" href="/features/performance-kpis" />

  <Card title="Connected Apps in Settings" icon="gear" href="/features/admin-settings" />
</CardGroup>
