Query metrics
curl -X POST "https://api.summerbase.com/v1/metrics" \ -H "Authorization: Bearer sb_..." \ -H "Content-Type: application/json" \ -d '{ "measure": "arr", "interval": "month", "from": "now-3M/M" }'const response = await fetch("https://api.summerbase.com/v1/metrics", { method: "POST", headers: { Authorization: "Bearer sb_...", "Content-Type": "application/json", }, body: JSON.stringify({ "measure": "arr", "interval": "month", "from": "now-3M/M" }),})const data = await response.json()Get any metric — MRR, ARR, churn, retention and the rest — as it is now, as it changed over time, or split by plan, country or anything else you know about your customers.
Quick start
Example: Your ARR now.
GET /v1/metrics?measure=arr
200 OK
{
"values": {"arr": "579000"}
}
Every value is a decimal written as text, in the project’s reporting
currency. A percentage is already scaled: "2.1" means 2.1%. A value
that cannot be worked out, such as a growth rate from nothing, is null.
The answer also has query and meta, described under
What comes back. The examples on this page leave
them out.
Getting a specific measure
These are the measures most people start with. Each one is a single request.
MRR: Monthly Run Rate
Revenue per month from every active subscription, after discounts. It counts recurring and usage revenue alike.
GET /v1/metrics?measure=mrr
ARR: Annual Run Rate
The same revenue per year: MRR times twelve.
GET /v1/metrics?measure=arr
Paying customers
How many customers have revenue.
GET /v1/metrics?measure=paying_customers
ARPA: Average Revenue Per Account
What a paying customer pays per month on average: MRR divided by paying customers.
GET /v1/metrics?measure=arpa_per_month
MRR movement: what changed MRR
How much MRR went up or down this month so far. Add a
breakdown by movement_type to split it into new,
expansion, reactivation, contraction and churn.
GET /v1/metrics?measure=mrr_movement
Customer churn
The share of paying customers lost over the last month, as a percentage.
GET /v1/metrics?measure=customer_churn
Revenue churn
The share of revenue lost to churn and contraction over the last month.
GET /v1/metrics?measure=gross_revenue_churn
Net revenue retention
The share of revenue kept over the last year, expansion included. It is above 100% when existing customers grew.
GET /v1/metrics?measure=net_revenue_retention
Every other measure
List available measures has every measure, with what it means and how it is worked out: starting levels, what a cohort lost and kept, signups and conversion, lifetime value and more.
GET or POST
A query can be sent either way, and gets the same answer.
- GET: the inputs go in the query string. Repeat a list input:
measure[]=mrr&measure[]=arr. - POST: the inputs go in a JSON body. A query with a
filteror abreakdownhas to be a POST, since both are objects.
Example: Your ARR now, as a POST.
POST /v1/metrics
{
"measure": "arr"
}
If you are writing code against this endpoint, use POST. It takes every input, so nothing needs rewriting when you add a breakdown or a filter.
Choosing measures
Each number you can ask for is a measure, named by a key: mrr,
arr, paying_customers, customer_churn.
List available measures
has them all, with what each one means and how it is worked out.
measure takes one key, or a list of them. Each comes back under its
own key.
Example: MRR, ARR, paying customers and average revenue per account, now.
GET /v1/metrics?measure[]=mrr&measure[]=arr&measure[]=paying_customers&measure[]=arpa_per_month
200 OK
{
"values": {
"mrr": "48250",
"arr": "579000",
"paying_customers": "193",
"arpa_per_month": "250"
}
}
Over time
Add an interval to get one value per period in timeseries, oldest
first. values stays the whole range: ARR at its end, or a flow such
as MRR movement added up over all of it.
Example: ARR at the end of each month since July.
GET /v1/metrics?measure=arr&interval=month&from=now-3M/M
200 OK
{
"values": {"arr": "579000"},
"timeseries": [
{"period": "Jul 2026", "arr": "541200"},
{"period": "Aug 2026", "arr": "556200"},
{"period": "Sep 2026", "arr": "571200"},
{"period": "Oct 2026", "arr": "579000"}
]
}
The interval is day, week, month, quarter or year, on the
calendar of the project’s reporting timezone.
Choosing the range
from and to set the range. Each takes a date, 2026-01-01, or a
date relative to today, in the same syntax as Grafana’s time ranges:
| Expression | Means |
|---|---|
now |
Today. |
now-30d |
30 days ago. d is days, w weeks, M months, Q quarters and y years. |
now/M |
The start of this month in from, its end in to. /d, /w, /Q and /y work the same way. |
now-3M/M |
The start of the month three months ago. |
beginning |
In from only: when your first revenue moved, or the start of its period with an interval. |
to is the end of the day it names, and is today unless you say
otherwise. Left out, from depends on the interval:
interval |
from unless said |
|---|---|
| none | now/M, the start of this month |
day |
now-30d/d, 30 days back |
week |
now-52w/w, 52 weeks back |
month |
now-12M/M, 12 months back |
quarter |
now-4Q/Q, 4 quarters back |
year |
now-5y/y, 5 years back |
With an interval, that is a run of whole periods plus the one in progress.
One number for a range
values is always the whole range, read as one period. Without an
interval, that is the whole answer. Left out, the range is this month
so far.
Example: How much MRR has moved this month so far.
GET /v1/metrics?measure=mrr_movement
Example: New paying customers in the third quarter of 2026.
GET /v1/metrics?measure=new_paying_customers&from=2026-07-01&to=2026-09-30
How a value is read
What a value means depends on what kind of measure it is.
List available measures
says which kind each measure is. For values the period is the whole
range; for each entry in timeseries, it is that entry’s period.
| Kind | Read | Examples |
|---|---|---|
| Level | at the end of the period | mrr, arr, paying_customers |
| Flow | added up over the period | mrr_movement, new_paying_customers, new_signups |
| Rate | over a window ending at the end of the period | customer_churn, net_revenue_retention |
A level beginning with starting_ is read at the start of the period
instead. An annual measure, such as arr, is its monthly one times
twelve.
Churn and retention
A rate such as churn needs a span of time to be measured over: its window. Each rate has its own window, the one it is usually quoted over.
| Measure | Window unless said |
|---|---|
Churn, growth and conversion rates, such as customer_churn |
One interval back from the end of each period, or a month with no interval. |
Retention rates, such as net_revenue_retention |
A year back from the end of each period. |
| Average revenue per account, levels and flows | The period itself. |
List available measures
gives each measure’s window as default_lookback_window.
Example: The share of paying customers lost over the last month.
GET /v1/metrics?measure=customer_churn
Example: Churn for each month, each read over a full month back, so the month in progress compares with the others.
GET /v1/metrics?measure=customer_churn&interval=month
Example: Net revenue retention over the last year.
GET /v1/metrics?measure=net_revenue_retention
Setting the window
lookback_window sets the window yourself:
lookback_window |
Window |
|---|---|
period |
The period itself. For the month in progress, that is the month so far. |
rolling_interval |
One interval back from the end of the period. A month with no interval. |
30d, 1M, 1Q, 1y |
That long, back from the end of the period. |
A window shorter than the interval is refused, because part of each
period would not be counted: 1M cannot be read by the quarter.
30d by the month is allowed. A window can be at most ten years.
All the measures in one query share a window: the window of the first
one in measure, unless lookback_window says otherwise. query
says which window was used. To read two rates over their own windows,
send two queries.
Breakdowns
A breakdown splits each value into categories. The categories add up
to the whole for every measure that adds up, such as MRR and the number
of customers.
Example: ARR by plan.
POST /v1/metrics
{
"measure": "arr",
"breakdown": ["subscription_item.plan_id"]
}
200 OK
{
"values": {"arr": "579000"},
"breakdown": {
"key": "subscription_item.plan_id",
"categories": [
{
"category": "0198f1a4-2e5f-7b80-a1c2-3d4e5f6a7b8c",
"label": "Growth",
"values": {"arr": "348000"}
},
{
"category": "0198f1a4-3b71-7c02-9d4e-6f8a1b2c3d4e",
"label": "Scale",
"values": {"arr": "186000"}
},
{
"category": "0198f1a4-4c82-7d13-8e5f-7a9b2c3d4e5f",
"label": "Starter",
"values": {"arr": "45000"}
}
]
}
}
Each category has the value it stands for in category, here a plan’s
id, and a readable name in label. It also has its own values, its
own timeseries when there is an interval, and its own breakdown when
there is another dimension, all in the same shape as the top of the
answer.
A breakdown can be by any key a filter can use:
customer.country_code, subscription_item.plan_id, or one of your own
properties. List fields shows them
all. Two more split revenue in ways of their own:
| Key | Splits by |
|---|---|
movement_type |
new, expansion, reactivation, contraction and churn |
revenue_type |
recurring and usage |
Example: What moved MRR this month, by kind of movement.
POST /v1/metrics
{
"measure": ["mrr", "mrr_movement"],
"breakdown": ["movement_type"]
}
200 OK
{
"values": {"mrr": "48250", "mrr_movement": "650"},
"breakdown": {
"key": "movement_type",
"categories": [
{"category": "new", "label": "New", "values": {"mrr_movement": "900"}},
{"category": "expansion", "label": "Expansion", "values": {"mrr_movement": "400"}},
{"category": "reactivation", "label": "Reactivation", "values": {"mrr_movement": "150"}},
{"category": "churn", "label": "Churn", "values": {"mrr_movement": "-650"}},
{"category": "contraction", "label": "Contraction", "values": {"mrr_movement": "-150"}}
]
}
}
A movement caused by exchange rates, or by a customer moving in or out of a filter, gets a category of its own when there is one.
More than one dimension
breakdown takes up to three dimensions. Each one splits the categories
of the one before.
Example: MRR by country, then by plan within each country.
{
"measure": "mrr",
"breakdown": ["customer.country_code", "subscription_item.plan_id"]
}
Shaping a dimension
A dimension can be an object instead of a key, to say more about it:
| Field | Does |
|---|---|
key |
What to split by. Required. |
max_categories |
How many categories to keep, from 1 to 50, Other included. 10 unless said. The largest are kept, and the rest are added up as Other. |
truncate |
For a date: one category per week, month, quarter or year. A date has to be truncated. |
boundaries |
For a number: a list of up to 20 numbers, each starting a range. Or "auto", to have ranges chosen from your values. |
at |
When a customer’s value is read, as in a filter. Unless said, as it was in each period. |
measure |
Which measures the categories carry. Those of the query unless said. |
Example: MRR per monthly cohort, by the month each customer first paid.
{
"measure": "mrr",
"interval": "month",
"breakdown": [{"key": "customer.first_paying_at", "truncate": "month"}]
}
Example: Customers per band of ARR.
{
"measure": "paying_customers",
"breakdown": [{"key": "customer.arr", "boundaries": [1000, 10000, 100000]}]
}
A category with nothing in it over the whole range is left out, Other
included. The categories of movement_type, revenue_type and
boundaries are always all there.
Filters
A filter counts only the customers, subscriptions or items it matches.
Filters explains everything a filter can say.
Example: ARR of customers in the US.
POST /v1/metrics
{
"measure": "arr",
"filter": {"key": "customer.country_code", "equals": "US"}
}
Comparing with earlier dates
snapshots reads the measures again at up to eight other dates, each as
it stood at the end of that day.
Example: ARR now, and a year ago.
GET /v1/metrics?measure=arr&snapshots[]=now-1y
200 OK
{
"values": {"arr": "579000"},
"snapshots": [
{"label": "1 year ago", "at": "2025-10-21T04:00:00Z", "arr": "312000"}
]
}
A flow or a rate in a snapshot is read over the window ending that day:
one interval long, or from the start of the range with no interval. A date
rounded to the interval, such as now-1M/M by the month, ends where a
period does, so it reads exactly what that period would.
Example: Last month against the same month a year before.
GET /v1/metrics?measure=mrr_movement&interval=month&snapshots[]=now-1M/M&snapshots[]=now-13M/M
Currency, timezone and kinds of revenue
| Input | Does |
|---|---|
currency_code |
Reports in another currency, by ISO 4217 code: EUR. The project’s reporting currency unless said. |
timezone |
Cuts days and periods in another timezone, by IANA name: Europe/Copenhagen. The project’s reporting timezone unless said. |
revenue_types |
Counts only recurring or only usage revenue. Both unless said, which is what MRR, the Monthly Run Rate, counts. |
What comes back
| Field | Holds |
|---|---|
values |
Each measure’s value for the whole range. |
timeseries |
One entry per period, with each measure’s value. Only with an interval. |
snapshots |
Each measure at each date in snapshots. Only when asked for. |
breakdown |
The categories, each with its own values, timeseries and breakdown. Only when asked for. |
query |
The query as it was answered: what you sent, with every default filled in. Send it back to ask the same query again. |
meta |
The range as it resolved, the measures with their names and units, and the periods. |
Limits
- At most 500 periods: a year and more by the day is refused.
- At most three dimensions in a breakdown, 2,000 categories in all, and 100,000 values: categories times periods and snapshots.
- At most eight snapshots.
A query over the limit is refused with an error saying which limit it hit and how to stay under it.
The customers behind a value
List the customers behind a value takes the same query and points at one value in its answer, such as the expansion in June, and lists the customers it is made of.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Up to three dimensions to split each value by, such as
["subscription_item.plan_id"]. Each is a key, or an object that
says more about it. A POST only.
A key: customer.country_code, subscription_item.plan_id, movement_type, revenue_type.
object
When a record’s value is read: window, as things stood at the time over each window — a level by the value at its end, a movement by the value when the money moved, a cohort by the value at its start — unless said; now, so every period is split by the value held now; a date, read as the end of that day in the reporting timezone; or a datetime, ISO 8601, UTC when it names no zone. The same at a filter comparison takes. Not for the run rate movements’ own dimensions.
The key, named as a filter names it.
At most how many categories this dimension answers with, Other counted among them: the largest by the first measure carried at this depth in the last period are kept, and the rest are folded into Other, always last. 1 to 50, 10 unless said. A dimension with a fixed set of categories keeps them all; one over dates keeps every period up to 50, oldest first, folding older ones into Before …; one with boundaries has one per range.
For a key that holds a datetime: the unit its values are cut to, in the reporting timezone. Each category is one such unit, and the categories come in order, newest kept and older folded into Before ….
The currency to report in, by ISO 4217 code: EUR. The project’s
reporting currency unless said.
Counts only the customers, subscriptions or items the condition
matches. See Filters. A POST only.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Matches when the condition does not.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when there is an item that matches the condition — of the subscription the box is in, or of any subscription at the top level. Everything inside is about that one item.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.
object
Matches when every condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Matches when at least one condition in the list does. At least one.
A condition over what is known about a customer. Either a group — all or
any over a list of conditions, or not over one — a box —
has_subscription or has_subscription_item over one condition about one
such record — or a comparison: a key beside exactly one operator. At most
four levels deep, boxes not counted, twenty-five comparisons, and five boxes,
a bare comparison about a subscription or an item counting as one.
A key is fully qualified. subject.field names a field the record carries
itself — customer.name, customer.status, customer.mrr,
subscription.status, subscription_item.plan_id — and
subject.properties.source.key names what one source says about it —
customer.properties.hubspot.industry. The subject is customer,
subscription or subscription_item. A key that names nothing is refused,
with what is filterable.
A value is read as what the key holds — a string, a number, a boolean or a
datetime: 5, "5" and "5.000" are one number, "TRUE" is a boolean,
a datetime is an ISO 8601 date or date and time — 2026-03-01,
2026-03-01T12:00:00Z — read as UTC when it names no zone, and a number
or a boolean sent to a string key is its text. A value that does not read as
the key’s kind is refused.
customer.mrr is an amount in the project’s reporting currency, and
customer.arr and subscription.annual_amount are their monthly amounts
times twelve.
Everything inside a box is about the same record: has_subscription over
all of “active” and “in euros” is one subscription that is both, and two
has_subscription boxes side by side are one of each. A comparison about a
subscription or an item outside a box is a box of its own. not around a
box means the customer has no such record; not_equals and present: false
match when no value says otherwise.
object
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.
Whether there is any value at all.
Whether there is any value at all.
The start of the range: a date, 2026-01-01, or a date relative to
today, now-12M/M, or beginning, when your first revenue moved.
Unless said, the start of this month with no interval, and a run of
whole periods with one: twelve months back by the month.
Cuts the range into periods for timeseries: day, week, month,
quarter or year. Left out, the whole range is one period, and
there is no timeseries.
How far back a rate looks from the end of each period: period,
rolling_interval, or a length such as 30d, 1M or 1y. Unless
said, the window of the first measure in measure.
The kinds of revenue to count: recurring, usage, or both, which
is what MRR, the Monthly Run Rate, counts and the default.
Up to eight more dates to read the measures at, each at the end of
that day: now-1y, 2026-01-01.
The timezone to cut days and periods in, by IANA name:
Europe/Copenhagen. The project’s reporting timezone unless said.
/v1/timezones lists them.
The end of the range, in the same forms as from. It includes the
whole day it names. Today unless said.
Example
{ "measure": "arr", "interval": "month", "from": "now-3M/M"}Response
Section titled “Response”Returns each measure’s value in values and, by an interval, for each period in timeseries, and the same again for each category of a breakdown.
Each measure’s value in values, and per period in timeseries when there is an interval; the same at other dates in snapshots, and per category in breakdown, when asked for. query is the query as it was answered, every default filled in, and meta describes the range, the measures and the periods.
object
object
One category of a breakdown, with its own values, timeseries and, when there is another dimension, breakdown, in the same shape as the top of the answer.
object
The value, as text: a country code, a plan id, a movement type, the first day of a truncated date, the lower boundary of a numeric range. Null for Other.
The value as a person reads it: a country’s name, a plan’s, the period a truncated date begins.
One period: its label, and each measure’s value under its key.
object
starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.
churned_mrr is the MRR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_mrr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_mrr_lost is how much less per month the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_lifespan is how many months a paying customer stays on average, at each window’s rate of churn. Formula: one divided by monthly_customer_churn. A decimal as text, or null where there is no answer.
paying_customers is the number of customers with revenue at the end of each window. A decimal as text, or null where there is no answer.
reactivation_arr is the ARR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
arr is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_paying_customers is how much paying_customers changed over each window, except that under a breakdown or a filter a customer who moved category is neither. Formula: new_paying_customers plus reactivated_paying_customers minus churned_paying_customers. A decimal as text, or null where there is no answer.
signup_to_paid_conversion is the share of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. Formula: signups_converted_to_paid divided by new_signups. A decimal as text, or null where there is no answer.
mrr_growth is how much mrr grew or fell over each window, as a percentage. Formula: mrr_movement divided by starting_mrr. A decimal as text, or null where there is no answer.
lead_to_paid_conversion is the share of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. Formula: leads_converted_to_paid divided by new_leads. A decimal as text, or null where there is no answer.
starting_mrr_gained is how much more per month the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
reactivation_mrr is the MRR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
starting_paying_customers_retained is the number of customers with revenue at both the start and the end of each window. A decimal as text, or null where there is no answer.
contraction_arr is the ARR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_mrr is the MRR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
monthly_customer_churn is customer_churn restated as a rate per month, whatever the length of each window. A decimal as text, or null where there is no answer.
run_rate_movers is the number of customers whose revenue changed over each window. A decimal as text, or null where there is no answer.
customers is every customer known at the end of each window, whatever their status: leads, free, trialing, paying and churned. A decimal as text, or null where there is no answer.
signups_converted_to_paid is the number of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. A decimal as text, or null where there is no answer.
arpa_per_year is the Average Revenue Per Account per year: what a paying customer pays on average at the end of each window. Formula: arr divided by paying_customers. A decimal as text, or null where there is no answer.
gross_revenue_churn is the share of revenue lost to churn and contraction over each window. Formula: starting_mrr_lost divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
net_revenue_retention is the share of revenue kept over each window, expansion included; above 100% when existing customers grew. Formula: starting_mrr_retained divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_retained is. A decimal as text, or null where there is no answer.
exchange_rate_arr is how much arr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_paying_customers is the number of customers who started paying for the first time in each window, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
mrr is the Monthly Run Rate: revenue per month from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.
arr_growth is how much arr grew or fell over each window, as a percentage. Formula: arr_movement divided by starting_arr. A decimal as text, or null where there is no answer.
customer_retention is the share of paying customers kept over each window. Formula: starting_paying_customers_retained divided by starting_paying_customers. A decimal as text, or null where there is no answer.
starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr_gained is how much more per year the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
arpa_per_month is the Average Revenue Per Account per month: what a paying customer pays on average at the end of each window. Formula: mrr divided by paying_customers. A decimal as text, or null where there is no answer.
starting_paying_customers is paying_customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
ltv is the Lifetime Value: what a paying customer pays over the time they stay, before any cost. Formula: arpa_per_month times customer_lifespan. A decimal as text, or null where there is no answer.
starting_mrr_retained is what the customers paying at the start of each window pay per month at its end, expansion included, so it exceeds starting_mrr when they grew. A decimal as text, or null where there is no answer.
starting_arr_retained is what the customers paying at the start of each window pay per year at its end, expansion included, so it exceeds starting_arr when they grew. A decimal as text, or null where there is no answer.
new_leads is the number of customers first seen in each window as leads. A decimal as text, or null where there is no answer.
contraction_mrr is the MRR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_arr is the ARR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
median_signup_to_paid_time is the median number of days from signing up to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
arr_movement is how much arr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_arr plus expansion_arr plus reactivation_arr minus contraction_arr minus churned_arr plus exchange_rate_arr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
gross_revenue_retention is the share of revenue kept over each window, before any expansion. Formula: starting_mrr minus starting_mrr_lost, divided by starting_mrr, with starting_mrr taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
starting_paying_customers_lost is the number of customers with revenue at the start of each window who have none at its end. A decimal as text, or null where there is no answer.
exchange_rate_mrr is how much mrr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.
median_lead_to_paid_time is the median number of days from first being seen as a lead to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
churned_paying_customers is how many times customers stopped paying in each window, including those who started inside it; a customer who churned twice counts twice. starting_paying_customers_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_arr_lost is how much less per year the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_churn is the share of paying customers lost over each window. Formula: starting_paying_customers_lost divided by starting_paying_customers. A decimal as text, or null where there is no answer.
net_revenue_churn is the share of revenue lost over each window after expansion is counted; negative when existing customers grew. Formula: starting_mrr_lost minus starting_mrr_gained, divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as the other two are. A decimal as text, or null where there is no answer.
leads_converted_to_paid is the number of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. A decimal as text, or null where there is no answer.
The period’s label.
reactivated_paying_customers is how many times customers started paying again in each window after having churned, whether or not they still pay at its end; a customer who came back twice counts twice. A decimal as text, or null where there is no answer.
expansion_arr is the ARR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
expansion_mrr is the MRR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
churned_arr is the ARR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_arr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
mrr_movement is how much mrr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_mrr plus expansion_mrr plus reactivation_mrr minus contraction_mrr minus churned_mrr plus exchange_rate_mrr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
Each measure’s value for the whole range, under its key: a level as it stood at the end of the range, a flow added up over it, and a rate over the window ending at the end of the range.
object
starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.
churned_mrr is the MRR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_mrr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_mrr_lost is how much less per month the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_lifespan is how many months a paying customer stays on average, at each window’s rate of churn. Formula: one divided by monthly_customer_churn. A decimal as text, or null where there is no answer.
paying_customers is the number of customers with revenue at the end of each window. A decimal as text, or null where there is no answer.
reactivation_arr is the ARR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
arr is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_paying_customers is how much paying_customers changed over each window, except that under a breakdown or a filter a customer who moved category is neither. Formula: new_paying_customers plus reactivated_paying_customers minus churned_paying_customers. A decimal as text, or null where there is no answer.
signup_to_paid_conversion is the share of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. Formula: signups_converted_to_paid divided by new_signups. A decimal as text, or null where there is no answer.
mrr_growth is how much mrr grew or fell over each window, as a percentage. Formula: mrr_movement divided by starting_mrr. A decimal as text, or null where there is no answer.
lead_to_paid_conversion is the share of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. Formula: leads_converted_to_paid divided by new_leads. A decimal as text, or null where there is no answer.
starting_mrr_gained is how much more per month the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
reactivation_mrr is the MRR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
starting_paying_customers_retained is the number of customers with revenue at both the start and the end of each window. A decimal as text, or null where there is no answer.
contraction_arr is the ARR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_mrr is the MRR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
monthly_customer_churn is customer_churn restated as a rate per month, whatever the length of each window. A decimal as text, or null where there is no answer.
run_rate_movers is the number of customers whose revenue changed over each window. A decimal as text, or null where there is no answer.
customers is every customer known at the end of each window, whatever their status: leads, free, trialing, paying and churned. A decimal as text, or null where there is no answer.
signups_converted_to_paid is the number of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. A decimal as text, or null where there is no answer.
arpa_per_year is the Average Revenue Per Account per year: what a paying customer pays on average at the end of each window. Formula: arr divided by paying_customers. A decimal as text, or null where there is no answer.
gross_revenue_churn is the share of revenue lost to churn and contraction over each window. Formula: starting_mrr_lost divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
net_revenue_retention is the share of revenue kept over each window, expansion included; above 100% when existing customers grew. Formula: starting_mrr_retained divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_retained is. A decimal as text, or null where there is no answer.
exchange_rate_arr is how much arr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_paying_customers is the number of customers who started paying for the first time in each window, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
mrr is the Monthly Run Rate: revenue per month from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.
arr_growth is how much arr grew or fell over each window, as a percentage. Formula: arr_movement divided by starting_arr. A decimal as text, or null where there is no answer.
customer_retention is the share of paying customers kept over each window. Formula: starting_paying_customers_retained divided by starting_paying_customers. A decimal as text, or null where there is no answer.
starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr_gained is how much more per year the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
arpa_per_month is the Average Revenue Per Account per month: what a paying customer pays on average at the end of each window. Formula: mrr divided by paying_customers. A decimal as text, or null where there is no answer.
starting_paying_customers is paying_customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
ltv is the Lifetime Value: what a paying customer pays over the time they stay, before any cost. Formula: arpa_per_month times customer_lifespan. A decimal as text, or null where there is no answer.
starting_mrr_retained is what the customers paying at the start of each window pay per month at its end, expansion included, so it exceeds starting_mrr when they grew. A decimal as text, or null where there is no answer.
starting_arr_retained is what the customers paying at the start of each window pay per year at its end, expansion included, so it exceeds starting_arr when they grew. A decimal as text, or null where there is no answer.
new_leads is the number of customers first seen in each window as leads. A decimal as text, or null where there is no answer.
contraction_mrr is the MRR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_arr is the ARR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
median_signup_to_paid_time is the median number of days from signing up to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
arr_movement is how much arr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_arr plus expansion_arr plus reactivation_arr minus contraction_arr minus churned_arr plus exchange_rate_arr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
gross_revenue_retention is the share of revenue kept over each window, before any expansion. Formula: starting_mrr minus starting_mrr_lost, divided by starting_mrr, with starting_mrr taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
starting_paying_customers_lost is the number of customers with revenue at the start of each window who have none at its end. A decimal as text, or null where there is no answer.
exchange_rate_mrr is how much mrr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.
median_lead_to_paid_time is the median number of days from first being seen as a lead to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
churned_paying_customers is how many times customers stopped paying in each window, including those who started inside it; a customer who churned twice counts twice. starting_paying_customers_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_arr_lost is how much less per year the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_churn is the share of paying customers lost over each window. Formula: starting_paying_customers_lost divided by starting_paying_customers. A decimal as text, or null where there is no answer.
net_revenue_churn is the share of revenue lost over each window after expansion is counted; negative when existing customers grew. Formula: starting_mrr_lost minus starting_mrr_gained, divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as the other two are. A decimal as text, or null where there is no answer.
leads_converted_to_paid is the number of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. A decimal as text, or null where there is no answer.
reactivated_paying_customers is how many times customers started paying again in each window after having churned, whether or not they still pay at its end; a customer who came back twice counts twice. A decimal as text, or null where there is no answer.
expansion_arr is the ARR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
expansion_mrr is the MRR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
churned_arr is the ARR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_arr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
mrr_movement is how much mrr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_mrr plus expansion_mrr plus reactivation_mrr minus contraction_mrr minus churned_mrr plus exchange_rate_mrr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
The dimension, as the request named it.
About the answer: the dates the range came to, the measures in it with their names and units, and the periods.
object
The start of the range, as resolved.
Every measure the answer carries, at any depth, in the order asked.
object
What the number is, in a sentence.
The key it comes under in values, an entry and a snapshot: mrr, mrr_movement, customer_churn, and so on — GET /v1/metrics/measures lists them.
What to call it: Revenue, Run rate movement, Lost revenue.
money, an amount in the answer’s currency_code; count, a whole number; or percent, already scaled so that 4.2 is 4.2%.
The periods every node’s timeseries is cut into, in order — with no interval, the one period the whole range is.
object
With provisional: the fraction of the period that had elapsed when the query ran, as a decimal between 0 and 1.
Exclusive.
Sep 2026, Q3 2026, 15–31 Jan 2026, 15 Jan – 3 Feb 2026.
Present, and true, on the period still in progress, whose numbers are still moving.
The end of the range, as resolved. Exclusive.
The query as it was answered: every input you sent, and the default for each one you left out. Send it back to POST /v1/metrics, changed or not, to ask again. Every key is there, empty or null when nothing was asked. from and to are as written; meta has the dates they came to.
object
The dimensions, each with its measures resolved; empty when none.
object
window, now, or a datetime.
The currency every amount is in, by ISO 4217 code.
The filter in its object form, whichever form it was sent in.
object
The start of the range, as written.
How the range is cut; null for no timeseries.
The measures the root and the snapshots carry.
The instants, as written; empty when none.
The IANA zone the range is cut into days and periods in.
The end of the range, as written.
Each measure’s value as it stood at the end of one day, under its key.
object
starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.
churned_mrr is the MRR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_mrr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_mrr_lost is how much less per month the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_lifespan is how many months a paying customer stays on average, at each window’s rate of churn. Formula: one divided by monthly_customer_churn. A decimal as text, or null where there is no answer.
paying_customers is the number of customers with revenue at the end of each window. A decimal as text, or null where there is no answer.
reactivation_arr is the ARR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
arr is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_paying_customers is how much paying_customers changed over each window, except that under a breakdown or a filter a customer who moved category is neither. Formula: new_paying_customers plus reactivated_paying_customers minus churned_paying_customers. A decimal as text, or null where there is no answer.
signup_to_paid_conversion is the share of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. Formula: signups_converted_to_paid divided by new_signups. A decimal as text, or null where there is no answer.
mrr_growth is how much mrr grew or fell over each window, as a percentage. Formula: mrr_movement divided by starting_mrr. A decimal as text, or null where there is no answer.
lead_to_paid_conversion is the share of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. Formula: leads_converted_to_paid divided by new_leads. A decimal as text, or null where there is no answer.
starting_mrr_gained is how much more per month the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
reactivation_mrr is the MRR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
starting_paying_customers_retained is the number of customers with revenue at both the start and the end of each window. A decimal as text, or null where there is no answer.
contraction_arr is the ARR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_mrr is the MRR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
monthly_customer_churn is customer_churn restated as a rate per month, whatever the length of each window. A decimal as text, or null where there is no answer.
The end of the day the snapshot reads at. Exclusive.
run_rate_movers is the number of customers whose revenue changed over each window. A decimal as text, or null where there is no answer.
customers is every customer known at the end of each window, whatever their status: leads, free, trialing, paying and churned. A decimal as text, or null where there is no answer.
signups_converted_to_paid is the number of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. A decimal as text, or null where there is no answer.
arpa_per_year is the Average Revenue Per Account per year: what a paying customer pays on average at the end of each window. Formula: arr divided by paying_customers. A decimal as text, or null where there is no answer.
gross_revenue_churn is the share of revenue lost to churn and contraction over each window. Formula: starting_mrr_lost divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
net_revenue_retention is the share of revenue kept over each window, expansion included; above 100% when existing customers grew. Formula: starting_mrr_retained divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_retained is. A decimal as text, or null where there is no answer.
exchange_rate_arr is how much arr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_paying_customers is the number of customers who started paying for the first time in each window, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
mrr is the Monthly Run Rate: revenue per month from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.
arr_growth is how much arr grew or fell over each window, as a percentage. Formula: arr_movement divided by starting_arr. A decimal as text, or null where there is no answer.
customer_retention is the share of paying customers kept over each window. Formula: starting_paying_customers_retained divided by starting_paying_customers. A decimal as text, or null where there is no answer.
starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr_gained is how much more per year the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
arpa_per_month is the Average Revenue Per Account per month: what a paying customer pays on average at the end of each window. Formula: mrr divided by paying_customers. A decimal as text, or null where there is no answer.
starting_paying_customers is paying_customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
ltv is the Lifetime Value: what a paying customer pays over the time they stay, before any cost. Formula: arpa_per_month times customer_lifespan. A decimal as text, or null where there is no answer.
starting_mrr_retained is what the customers paying at the start of each window pay per month at its end, expansion included, so it exceeds starting_mrr when they grew. A decimal as text, or null where there is no answer.
starting_arr_retained is what the customers paying at the start of each window pay per year at its end, expansion included, so it exceeds starting_arr when they grew. A decimal as text, or null where there is no answer.
new_leads is the number of customers first seen in each window as leads. A decimal as text, or null where there is no answer.
contraction_mrr is the MRR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_arr is the ARR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
median_signup_to_paid_time is the median number of days from signing up to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
arr_movement is how much arr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_arr plus expansion_arr plus reactivation_arr minus contraction_arr minus churned_arr plus exchange_rate_arr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
gross_revenue_retention is the share of revenue kept over each window, before any expansion. Formula: starting_mrr minus starting_mrr_lost, divided by starting_mrr, with starting_mrr taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
starting_paying_customers_lost is the number of customers with revenue at the start of each window who have none at its end. A decimal as text, or null where there is no answer.
exchange_rate_mrr is how much mrr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.
median_lead_to_paid_time is the median number of days from first being seen as a lead to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
churned_paying_customers is how many times customers stopped paying in each window, including those who started inside it; a customer who churned twice counts twice. starting_paying_customers_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_arr_lost is how much less per year the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_churn is the share of paying customers lost over each window. Formula: starting_paying_customers_lost divided by starting_paying_customers. A decimal as text, or null where there is no answer.
net_revenue_churn is the share of revenue lost over each window after expansion is counted; negative when existing customers grew. Formula: starting_mrr_lost minus starting_mrr_gained, divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as the other two are. A decimal as text, or null where there is no answer.
leads_converted_to_paid is the number of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. A decimal as text, or null where there is no answer.
reactivated_paying_customers is how many times customers started paying again in each window after having churned, whether or not they still pay at its end; a customer who came back twice counts twice. A decimal as text, or null where there is no answer.
expansion_arr is the ARR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
Now, 30 days ago, or the day.
expansion_mrr is the MRR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
churned_arr is the ARR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_arr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
mrr_movement is how much mrr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_mrr plus expansion_mrr plus reactivation_mrr minus contraction_mrr minus churned_mrr plus exchange_rate_mrr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
One period: its label, and each measure’s value under its key.
object
starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.
churned_mrr is the MRR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_mrr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_mrr_lost is how much less per month the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_lifespan is how many months a paying customer stays on average, at each window’s rate of churn. Formula: one divided by monthly_customer_churn. A decimal as text, or null where there is no answer.
paying_customers is the number of customers with revenue at the end of each window. A decimal as text, or null where there is no answer.
reactivation_arr is the ARR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
arr is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_paying_customers is how much paying_customers changed over each window, except that under a breakdown or a filter a customer who moved category is neither. Formula: new_paying_customers plus reactivated_paying_customers minus churned_paying_customers. A decimal as text, or null where there is no answer.
signup_to_paid_conversion is the share of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. Formula: signups_converted_to_paid divided by new_signups. A decimal as text, or null where there is no answer.
mrr_growth is how much mrr grew or fell over each window, as a percentage. Formula: mrr_movement divided by starting_mrr. A decimal as text, or null where there is no answer.
lead_to_paid_conversion is the share of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. Formula: leads_converted_to_paid divided by new_leads. A decimal as text, or null where there is no answer.
starting_mrr_gained is how much more per month the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
reactivation_mrr is the MRR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
starting_paying_customers_retained is the number of customers with revenue at both the start and the end of each window. A decimal as text, or null where there is no answer.
contraction_arr is the ARR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_mrr is the MRR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
monthly_customer_churn is customer_churn restated as a rate per month, whatever the length of each window. A decimal as text, or null where there is no answer.
run_rate_movers is the number of customers whose revenue changed over each window. A decimal as text, or null where there is no answer.
customers is every customer known at the end of each window, whatever their status: leads, free, trialing, paying and churned. A decimal as text, or null where there is no answer.
signups_converted_to_paid is the number of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. A decimal as text, or null where there is no answer.
arpa_per_year is the Average Revenue Per Account per year: what a paying customer pays on average at the end of each window. Formula: arr divided by paying_customers. A decimal as text, or null where there is no answer.
gross_revenue_churn is the share of revenue lost to churn and contraction over each window. Formula: starting_mrr_lost divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
net_revenue_retention is the share of revenue kept over each window, expansion included; above 100% when existing customers grew. Formula: starting_mrr_retained divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_retained is. A decimal as text, or null where there is no answer.
exchange_rate_arr is how much arr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_paying_customers is the number of customers who started paying for the first time in each window, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
mrr is the Monthly Run Rate: revenue per month from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.
arr_growth is how much arr grew or fell over each window, as a percentage. Formula: arr_movement divided by starting_arr. A decimal as text, or null where there is no answer.
customer_retention is the share of paying customers kept over each window. Formula: starting_paying_customers_retained divided by starting_paying_customers. A decimal as text, or null where there is no answer.
starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr_gained is how much more per year the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
arpa_per_month is the Average Revenue Per Account per month: what a paying customer pays on average at the end of each window. Formula: mrr divided by paying_customers. A decimal as text, or null where there is no answer.
starting_paying_customers is paying_customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
ltv is the Lifetime Value: what a paying customer pays over the time they stay, before any cost. Formula: arpa_per_month times customer_lifespan. A decimal as text, or null where there is no answer.
starting_mrr_retained is what the customers paying at the start of each window pay per month at its end, expansion included, so it exceeds starting_mrr when they grew. A decimal as text, or null where there is no answer.
starting_arr_retained is what the customers paying at the start of each window pay per year at its end, expansion included, so it exceeds starting_arr when they grew. A decimal as text, or null where there is no answer.
new_leads is the number of customers first seen in each window as leads. A decimal as text, or null where there is no answer.
contraction_mrr is the MRR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_arr is the ARR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
median_signup_to_paid_time is the median number of days from signing up to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
arr_movement is how much arr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_arr plus expansion_arr plus reactivation_arr minus contraction_arr minus churned_arr plus exchange_rate_arr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
gross_revenue_retention is the share of revenue kept over each window, before any expansion. Formula: starting_mrr minus starting_mrr_lost, divided by starting_mrr, with starting_mrr taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
starting_paying_customers_lost is the number of customers with revenue at the start of each window who have none at its end. A decimal as text, or null where there is no answer.
exchange_rate_mrr is how much mrr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.
median_lead_to_paid_time is the median number of days from first being seen as a lead to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
churned_paying_customers is how many times customers stopped paying in each window, including those who started inside it; a customer who churned twice counts twice. starting_paying_customers_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_arr_lost is how much less per year the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_churn is the share of paying customers lost over each window. Formula: starting_paying_customers_lost divided by starting_paying_customers. A decimal as text, or null where there is no answer.
net_revenue_churn is the share of revenue lost over each window after expansion is counted; negative when existing customers grew. Formula: starting_mrr_lost minus starting_mrr_gained, divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as the other two are. A decimal as text, or null where there is no answer.
leads_converted_to_paid is the number of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. A decimal as text, or null where there is no answer.
The period’s label.
reactivated_paying_customers is how many times customers started paying again in each window after having churned, whether or not they still pay at its end; a customer who came back twice counts twice. A decimal as text, or null where there is no answer.
expansion_arr is the ARR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
expansion_mrr is the MRR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
churned_arr is the ARR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_arr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
mrr_movement is how much mrr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_mrr plus expansion_mrr plus reactivation_mrr minus contraction_mrr minus churned_mrr plus exchange_rate_mrr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
Each measure’s value for the whole range, under its key: a level as it stood at the end of the range, a flow added up over it, and a rate over the window ending at the end of the range.
object
starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.
churned_mrr is the MRR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_mrr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_mrr_lost is how much less per month the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_lifespan is how many months a paying customer stays on average, at each window’s rate of churn. Formula: one divided by monthly_customer_churn. A decimal as text, or null where there is no answer.
paying_customers is the number of customers with revenue at the end of each window. A decimal as text, or null where there is no answer.
reactivation_arr is the ARR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
arr is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_paying_customers is how much paying_customers changed over each window, except that under a breakdown or a filter a customer who moved category is neither. Formula: new_paying_customers plus reactivated_paying_customers minus churned_paying_customers. A decimal as text, or null where there is no answer.
signup_to_paid_conversion is the share of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. Formula: signups_converted_to_paid divided by new_signups. A decimal as text, or null where there is no answer.
mrr_growth is how much mrr grew or fell over each window, as a percentage. Formula: mrr_movement divided by starting_mrr. A decimal as text, or null where there is no answer.
lead_to_paid_conversion is the share of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. Formula: leads_converted_to_paid divided by new_leads. A decimal as text, or null where there is no answer.
starting_mrr_gained is how much more per month the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
reactivation_mrr is the MRR added in each window by customers who started paying again after having churned. A decimal as text, or null where there is no answer.
starting_paying_customers_retained is the number of customers with revenue at both the start and the end of each window. A decimal as text, or null where there is no answer.
contraction_arr is the ARR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_mrr is the MRR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
monthly_customer_churn is customer_churn restated as a rate per month, whatever the length of each window. A decimal as text, or null where there is no answer.
run_rate_movers is the number of customers whose revenue changed over each window. A decimal as text, or null where there is no answer.
customers is every customer known at the end of each window, whatever their status: leads, free, trialing, paying and churned. A decimal as text, or null where there is no answer.
signups_converted_to_paid is the number of each window’s new_signups who have become paying since. A recent window reads low and rises as its signups convert. A decimal as text, or null where there is no answer.
arpa_per_year is the Average Revenue Per Account per year: what a paying customer pays on average at the end of each window. Formula: arr divided by paying_customers. A decimal as text, or null where there is no answer.
gross_revenue_churn is the share of revenue lost to churn and contraction over each window. Formula: starting_mrr_lost divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
net_revenue_retention is the share of revenue kept over each window, expansion included; above 100% when existing customers grew. Formula: starting_mrr_retained divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as starting_mrr_retained is. A decimal as text, or null where there is no answer.
exchange_rate_arr is how much arr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_paying_customers is the number of customers who started paying for the first time in each window, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
mrr is the Monthly Run Rate: revenue per month from every active subscription at the end of each window, after discounts, recurring and usage alike. A decimal as text, or null where there is no answer.
net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.
arr_growth is how much arr grew or fell over each window, as a percentage. Formula: arr_movement divided by starting_arr. A decimal as text, or null where there is no answer.
customer_retention is the share of paying customers kept over each window. Formula: starting_paying_customers_retained divided by starting_paying_customers. A decimal as text, or null where there is no answer.
starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
starting_arr_gained is how much more per year the customers paying at the start of each window pay at its end: expansion. A decimal as text, or null where there is no answer.
arpa_per_month is the Average Revenue Per Account per month: what a paying customer pays on average at the end of each window. Formula: mrr divided by paying_customers. A decimal as text, or null where there is no answer.
starting_paying_customers is paying_customers as it stood at the start of each window. A decimal as text, or null where there is no answer.
ltv is the Lifetime Value: what a paying customer pays over the time they stay, before any cost. Formula: arpa_per_month times customer_lifespan. A decimal as text, or null where there is no answer.
starting_mrr_retained is what the customers paying at the start of each window pay per month at its end, expansion included, so it exceeds starting_mrr when they grew. A decimal as text, or null where there is no answer.
starting_arr_retained is what the customers paying at the start of each window pay per year at its end, expansion included, so it exceeds starting_arr when they grew. A decimal as text, or null where there is no answer.
new_leads is the number of customers first seen in each window as leads. A decimal as text, or null where there is no answer.
contraction_mrr is the MRR lost in each window to customers who came to pay less and still pay something, as a positive amount. A decimal as text, or null where there is no answer.
new_arr is the ARR added in each window by customers who started paying for the first time, whether or not they still pay at its end. A decimal as text, or null where there is no answer.
median_signup_to_paid_time is the median number of days from signing up to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
arr_movement is how much arr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_arr plus expansion_arr plus reactivation_arr minus contraction_arr minus churned_arr plus exchange_rate_arr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
gross_revenue_retention is the share of revenue kept over each window, before any expansion. Formula: starting_mrr minus starting_mrr_lost, divided by starting_mrr, with starting_mrr taken at the exchange rate of each window’s end rather than its start, as starting_mrr_lost is. A decimal as text, or null where there is no answer.
starting_paying_customers_lost is the number of customers with revenue at the start of each window who have none at its end. A decimal as text, or null where there is no answer.
exchange_rate_mrr is how much mrr changed in each window because exchange rates moved, with nobody paying differently in their own currency: positive when the currencies customers pay in strengthened against the reporting currency, and zero for a project whose customers all pay in it. A decimal as text, or null where there is no answer.
new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.
median_lead_to_paid_time is the median number of days from first being seen as a lead to first paying, of the customers who became paying in each window. A decimal as text, or null where there is no answer.
churned_paying_customers is how many times customers stopped paying in each window, including those who started inside it; a customer who churned twice counts twice. starting_paying_customers_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
starting_arr_lost is how much less per year the customers paying at the start of each window pay at its end: churn and contraction. A decimal as text, or null where there is no answer.
customer_churn is the share of paying customers lost over each window. Formula: starting_paying_customers_lost divided by starting_paying_customers. A decimal as text, or null where there is no answer.
net_revenue_churn is the share of revenue lost over each window after expansion is counted; negative when existing customers grew. Formula: starting_mrr_lost minus starting_mrr_gained, divided by starting_mrr, taken at the exchange rate of each window’s end rather than its start, as the other two are. A decimal as text, or null where there is no answer.
leads_converted_to_paid is the number of each window’s new_leads who have become paying since. A recent window reads low and rises as its leads convert. A decimal as text, or null where there is no answer.
reactivated_paying_customers is how many times customers started paying again in each window after having churned, whether or not they still pay at its end; a customer who came back twice counts twice. A decimal as text, or null where there is no answer.
expansion_arr is the ARR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
expansion_mrr is the MRR added in each window by paying customers who came to pay more. A decimal as text, or null where there is no answer.
churned_arr is the ARR lost in each window to customers who stopped paying, as a positive amount, including those who started inside it. starting_arr_lost counts only those paying at its start. A decimal as text, or null where there is no answer.
mrr_movement is how much mrr changed over each window: what was new, expanded and reactivated, minus what contracted and churned, plus what exchange rates moved it by. Formula: new_mrr plus expansion_mrr plus reactivation_mrr minus contraction_mrr minus churned_mrr plus exchange_rate_mrr, and under a filter or a breakdown, what entered the category less what left it. A decimal as text, or null where there is no answer.
Example
{ "values": { "arr": "579000" }, "timeseries": [ { "period": "Jul 2026", "arr": "541200" }, { "period": "Aug 2026", "arr": "556200" }, { "period": "Sep 2026", "arr": "571200" }, { "period": "Oct 2026", "arr": "579000" } ], "query": { "from": "now-3M/M", "to": "now", "interval": "month", "measure": [ "arr" ], "breakdown": [], "filter": null, "snapshots": [], "currency_code": "USD", "timezone": "America/New_York", "revenue_types": [ "recurring", "usage" ], "lookback_window": "period" }, "meta": { "from": "2026-07-01T04:00:00Z", "to": "2026-10-21T04:00:00Z", "measures": [ { "key": "arr", "label": "ARR", "unit": "money", "description": "`arr` is the Annual Run Rate: revenue per year from every active subscription at the end of each window, after discounts, recurring and usage alike." } ], "periods": [ { "label": "Jul 2026", "starts_at": "2026-07-01T04:00:00Z", "ends_at": "2026-08-01T04:00:00Z" }, { "label": "Aug 2026", "starts_at": "2026-08-01T04:00:00Z", "ends_at": "2026-09-01T04:00:00Z" }, { "label": "Sep 2026", "starts_at": "2026-09-01T04:00:00Z", "ends_at": "2026-10-01T04:00:00Z" }, { "label": "Oct 2026", "starts_at": "2026-10-01T04:00:00Z", "ends_at": "2026-11-01T04:00:00Z", "provisional": true, "elapsed": "0.645161" } ] }}