Skip to content

Query metrics

POST
/v1/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"
}'

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 filter or a breakdown has 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.

Media typeapplication/json
object
breakdown

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.

Array
<= 3 items
Any of:

A key: customer.country_code, subscription_item.plan_id, movement_type, revenue_type.

string
currency_code

The currency to report in, by ISO 4217 code: EUR. The project’s reporting currency unless said.

string
>= 3 characters <= 3 characters
filter

Counts only the customers, subscriptions or items the condition matches. See Filters. A POST only.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not

Matches when the condition does not.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item

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
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription

Matches when the customer has a subscription that matches the condition. Everything inside is about that one subscription.

object
all

Matches when every condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
any

Matches when at least one condition in the list does. At least one.

Array<object>

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
all
Array<object> recursive
any
Array<object> recursive
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
at
Any of:
string
Allowed values: window now
contains
Any of:
string
equals
Any of:
string
greater_than
Any of:
number
greater_than_or_equals
Any of:
number
has_subscription
object recursive
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
has_subscription_item
object recursive
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
key

What is compared — customer.status, subscription_item.quantity, customer.properties.hubspot.industry.

string
less_than
Any of:
number
less_than_or_equals
Any of:
number
not
object recursive
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
not_equals
Any of:
string
present

Whether there is any value at all.

boolean
from

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.

string
interval

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.

string
Allowed values: day week month quarter year
lookback_window

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.

string
<= 16 characters
measure
required
Any of:
string
Allowed values: starting_mrr new_mrr expansion_mrr reactivation_mrr churned_mrr contraction_mrr exchange_rate_mrr mrr_movement run_rate_movers mrr mrr_growth starting_arr new_arr expansion_arr reactivation_arr churned_arr contraction_arr exchange_rate_arr arr_movement arr arr_growth starting_mrr_lost starting_mrr_gained starting_mrr_retained starting_arr_lost starting_arr_gained starting_arr_retained gross_revenue_churn net_revenue_churn gross_revenue_retention net_revenue_retention arpa_per_month arpa_per_year starting_customers net_new_customers customers starting_paying_customers new_paying_customers reactivated_paying_customers churned_paying_customers net_new_paying_customers paying_customers starting_paying_customers_lost starting_paying_customers_retained customer_churn monthly_customer_churn customer_retention new_leads new_signups signups_converted_to_paid signup_to_paid_conversion leads_converted_to_paid lead_to_paid_conversion median_lead_to_paid_time median_signup_to_paid_time customer_lifespan ltv
revenue_types

The kinds of revenue to count: recurring, usage, or both, which is what MRR, the Monthly Run Rate, counts and the default.

Array<string>
Allowed values: recurring usage
snapshots

Up to eight more dates to read the measures at, each at the end of that day: now-1y, 2026-01-01.

Array<string>
timezone

The timezone to cut days and periods in, by IANA name: Europe/Copenhagen. The project’s reporting timezone unless said. /v1/timezones lists them.

string
to

The end of the range, in the same forms as from. It includes the whole day it names. Today unless said.

string

Example

{
"measure": "arr",
"interval": "month",
"from": "now-3M/M"
}

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.

Media typeapplication/json

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
breakdown
object
categories
required
Array<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
breakdown
object recursive
category
required

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.

string
label
required

The value as a person reads it: a country’s name, a plan’s, the period a truncated date begins.

string
timeseries
Array<object>

One period: its label, and each measure’s value under its key.

object
starting_mrr

starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr

starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
churned_mrr

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.

string format: decimal
starting_mrr_lost

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.

string format: decimal
customer_lifespan

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.

string format: decimal
paying_customers

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.

string format: decimal
reactivation_arr

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.

string format: decimal
arr

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.

string format: decimal
net_new_paying_customers

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.

string format: decimal
signup_to_paid_conversion

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.

string format: decimal
mrr_growth

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.

string format: decimal
lead_to_paid_conversion

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.

string format: decimal
starting_mrr_gained

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.

string format: decimal
reactivation_mrr

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.

string format: decimal
starting_paying_customers_retained

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.

string format: decimal
contraction_arr

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.

string format: decimal
new_mrr

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.

string format: decimal
monthly_customer_churn

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.

string format: decimal
run_rate_movers

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.

string format: decimal
customers

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.

string format: decimal
signups_converted_to_paid

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.

string format: decimal
arpa_per_year

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.

string format: decimal
gross_revenue_churn

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.

string format: decimal
net_revenue_retention

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.

string format: decimal
exchange_rate_arr

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.

string format: decimal
new_paying_customers

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.

string format: decimal
mrr

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.

string format: decimal
net_new_customers

net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.

string format: decimal
arr_growth

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.

