---
name: stripe-trials-to-call
description: "Mondays: each Stripe trial ending by Friday, matched by email to product usage and support tickets, sorted into call, email or leave alone. Use when the user asks for this, or when it runs on a schedule."
---

# Trials worth a call this week: Stripe, product usage and support

Mondays: each Stripe trial ending by Friday, matched by email to product usage and support tickets, sorted into call, email or leave alone.

Stripe knows when a trial ends and whether a card is on file. It does not know whether the person ever reached the moment your product is worth paying for, or that they have had a bug ticket open since Wednesday. A list sorted by end date treats an engaged team and an abandoned signup the same way.

Every Monday the agent takes the trials that end by Friday, looks each customer's email up in your product analytics and your support tool, and sorts them three ways: call the trials a conversation can win, email the ones missing a single step, and leave alone the ones about to convert without help. Founders and sales leads spend the week's calls where they change the outcome.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- Read access to Stripe Subscriptions and Customers: the Stripe MCP server or a restricted key in `STRIPE_API_KEY`.
- The same email in Stripe and your analytics (PostHog persons with an `email` property from `identify`, or Mixpanel profiles with `$email`), plus the names of your activation event and your teammate-invite event.
- Read access to Intercom conversations or Zendesk tickets, with bugs marked by a tag or the Problem ticket type.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **List trials ending by Friday** (Stripe): Page through `GET /v1/subscriptions?status=trialing&expand[]=data.customer` (or `stripe subscriptions list --status trialing --live`) and keep subscriptions with `trial_end` before Friday 23:59 in your time zone. Keep the customer ID, `customer.email`, the plan and its monthly amount, `trial_start`, `trial_end`, and whether a payment method is on file (`default_payment_method` on the subscription or `invoice_settings.default_payment_method` on the customer).
2. **Pull usage for those emails** (PostHog): PostHog: one HogQL query through `POST /api/projects/:project_id/query/`, for example `SELECT lower(person.properties.email) AS email, countIf(event = '<activation event>') AS activations, countIf(event = '<invite event>') AS invites, count(DISTINCT toDate(timestamp)) AS active_days FROM events WHERE timestamp > now() - INTERVAL 30 DAY AND lower(person.properties.email) IN (<emails>) GROUP BY email`. Mixpanel: find each profile with `POST /api/query/engage` filtered on `$email`, then pull the two events with the Raw Export API (`/api/2.0/export`, `event=["<activation event>","<invite event>"]`) and match on `distinct_id`.
3. **Find open tickets for those emails** (Intercom): Intercom: `POST /conversations/search` with `source.author.email IN [<emails>]` and `state IN ["open", "snoozed"]`, reading tags. Zendesk: `GET /api/v2/search.json?query=type:ticket requester:<email> status<solved` for each email. A ticket is a bug if it carries your bug tag or, in Zendesk, has `ticket_type:problem`.
4. **Join on email and rank**: Join the three on the lowercased Stripe customer email. A trial with no analytics person is "no usage found" and goes to email, never leave alone; if the billing email differs from the user's, match on the email domain only when exactly one analytics person shares it (never on free-mail domains). **Call**: an open bug ticket, or activated with no card on file. **Email**: never activated or no teammate invited, naming the missing step. **Leave alone**: activated, card on file, no open ticket. Larger plans first within each group.
5. **Report and draft on request**: Post the three groups with end day, plan, the signals behind each verdict and the counts, and ask whether to draft. On yes, write one short email per "email" trial about its missing step and a three-line call note per "call" trial, with the ticket summary for the bug ones. Nothing is sent.

## Route B: the browser

### What you need

- Signed in to the Stripe Dashboard (Analyst role or higher, live mode), to PostHog or Mixpanel with access to the project, and to Intercom or Zendesk as a teammate or agent.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://dashboard.stripe.com/subscriptions. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **List the trials ending by Friday**: In live mode, filter **Status** to **Trialing** and keep the subscriptions whose trial ends by Friday. Open each to note the customer's email, the plan and amount, and whether the **Payment method** section shows a card.
2. **Check usage for each email**: PostHog: open **People**, search the email, open the person and look through the last 30 days of events for the activation event and the invite event. Mixpanel: open **Users**, search the email and read the profile's **Activity Feed**. No person found means "no usage found".
3. **Check open tickets**: Intercom: search the inbox for the email and look for open or snoozed conversations and their tags. Zendesk: type `requester:<email> status<solved` in the search box. A bug is a conversation with your bug tag or a Zendesk ticket of type Problem.
4. **Sort into call, email, leave alone**: Call: an open bug, or activated with no card. Email: not activated or no teammate invited, noting the missing step. Leave alone: activated, card on file, no open ticket. Larger plans first in each group.
5. **Report and offer drafts**: Give the counts and the three lists with end day, plan and signals, then ask whether to draft the nudge emails and call notes. Send nothing.

Note: Three lookups per trial makes the browser route practical for about 15 trials. Analytics person pages only find people whose email was set as a property, the same limit the API route has. The Stripe list may not show trial end as a column; open each subscription to read it.

## The report

- **Trials ending by Friday**: how many, and how many activated, never invited a teammate, or have an open bug.
- **Call**: open bugs and activated trials with no card, with the reason.
- **Email**: trials missing activation or an invite, with the step to nudge.
- **Leave alone**: activated, card on file, no tickets.
- What to do first: the largest "call" trial that ends soonest.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "stripe-trials-to-call/<date of this run, e.g. 2026-10-16>",
  "item_key": "stripe-trials-to-call",
  "project": "Acme",
  "source": "Trials worth a call this week: Stripe, product usage and support skill",
  "kind": "action",
  "title": "7 trials end by Friday: call 3, email 3, leave 1",
  "summary": "**7 Stripe trials** end by Friday: 2 activated with no tickets, 3 never invited a teammate, 2 have an open bug. Calls go to the 2 with bugs and to Litware, activated but with no card on file.",
  "action": {
    "request": "Should I draft the 3 nudge emails and the 3 call notes?",
    "options": [
      "Draft emails and call notes",
      "Call notes only",
      "Emails only",
      "Not this week"
    ]
  },
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Trial",
          "Ends",
          "Plan",
          "Signals",
          "Do"
        ],
        "rows": [
          [
            "Litware",
            "Thu",
            "Business $249",
            "Activated day 3, 9 active days, no card",
            "Call"
          ],
          [
            "Fabrikam",
            "Wed",
            "Team $99",
            "Open bug 5 days: CSV import fails",
            "Call"
          ],
          [
            "Adatum",
            "Fri",
            "Team $99",
            "Open bug 2 days: SSO redirect loop",
            "Call"
          ],
          [
            "Proseware",
            "Tue",
            "Team $99",
            "Not activated, no teammate invited",
            "Email"
          ],
          [
            "Coho Winery",
            "Thu",
            "Starter $29",
            "Signed up, 1 active day, no invite",
            "Email"
          ],
          [
            "Wingtip Toys",
            "Fri",
            "Starter $29",
            "Not activated, no invite, no usage found",
            "Email"
          ],
          [
            "Northwind Traders",
            "Wed",
            "Business $249",
            "Activated, 6 users, card on file, no tickets",
            "Leave alone"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Call Litware first: the largest trial ending this week is fully activated but has no card on file, so it will not convert on Thursday without one.",
        "tone": "warn"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Mondays at 9:00 (`0 9 * * 1`). From cron, with the agent signed in on that machine:

```bash
0 9 * * 1 claude -p "Run the stripe-trials-to-call skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/stripe-trials-to-call#schedule

Source: https://briefkin.dev/skills/stripe-trials-to-call
