Analyst run
Recorded run · 17 Oct 2026, 23:39 UTC · Stripe test mode · run m2-1792280399057
What is our current MRR in USD?
Current MRR is $336,780.71 USD across 332 customers (332 contributing subscriptions), with ARR of $4,041,368.56 and a trial pipeline of $12,953.13.
336,780.71USD
Matches Stripe ground truthexpected 336780.71 · agent 336780.71
| metric | value |
|---|---|
| MRR (USD) | 336780.71 |
| ARR (USD) | 4041368.56 |
| Customers (MRR) | 332 |
| MRR subscriptions | 332 |
| Trial pipeline (USD) | 12953.13 |
| Canceled subscriptions | 65 |
| Logo churn (current) | 16.37 |
Method: Summed monthly_amount (minor units, post-discount) over subscriptions with status active or past_due, converted each to USD via to_usd using the subscription currency, and aggregated.
Code that produced this
attempts 1 · model poolside/laguna-s-2.1:free · tokens 1635 · 27.4 s · exit 0
analysis.py (attempt 1)
import jsonimport stripe_datasubs = stripe_data.subscriptions()mrr_usd = 0.0customers = set()trialing_usd = 0.0canceled_count = 0mrr_count = 0for s in subs:status = s.get("status")if status in ("active", "past_due"):minor = stripe_data.monthly_amount(s)usd = stripe_data.to_usd(minor, s["currency"])mrr_usd += usdcustomers.add(s["customer"])mrr_count += 1elif status == "trialing":minor = stripe_data.monthly_amount(s)trialing_usd += stripe_data.to_usd(minor, s["currency"])elif status == "canceled":canceled_count += 1arr_usd = mrr_usd * 12logo_churn = canceled_count / (mrr_count + canceled_count) if (mrr_count + canceled_count) else 0result = {"answer": f"Current MRR is ${mrr_usd:,.2f} USD across {len(customers)} customers ({mrr_count} contributing subscriptions), with ARR of ${arr_usd:,.2f} and a trial pipeline of ${trialing_usd:,.2f}.","value": round(mrr_usd, 2),"unit": "USD","table": [{"metric": "MRR (USD)", "value": round(mrr_usd, 2)},{"metric": "ARR (USD)", "value": round(arr_usd, 2)},{"metric": "Customers (MRR)", "value": len(customers)},{"metric": "MRR subscriptions", "value": mrr_count},{"metric": "Trial pipeline (USD)", "value": round(trialing_usd, 2)},{"metric": "Canceled subscriptions", "value": canceled_count},{"metric": "Logo churn (current)", "value": round(logo_churn * 100, 2)},],"method": "Summed monthly_amount (minor units, post-discount) over subscriptions with status active or past_due, converted each to USD via to_usd using the subscription currency, and aggregated.",}print("RESULT: " + json.dumps(result))
How many paying customers do we have right now?
We have 332 paying customers right now, defined as distinct customers with at least one active or past_due subscription.
332customers
Matches Stripe ground truthexpected 332.00 · agent 332.00
Method: Counted distinct customer IDs across all subscriptions whose status is 'active' or 'past_due' (the MRR-contributing statuses), per the MRR metric definition.
Code that produced this
attempts 1 · model poolside/laguna-s-2.1:free · tokens 1340 · 18.3 s · exit 0
analysis.py (attempt 1)
import jsonimport stripe_data# MRR-contributing subscription statusesMRR_STATUSES = {"active", "past_due"}subs = stripe_data.subscriptions()# Distinct customers with at least one MRR-contributing subscriptionpaying_customers = set()for sub in subs:if sub.get("status") in MRR_STATUSES:cust = sub.get("customer")if cust:paying_customers.add(cust)count = len(paying_customers)result = {"answer": f"We have {count} paying customers right now, defined as distinct customers with at least one active or past_due subscription.","value": count,"unit": "customers","table": [],"method": "Counted distinct customer IDs across all subscriptions whose status is 'active' or 'past_due' (the MRR-contributing statuses), per the MRR metric definition."}print("RESULT: " + json.dumps(result))
What percentage of MRR comes from customers in emerging markets?
Emerging-market customers account for 25.3% of total MRR ($85,083 of $336,781).
25.26percent
Matches Stripe ground truthexpected 25.26 · agent 25.26
| market | mrr_usd |
|---|---|
| top | 251697.95 |
| emerging | 85082.76 |
| unknown | 0 |
Method: Summed monthly_amount (USD-converted) over active/past_due subscriptions, grouped by customer metadata market, then computed emerging / total * 100.
Code that produced this
attempts 1 · model poolside/laguna-s-2.1:free · tokens 1836 · 29.8 s · exit 0
analysis.py (attempt 1)
import jsonimport stripe_data# Build customer lookup by idcustomers = stripe_data.customers()cust_by_id = {c["id"]: c for c in customers}# Get all subscriptionssubs = stripe_data.subscriptions()# MRR-contributing subscriptions: status active or past_duemrr_subs = [s for s in subs if s.get("status") in ("active", "past_due")]# Sum MRR in USD by customer marketmrr_by_market = {"top": 0.0, "emerging": 0.0, "unknown": 0.0}for s in mrr_subs:cust = cust_by_id.get(s.get("customer"))market = "unknown"if cust:market = cust.get("metadata", {}).get("market", "unknown")minor = stripe_data.monthly_amount(s)usd = stripe_data.to_usd(minor, s.get("currency"))mrr_by_market[market] = mrr_by_market.get(market, 0.0) + usdtotal_mrr = sum(mrr_by_market.values())emerging_mrr = mrr_by_market.get("emerging", 0.0)pct_emerging = (emerging_mrr / total_mrr * 100.0) if total_mrr > 0 else 0.0table = [{"market": k, "mrr_usd": round(v, 2)}for k, v in sorted(mrr_by_market.items(), key=lambda x: -x[1])]answer = (f"Emerging-market customers account for {pct_emerging:.1f}% of total MRR "f"(${emerging_mrr:,.0f} of ${total_mrr:,.0f}).")result = {"answer": answer,"value": round(pct_emerging, 2),"unit": "percent","table": table,"method": ("Summed monthly_amount (USD-converted) over active/past_due subscriptions, ""grouped by customer metadata market, then computed emerging / total * 100."),}print("RESULT: " + json.dumps(result))
What is our current logo churn rate, as a percentage?
Our current logo churn rate is 16.37%, based on 65 churned customers out of 397 total customers (MRR-contributing + churned).
16.37percent
Matches Stripe ground truthexpected 16.37 · agent 16.37
| metric | count |
|---|---|
| MRR-contributing customers | 332 |
| Canceled customers | 65 |
| Total customers | 397 |
| Logo churn rate | 16.37% |
Method: Counted distinct customers with at least one active or past_due subscription as MRR-contributing, and customers with only canceled subscriptions (no active/past_due) as churned; logo churn = churned / (MRR-contributing + churned) × 100.
Code that produced this
attempts 1 · model poolside/laguna-s-2.1:free · tokens 8884 · 169.4 s · exit 0
analysis.py (attempt 1)
import stripe_dataimport jsonsubscriptions = stripe_data.subscriptions()# Debug: count subscriptions by statusstatus_counts = {}for sub in subscriptions:status = sub["status"]status_counts[status] = status_counts.get(status, 0) + 1print("Subscription status counts:")for status, count in sorted(status_counts.items()):print(f" {status}: {count}")# Group subscriptions by customercustomer_subs = {}for sub in subscriptions:cust_id = sub["customer"]if cust_id not in customer_subs:customer_subs[cust_id] = []customer_subs[cust_id].append(sub)# Classify customers:# - MRR-contributing: at least one active or past_due subscription# - Canceled (churned): at least one canceled subscription, no active/past_duemrr_customers = set()canceled_customers = set()for cust_id, subs in customer_subs.items():has_mrr = any(s["status"] in ("active", "past_due") for s in subs)has_canceled = any(s["status"] == "canceled" for s in subs)if has_mrr:mrr_customers.add(cust_id)elif has_canceled:canceled_customers.add(cust_id)mrr_count = len(mrr_customers)canceled_count = len(canceled_customers)total = mrr_count + canceled_countlogo_churn = (canceled_count / total * 100) if total > 0 else 0print(f"\nMRR-contributing customers: {mrr_count}")print(f"Canceled customers: {canceled_count}")print(f"Total (MRR + canceled): {total}")print(f"Logo churn: {logo_churn:.2f}%")result = {"answer": f"Our current logo churn rate is {logo_churn:.2f}%, based on {canceled_count} churned customers out of {total} total customers (MRR-contributing + churned).","value": round(logo_churn, 2),"unit": "percent","table": [{"metric": "MRR-contributing customers", "count": mrr_count},{"metric": "Canceled customers", "count": canceled_count},{"metric": "Total customers", "count": total},{"metric": "Logo churn rate", "value": f"{logo_churn:.2f}%"}],"method": "Counted distinct customers with at least one active or past_due subscription as MRR-contributing, and customers with only canceled subscriptions (no active/past_due) as churned; logo churn = churned / (MRR-contributing + churned) × 100."}print(f"RESULT: {json.dumps(result)}")
Group MRR-contributing subscriptions into archetypes by plan and billing interval. Give the number of subscriptions and MRR (USD) for each archetype. The headline value is the number of archetypes.
There are 7 MRR-contributing subscription archetypes grouped by plan and billing interval. Combined MRR across all archetypes is 336,780.71 USD.
7archetypes
Matches Stripe ground truthexpected 7.00 · agent 7.00
| plan | interval | subscriptions | mrr_usd |
|---|---|---|---|
| enterprise | yearly | 7 | 61816.16 |
| growth | monthly | 77 | 49465.44 |
| growth | yearly | 46 | 28351.43 |
| scale | monthly | 37 | 100822.88 |
| scale | yearly | 36 | 87110.92 |
| starter | monthly | 109 | 7980.68 |
| starter | yearly | 20 | 1233.2 |
Method: Iterated over all subscriptions, filtered to active/past_due statuses, grouped by (plan metadata, billing interval from price.recurring), summed monthly_amount converted to USD via to_usd for each archetype.
Code that produced this
attempts 1 · model poolside/laguna-s-2.1:free · tokens 2032 · 43.0 s · exit 0
analysis.py (attempt 1)
import jsonfrom collections import defaultdictimport stripe_data# Fixed FX rates (units of currency per 1 USD)FX = {"usd": 1, "eur": 0.92, "gbp": 0.79, "cad": 1.37, "aud": 1.52,"jpy": 150, "sgd": 1.34, "inr": 84, "brl": 5.4, "mxn": 18,"aed": 3.67, "pln": 4, "thb": 35, "myr": 4.6, "zar": 18, "php": 57,}# MRR-contributing statusesMRR_STATUSES = {"active", "past_due"}def get_interval(item):"""Return billing interval string like 'monthly' or 'yearly'."""recurring = item["price"].get("recurring", {})interval = recurring.get("interval", "monthly")interval_count = recurring.get("interval_count", 1)if interval == "year":return "yearly"elif interval == "month":return "monthly"else:return intervaldef get_plan(sub):"""Return plan from metadata, default to 'unknown'."""return sub.get("metadata", {}).get("plan", "unknown")# Group MRR-contributing subscriptions by (plan, interval)archetypes = defaultdict(lambda: {"count": 0, "mrr_minor": 0})for sub in stripe_data.subscriptions():if sub["status"] not in MRR_STATUSES:continueplan = get_plan(sub)currency = sub["currency"]# Determine interval from first item (assume consistent within subscription)items = sub.get("items", {}).get("data", [])if not items:continueinterval = get_interval(items[0])# Get monthly MRR in minor units (subscription currency)mrr_minor = stripe_data.monthly_amount(sub)# Convert to USDmrr_usd = stripe_data.to_usd(mrr_minor, currency)key = (plan, interval)archetypes[key]["count"] += 1archetypes[key]["mrr_minor"] += mrr_minor # accumulate minor units before conversion# Actually, we should accumulate USD since to_usd is per-subscription# Let's redo: accumulate USD# We'll fix below# Redo properly: accumulate USD per archetypearchetypes = defaultdict(lambda: {"count": 0, "mrr_usd": 0.0})for sub in stripe_data.subscriptions():if sub["status"] not in MRR_STATUSES:continueplan = get_plan(sub)currency = sub["currency"]items = sub.get("items", {}).get("data", [])if not items:continueinterval = get_interval(items[0])mrr_minor = stripe_data.monthly_amount(sub)mrr_usd = stripe_data.to_usd(mrr_minor, currency)key = (plan, interval)archetypes[key]["count"] += 1archetypes[key]["mrr_usd"] += mrr_usd# Build tabletable = []for (plan, interval), data in sorted(archetypes.items()):table.append({"plan": plan,"interval": interval,"subscriptions": data["count"],"mrr_usd": round(data["mrr_usd"], 2),})num_archetypes = len(table)answer = (f"There are {num_archetypes} MRR-contributing subscription archetypes "f"grouped by plan and billing interval. "f"Combined MRR across all archetypes is "f"{sum(row['mrr_usd'] for row in table):,.2f} USD.")result = {"answer": answer,"value": num_archetypes,"unit": "archetypes","table": table,"method": ("Iterated over all subscriptions, filtered to active/past_due statuses, ""grouped by (plan metadata, billing interval from price.recurring), ""summed monthly_amount converted to USD via to_usd for each archetype."),}print("RESULT: " + json.dumps(result))