string format: decimal
customer_retention

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.

string format: decimal
starting_customers

starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr_gained

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.

string format: decimal
arpa_per_month

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.

string format: decimal
starting_paying_customers

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.

string format: decimal
ltv

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.

string format: decimal
starting_mrr_retained

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.

string format: decimal
starting_arr_retained

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.

string format: decimal
new_leads

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.

string format: decimal
contraction_mrr

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.

string format: decimal
new_arr

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.

string format: decimal
median_signup_to_paid_time

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.

string format: decimal
arr_movement

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.

string format: decimal
gross_revenue_retention

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.

string format: decimal
starting_paying_customers_lost

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.

string format: decimal
exchange_rate_mrr

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.

string format: decimal
new_signups

new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.

string format: decimal
median_lead_to_paid_time

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.

string format: decimal
churned_paying_customers

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.

string format: decimal
starting_arr_lost

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.

string format: decimal
customer_churn

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.

string format: decimal
net_revenue_churn

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.

string format: decimal
leads_converted_to_paid

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.

string format: decimal
period
required

The period’s label.

string
reactivated_paying_customers

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.

string format: decimal
expansion_arr

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.

string format: decimal
expansion_mrr

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.

string format: decimal
churned_arr

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.

string format: decimal
mrr_movement

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.

string format: decimal
values
required

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

starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr

starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
churned_mrr

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.

string format: decimal
starting_mrr_lost

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.

string format: decimal
customer_lifespan

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.

string format: decimal
paying_customers

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.

string format: decimal
reactivation_arr

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.

string format: decimal
arr

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.

string format: decimal
net_new_paying_customers

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.

string format: decimal
signup_to_paid_conversion

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.

string format: decimal
mrr_growth

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.

string format: decimal
lead_to_paid_conversion

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.

string format: decimal
starting_mrr_gained

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.

string format: decimal
reactivation_mrr

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.

string format: decimal
starting_paying_customers_retained

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.

string format: decimal
contraction_arr

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.

string format: decimal
new_mrr

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.

string format: decimal
monthly_customer_churn

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.

string format: decimal
run_rate_movers

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.

string format: decimal
customers

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.

string format: decimal
signups_converted_to_paid

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.

string format: decimal
arpa_per_year

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.

string format: decimal
gross_revenue_churn

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.

string format: decimal
net_revenue_retention

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.

string format: decimal
exchange_rate_arr

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.

string format: decimal
new_paying_customers

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.

string format: decimal
mrr

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.

string format: decimal
net_new_customers

net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.

string format: decimal
arr_growth

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.

string format: decimal
customer_retention

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.

string format: decimal
starting_customers

starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr_gained

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.

string format: decimal
arpa_per_month

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.

string format: decimal
starting_paying_customers

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.

string format: decimal
ltv

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.

string format: decimal
starting_mrr_retained

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.

string format: decimal
starting_arr_retained

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.

string format: decimal
new_leads

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.

string format: decimal
contraction_mrr

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.

string format: decimal
new_arr

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.

string format: decimal
median_signup_to_paid_time

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.

string format: decimal
arr_movement

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.

string format: decimal
gross_revenue_retention

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.

string format: decimal
starting_paying_customers_lost

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.

string format: decimal
exchange_rate_mrr

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.

string format: decimal
new_signups

new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.

string format: decimal
median_lead_to_paid_time

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.

string format: decimal
churned_paying_customers

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.

string format: decimal
starting_arr_lost

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.

string format: decimal
customer_churn

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.

string format: decimal
net_revenue_churn

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.

string format: decimal
leads_converted_to_paid

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.

string format: decimal
reactivated_paying_customers

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.

string format: decimal
expansion_arr

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.

string format: decimal
expansion_mrr

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.

string format: decimal
churned_arr

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.

string format: decimal
mrr_movement

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.

string format: decimal
key
required

The dimension, as the request named it.

string
meta
required

About the answer: the dates the range came to, the measures in it with their names and units, and the periods.

object
from
required

The start of the range, as resolved.

string format: date-time
measures
required

Every measure the answer carries, at any depth, in the order asked.

Array<object>
object
description
required

What the number is, in a sentence.

string
key
required

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.

string
label
required

What to call it: Revenue, Run rate movement, Lost revenue.

string
unit
required

money, an amount in the answer’s currency_code; count, a whole number; or percent, already scaled so that 4.2 is 4.2%.

string
Allowed values: money count percent days months
periods
required

The periods every node’s timeseries is cut into, in order — with no interval, the one period the whole range is.

Array<object>
object
elapsed

With provisional: the fraction of the period that had elapsed when the query ran, as a decimal between 0 and 1.

string format: decimal
ends_at
required

Exclusive.

string format: date-time
label
required

