What is the average monthly revenue per client (ARPU/ARPA) for Direct/SMB customers versus Partner/accountancy practice customers? Show the comparison for the most recent full month.
Basis: Average monthly revenue per paying account: Prepare MRR for Direct/SMB customers and Prepare Monthly, month-end snapshot for August 2026, the most recent full month. Governed filters applied. Chandler is still young and makes mistakes in his calculations sometimes — reach out to the Data & Analytics team in #analytics-questions-and-alerts if you have questions.
Per-step detail — each LLM call, each Omni request, each rejected draft —
is traced to stdout only and is not stored, so it cannot be shown here.
Query attempts counts run_query executions, not model turns.
WITH booking_grain AS (
SELECT
omni_dbt__eds_all_accounts."DERIVED_ACCOUNT_ID" AS "Account ID",
omni_dbt__eds_all_accounts."FINANCE_ACCOUNT_TYPE" AS "Finance Account Type",
omni_dbt__eds_bookings."PRIMARY_KEY" AS "Booking Primary Key",
MAX(omni_dbt__eds_bookings."PREPARE_BOOKINGS_MRR") AS "Prepare MRR",
MAX(omni_dbt__eds_bookings."PREPARE_BOOKINGS_MONTHLY_ACV") AS "Prepare Monthly ACV"
FROM PROD."EDS_ALL_ACCOUNTS" AS omni_dbt__eds_all_accounts
INNER JOIN PROD."EDS_CALENDAR_DAY" AS omni_dbt__eds_calendar_day
ON omni_dbt__eds_calendar_day."DATE_DAY" >= omni_dbt__eds_all_accounts."VALID_FROM" AND omni_dbt__eds_calendar_day."DATE_DAY" <= omni_dbt__eds_all_accounts."VALID_TO"
LEFT JOIN PROD."EDS_BOOKINGS" AS omni_dbt__eds_bookings
ON omni_dbt__eds_all_accounts."DERIVED_ACCOUNT_ID" = omni_dbt__eds_bookings."DERIVED_ACCOUNT_ID" AND omni_dbt__eds_calendar_day."DATE_DAY" >= omni_dbt__eds_bookings."VALID_FROM" AND omni_dbt__eds_calendar_day."DATE_DAY" <= omni_dbt__eds_bookings."VALID_TO"
WHERE omni_dbt__eds_calendar_day."DATE_DAY" = DATE_FROM_PARTS(2026, 8, 31)
AND omni_dbt__eds_calendar_day."DATE_DAY" = DATE_TRUNC('MONTH', omni_dbt__eds_calendar_day."DATE_DAY" + INTERVAL '1 MONTH') - INTERVAL '1 DAY'
AND omni_dbt__eds_all_accounts."FINANCE_ACCOUNT_TYPE" IN ('Corporate', 'Accountant')
AND omni_dbt__eds_bookings."HAS_PAID_SUBSCRIPTION" = TRUE
AND COALESCE(omni_dbt__eds_all_accounts."IS_DEXT_DEMO", FALSE) = FALSE
AND omni_dbt__eds_all_accounts."FRANCHISE_NAME" IS NULL
AND (omni_dbt__eds_all_accounts."SALESFORCE_ACCOUNT_TYPE" != 'Reseller' OR omni_dbt__eds_all_accounts."SALESFORCE_ACCOUNT_TYPE" IS NULL)
GROUP BY
omni_dbt__eds_all_accounts."DERIVED_ACCOUNT_ID",
omni_dbt__eds_all_accounts."FINANCE_ACCOUNT_TYPE",
omni_dbt__eds_bookings."PRIMARY_KEY"
), account_grain AS (
SELECT
"Account ID" AS "Account ID",
"Finance Account Type" AS "Finance Account Type",
SUM(CASE WHEN "Finance Account Type" = 'Corporate' THEN "Prepare MRR" ELSE "Prepare Monthly ACV" END) AS "Monthly Revenue"
FROM booking_grain
GROUP BY "Account ID", "Finance Account Type"
)
SELECT
CASE WHEN "Finance Account Type" = 'Corporate' THEN 'Direct/SMB' ELSE 'Partner/accountancy practice' END AS "Customer Segment",
CASE WHEN "Finance Account Type" = 'Corporate' THEN 'Prepare MRR' ELSE 'Prepare Monthly ACV' END AS "Revenue Metric",
SUM("Monthly Revenue") AS "Total Monthly Revenue",
COUNT(DISTINCT "Account ID") AS "Paying Accounts",
SUM("Monthly Revenue") / NULLIF(COUNT(DISTINCT "Account ID"), 0) AS "Average Monthly Revenue per Account"
FROM account_grain
GROUP BY "Finance Account Type"
ORDER BY "Customer Segment"
LIMIT 10
No feedback linked to this request.
Cost is the LLM completion spend LiteLLM priced for each call, summed per
request.
Chandler is running on the Codex CLI, which draws ChatGPT plan quota
rather than per-token API billing, so this figure is not money paid —
it is what the same traffic would have cost on the API, priced from the
token counts Codex reports. Read it as the size of the bill avoided.
Two known limits: embedding spend is not recorded, so
retrieval and matching cost is missing, and because the figure is one sum
per request it cannot be split by model within a request — a
request's classifier and agent calls can use different models while
llm_model holds only one name.
Only authenticated calls are logged, USAGE_LOG_ENABLED can
switch logging off, and log writes are fail-soft — this is not a complete
record of traffic. Questions are grouped into sessions: a session is
exact when the caller echoed its id back to us and otherwise inferred from
a 30-minute gap in that user’s activity, so a grouping is only as
good as the source shown on the session itself. A call with no
attributable user gets no session at all; those questions are listed
separately rather than dropped.