Example reports & workflows

Once Stripe data syncs onto native HubSpot objects, the figures your team cares about — MRR, ARR, churn, invoice status — become reportable and automatable like any other HubSpot property. This page is a build-ready reference: each report and workflow names the exact synced property to filter or trigger on, plus the steps to build it.

For the properties behind these, see What syncs to what. For how the data stays current, see Running syncs.

Reports #

Most of these are single-object reports built on the native Subscription or Invoice object. Reach for the custom report builder only when you need a cross-object view.

Report Object Measure Key property to filter / group
MRR by company or owner Subscriptions Sum of stripe_mrr Filter hs_status = active; group by company or owner
ARR pipeline vs. closed Subscriptions + Deals Sum of stripe_arr vs. Deal amount Group by stage / quarter
Churned MRR this quarter Subscriptions Sum of stripe_mrr Filter hs_status = canceled; group by stripe_churn_reason
Outstanding invoices (AR aging) Invoices Sum of amount / count Filter hs_invoice_status = open; bucket hs_due_date
Revenue by product Subscriptions Sum of stripe_mrr Group by linked Product

MRR by company or owner #

  1. Create a single-object report on Subscriptions.
  2. Set the measure to sum of stripe_mrr.
  3. Filter hs_status = active so canceled lines don’t inflate the total.
  4. Group by owner for a leaderboard, or by company for an account ranking.

ARR pipeline vs. closed #

  1. Use the custom report builder across Subscriptions and Deals.
  2. Plot sum of stripe_arr from active subscriptions as committed (closed) recurring revenue.
  3. Plot weighted open-deal amount beside it as pipeline.
  4. Break down by stage or quarter to keep recurring revenue separate from one-time deal amounts.

Churned MRR this quarter #

  1. Single-object report on Subscriptions.
  2. Filter hs_status = canceled and cancel date within the period.
  3. Measure sum of stripe_mrr (the MRR those subscriptions carried).
  4. Group by stripe_churn_reason to see why the revenue left.

Outstanding invoices (AR aging) #

  1. Single-object report on Invoices.
  2. Filter hs_invoice_status = open.
  3. Bucket by hs_due_date into 0–30 / 31–60 / 61–90 ranges.
  4. Optionally group by company to see who owes the most.

Revenue by product #

  1. Report on Subscriptions.
  2. Measure sum of stripe_mrr (this property lives on the Subscription object, not on line items).
  3. Group by the linked Product (Stripe Prices sync to HubSpot Products, and subscriptions link back to them).

Tip: if other billing sources also write to these objects, add a filter on a written stripe_* property (for example stripe_subscription_id is present) to scope a report to Stripe-sourced records.

Workflows #

Each workflow enrolls records on a synced property and acts on it. Build these in HubSpot’s workflow tool, enrolling on the object named below.

Workflow Enroll on Trigger property Action
Churn-risk alert Subscriptions hs_statuspast_due Task for owner + notify CSM
Expansion play Subscriptions stripe_mrr increases Notify AE, add to “Expanding” list
First-invoice onboarding Invoices hs_invoice_statuspaid (first) Enroll contact in onboarding sequence
Failed-payment dunning hand-off Subscriptions hs_statuspast_due (high value) Branch on stripe_mrr, route to CSM
Renewal task Subscriptions hs_recurring_billing_end_date near Create renewal task

Past-due churn alert #

  1. Workflow enrolling on Subscriptions.
  2. Enrollment trigger: hs_status is past_due.
  3. Action: create a task for the subscription’s owner and post to the CSM channel.
  4. Enroll per subscription so one lapsed line doesn’t flag an otherwise healthy multi-product account.

MRR-increase expansion play #

  1. Workflow enrolling on Subscriptions (or the Company rollup).
  2. Enrollment trigger: stripe_mrr increases.
  3. Action: notify the AE, add the account to an “Expanding” list, raise the health score.

First-invoice onboarding #

  1. Workflow enrolling on Invoices.
  2. Enrollment trigger: hs_invoice_status becomes paid.
  3. Guard so it fires on the first paid invoice only (re-enrollment off, or a “first paid” flag).
  4. Action: enroll the primary contact in the onboarding sequence and create a kickoff task.

Failed-payment dunning hand-off #

  1. Workflow enrolling on Subscriptions.
  2. Enrollment trigger: hs_status becomes past_due (a failed hs_last_payment_amount charge).
  3. Branch on stripe_mrr: above your threshold, route to a CSM with a personal outreach task; below it, leave automated dunning to run.

Renewal task before term ends #

  1. Workflow enrolling on Subscriptions with date-based enrollment.
  2. Enrollment trigger: hs_recurring_billing_end_date is N days away. This property holds the scheduled cancellation / non-renewal date, so it’s only set on subscriptions set to cancel at period end — this workflow enrolls those subs and leaves normally auto-renewing ones alone.
  3. Action: create a renewal task for the owner; for annual terms, start a QBR sequence.
  4. Use hs_recurring_billing_frequency to set lead time per cadence — longer for annual, shorter for monthly.

Build these with Claude (browser) #

If you use a browser-driving AI assistant such as Claude for Chrome, you can hand it a report definition and let it click through HubSpot’s report builder for you. Give it the exact property names from this page so it maps fields correctly, and keep the guardrails at the bottom so it never touches your existing assets.

One report at a time #

Fill in the bracketed parts and paste it into a Claude browser session that’s on your HubSpot portal:

In my HubSpot portal, create ONE custom report.
- Object: [Subscriptions]
- Measure: [SUM of stripe_mrr]
- Group by: [company name]
- Filter: [hs_status = active]
- Chart type: [bar]
- Name: "[MRR by company]"

These are synced Stripe properties already on the object. Build it via
Reports → Create report → Custom report builder. Before saving, show me the
exact fields and filters you selected so I can confirm. Do not modify or delete
any existing report. If a property isn't present on the object, stop and tell me
rather than guessing.

Swap the bracketed values for any row in the Reports table above — e.g. Object Invoices, Measure SUM of stripe_amount_due, Filter hs_invoice_status = open, grouped by hs_due_date for AR aging.

A whole dashboard at once #

You are building a revenue dashboard in my HubSpot portal from synced Stripe
data. Create a new dashboard called "Stripe Revenue" and add these reports, each
via Reports → Create report → Custom report builder:

1. "MRR trend" — Subscriptions, SUM of stripe_mrr by month, filter hs_status =
   active, line chart.
2. "Churned MRR" — Subscriptions, SUM of stripe_mrr, filter hs_status = canceled,
   grouped by stripe_churn_reason.
3. "Total collected (12 mo)" — Invoices, SUM of stripe_amount_paid by month of
   hs_invoice_date, filter hs_invoice_status = paid.
4. "AR aging" — Invoices, SUM of amount due, filter hs_invoice_status = open,
   bucketed by hs_due_date (0–30 / 31–60 / 61–90).
5. "Revenue by product" — Subscriptions, SUM of stripe_mrr, grouped
   by the linked Product.

For each report, tell me the fields and filters you chose. Only create new
reports and one new dashboard — do not edit or delete anything that already
exists. If a property is missing, skip that report and list it at the end. If the
custom report builder isn't available on this HubSpot tier, stop and tell me.

Guardrails matter. A browser agent is acting on your live CRM. The prompts above tell it to create only, never edit/delete, to surface its field choices before saving, and to stop rather than invent a missing property. Keep those lines in.

  • What syncs to what — the properties behind every report and workflow above.
  • Running syncs — how real-time webhooks and the nightly reconcile keep these properties current.