Sep 2026, Q3 2026, 15–31 Jan 2026, 15 Jan – 3 Feb 2026.

string
provisional

Present, and true, on the period still in progress, whose numbers are still moving.

boolean
starts_at
required
string format: date-time
to
required

The end of the range, as resolved. Exclusive.

string format: date-time
query
required

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
breakdown
required

The dimensions, each with its measures resolved; empty when none.

Array<object>
object
at

window, now, or a datetime.

string
boundaries
Array<number>
key
required
string
max_categories
integer
measure
required
Array<string>
truncate
string
currency_code
required

The currency every amount is in, by ISO 4217 code.

string
filter
required

The filter in its object form, whichever form it was sent in.

object
from
required

The start of the range, as written.

string
interval
required

How the range is cut; null for no timeseries.

string
Allowed values: day week month quarter year
lookback_window
required
string
measure
required

The measures the root and the snapshots carry.

Array<string>
revenue_types
required
Array<string>
Allowed values: recurring usage
snapshots
required

The instants, as written; empty when none.

Array<string>
timezone
required

The IANA zone the range is cut into days and periods in.

string
to
required

The end of the range, as written.

string
snapshots
Array<object>

Each measure’s value as it stood at the end of one day, under its key.

object
starting_mrr

starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr

starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
churned_mrr

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.

string format: decimal
starting_mrr_lost

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.

string format: decimal
customer_lifespan

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.

string format: decimal
paying_customers

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.

string format: decimal
reactivation_arr

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.

string format: decimal
arr

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.

string format: decimal
net_new_paying_customers

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.

string format: decimal
signup_to_paid_conversion

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.

string format: decimal
mrr_growth

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.

string format: decimal
lead_to_paid_conversion

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.

string format: decimal
starting_mrr_gained

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.

string format: decimal
reactivation_mrr

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.

string format: decimal
starting_paying_customers_retained

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.

string format: decimal
contraction_arr

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.

string format: decimal
new_mrr

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.

string format: decimal
monthly_customer_churn

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.

string format: decimal
at
required

The end of the day the snapshot reads at. Exclusive.

string format: date-time
run_rate_movers

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.

string format: decimal
customers

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.

string format: decimal
signups_converted_to_paid

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.

string format: decimal
arpa_per_year

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.

string format: decimal
gross_revenue_churn

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.

string format: decimal
net_revenue_retention

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.

string format: decimal
exchange_rate_arr

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.

string format: decimal
new_paying_customers

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.

string format: decimal
mrr

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.

string format: decimal
net_new_customers

net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.

string format: decimal
arr_growth

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.

string format: decimal
customer_retention

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.

string format: decimal
starting_customers

starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr_gained

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.

string format: decimal
arpa_per_month

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.

string format: decimal
starting_paying_customers

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.

string format: decimal
ltv

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.

string format: decimal
starting_mrr_retained

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.

string format: decimal
starting_arr_retained

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.

string format: decimal
new_leads

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.

string format: decimal
contraction_mrr

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.

string format: decimal
new_arr

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.

string format: decimal
median_signup_to_paid_time

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.

string format: decimal
arr_movement

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.

string format: decimal
gross_revenue_retention

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.

string format: decimal
starting_paying_customers_lost

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.

string format: decimal
exchange_rate_mrr

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.

string format: decimal
new_signups

new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.

string format: decimal
median_lead_to_paid_time

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.

string format: decimal
churned_paying_customers

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.

string format: decimal
starting_arr_lost

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.

string format: decimal
customer_churn

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.

string format: decimal
net_revenue_churn

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.

string format: decimal
leads_converted_to_paid

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.

string format: decimal
reactivated_paying_customers

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.

string format: decimal
expansion_arr

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.

string format: decimal
label
required

Now, 30 days ago, or the day.

string
expansion_mrr

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.

string format: decimal
churned_arr

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.

string format: decimal
mrr_movement

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.

string format: decimal
timeseries
Array<object>

One period: its label, and each measure’s value under its key.

object
starting_mrr

starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr

starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
churned_mrr

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.

string format: decimal
starting_mrr_lost

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.

string format: decimal
customer_lifespan

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.

string format: decimal
paying_customers

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.

string format: decimal
reactivation_arr

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.

string format: decimal
arr

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.

string format: decimal
net_new_paying_customers

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.

string format: decimal
signup_to_paid_conversion

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.

string format: decimal
mrr_growth

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.

string format: decimal
lead_to_paid_conversion

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.

string format: decimal
starting_mrr_gained

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.

string format: decimal
reactivation_mrr

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.

string format: decimal
starting_paying_customers_retained

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.

string format: decimal
contraction_arr

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.

string format: decimal
new_mrr

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.

