Get Unit Economics Over Time
Daily series of CAC, LTV and cost per sale (CPV), with one tab per paid channel.
Use it to follow each channel's efficiency over time. The Orgânico (organic) channel is not included, so the channel list can differ from /v1/acquisition/new-customers-over-time.
- Each ratio is calculated from the day's totals, never as an average.
cacuses the day's spend on acquisition campaigns and the customers they brought.cpvdivides the day's total spend by orders.ltvis the gross LTV (no margin) of the customers won that day.- A day on which a ratio cannot be calculated carries
null: leave a gap in the chart, not a zero. - The series is sparse: days with no data are omitted.
ClientIdAuthClientSecretAuthx-client-id<token>Client ID
x-client-secret<token>Client secret
organizationId*stringOrganization identifier (required). A missing or non-string value is a 400.
period?stringDeprecatedDeprecated: use startDate and endDate, which take precedence when sent. Relative period of N days ending today, inclusive (7d = today and the 6 days before it). "Today" is the UTC calendar day, and that last day is still partial. Accepted values: 7d, 30d, 90d, 1y. Omitted or empty means 30d; any other value returns 400.
"30d""7d""30d""90d""1y"startDate?stringStart of the period (YYYY-MM-DD, inclusive). Send it together with endDate: sending only one of them returns 400. Takes precedence over period. Send the date only: a date with a time or a date that does not exist returns 400. Rules: startDate ≤ endDate, neither date in the future (UTC), and at most 365 days between the dates (up to 366 days in the period). The comparison uses the period of the same length right before it.
dateendDate?stringEnd of the period (YYYY-MM-DD, inclusive). See startDate for the rules. When the end date is today, that last day is still partial, because the day's data keeps arriving.
dateUnit economics series returned successfully
application/json- response
marginConfigured?booleanIndicates whether the organization configured a contribution margin on the platform. false means the 100% default is in use.
marginCompleteness?MarginCompletenessCompleteness of the contribution margin configured by cost item: complete = every item resolved; partial = some item is pending, so the applied margin is partial; none = no item breakdown (margin never configured, or configured as a single percentage; tell them apart with marginConfigured).
"complete""partial""none"marginItemStatus?Status per item of the margin composition (synced = from the orders, configured = informed by the user, pending = not configured or missing data). null when the organization has no composition.
tabs*array<>One tab per PAID channel; Orgânico is excluded. The tab list can therefore differ from /v1/acquisition/new-customers-over-time.
curl -X GET "https://example.com/v1/acquisition/unit-economics-over-time?organizationId=c0ad4763-173e-4a05-9cff-5208c8ea5f6a&period=30d&startDate=2026-03-11&endDate=2026-03-22"{ "tabs": [ { "channel": "Meta Ads", "points": [ { "date": "2026-07-05", "cac": 104.17, "ltv": 380.5, "cpv": 62.5 }, { "date": "2026-07-06", "cac": null, "ltv": null, "cpv": 71.2 } ] } ]}