string format: decimal
monthly_customer_churn

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.

string format: decimal
run_rate_movers

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.

string format: decimal
customers

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.

string format: decimal
signups_converted_to_paid

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.

string format: decimal
arpa_per_year

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.

string format: decimal
gross_revenue_churn

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.

string format: decimal
net_revenue_retention

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.

string format: decimal
exchange_rate_arr

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.

string format: decimal
new_paying_customers

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.

string format: decimal
mrr

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.

string format: decimal
net_new_customers

net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.

string format: decimal
arr_growth

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.

string format: decimal
customer_retention

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.

string format: decimal
starting_customers

starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr_gained

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.

string format: decimal
arpa_per_month

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.

string format: decimal
starting_paying_customers

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.

string format: decimal
ltv

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.

string format: decimal
starting_mrr_retained

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.

string format: decimal
starting_arr_retained

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.

string format: decimal
new_leads

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.

string format: decimal
contraction_mrr

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.

string format: decimal
new_arr

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.

string format: decimal
median_signup_to_paid_time

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.

string format: decimal
arr_movement

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.

string format: decimal
gross_revenue_retention

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.

string format: decimal
starting_paying_customers_lost

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.

string format: decimal
exchange_rate_mrr

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.

string format: decimal
new_signups

new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.

string format: decimal
median_lead_to_paid_time

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.

string format: decimal
churned_paying_customers

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.

string format: decimal
starting_arr_lost

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.

string format: decimal
customer_churn

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.

string format: decimal
net_revenue_churn

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.

string format: decimal
leads_converted_to_paid

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.

string format: decimal
period
required

The period’s label.

string
reactivated_paying_customers

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.

string format: decimal
expansion_arr

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.

string format: decimal
expansion_mrr

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.

string format: decimal
churned_arr

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.

string format: decimal
mrr_movement

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.

string format: decimal
values
required

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

starting_mrr is mrr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr

starting_arr is arr as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
churned_mrr

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.

string format: decimal
starting_mrr_lost

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.

string format: decimal
customer_lifespan

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.

string format: decimal
paying_customers

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.

string format: decimal
reactivation_arr

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.

string format: decimal
arr

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.

string format: decimal
net_new_paying_customers

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.

string format: decimal
signup_to_paid_conversion

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.

string format: decimal
mrr_growth

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.

string format: decimal
lead_to_paid_conversion

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.

string format: decimal
starting_mrr_gained

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.

string format: decimal
reactivation_mrr

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.

string format: decimal
starting_paying_customers_retained

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.

string format: decimal
contraction_arr

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.

string format: decimal
new_mrr

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.

string format: decimal
monthly_customer_churn

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.

string format: decimal
run_rate_movers

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.

string format: decimal
customers

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.

string format: decimal
signups_converted_to_paid

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.

string format: decimal
arpa_per_year

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.

string format: decimal
gross_revenue_churn

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.

string format: decimal
net_revenue_retention

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.

string format: decimal
exchange_rate_arr

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.

string format: decimal
new_paying_customers

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.

string format: decimal
mrr

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.

string format: decimal
net_new_customers

net_new_customers is how much customers changed over each window. A decimal as text, or null where there is no answer.

string format: decimal
arr_growth

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.

string format: decimal
customer_retention

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.

string format: decimal
starting_customers

starting_customers is customers as it stood at the start of each window. A decimal as text, or null where there is no answer.

string format: decimal
starting_arr_gained

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.

string format: decimal
arpa_per_month

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.

string format: decimal
starting_paying_customers

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.

string format: decimal
ltv

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.

string format: decimal
starting_mrr_retained

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.

string format: decimal
starting_arr_retained

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.

string format: decimal
new_leads

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.

string format: decimal
contraction_mrr

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.

string format: decimal
new_arr

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.

string format: decimal
median_signup_to_paid_time

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.

string format: decimal
arr_movement

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.

string format: decimal
gross_revenue_retention

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.

string format: decimal
starting_paying_customers_lost

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.

string format: decimal
exchange_rate_mrr

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.

string format: decimal
new_signups

new_signups is the number of customers who signed up in each window. A decimal as text, or null where there is no answer.

string format: decimal
median_lead_to_paid_time

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.

string format: decimal
churned_paying_customers

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.

string format: decimal
starting_arr_lost

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.

string format: decimal
customer_churn

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.

string format: decimal
net_revenue_churn

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.

string format: decimal
leads_converted_to_paid

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.

string format: decimal
reactivated_paying_customers

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.

string format: decimal
expansion_arr

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.

string format: decimal
expansion_mrr

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.

string format: decimal
churned_arr

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.

string format: decimal
mrr_movement

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.

string format: decimal

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"
}
]
}
}