Conversions & Revenue
Conversion counts, daily trends, attributed revenue, and cash collected by source.
Conversions & Revenue
Four endpoints for querying conversion activity and revenue attribution. All
require the conversions:read scope.
Revenue means cash only
Revenue in all endpoints below refers exclusively to confirmed payments from Stripe and MercadoPago. GHL pipeline values (deal stages, closed-won projections) are never included in revenue or ROAS calculations -- they are projections, not confirmed cash.
Conversion Counts
GET /api/v1/conversionsReturns total conversions grouped by event type for the requested period.
Scope: conversions:read
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date_from | string | Yes | Start date in YYYY-MM-DD format. |
date_to | string | Yes | End date in YYYY-MM-DD format. |
Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://www.atribu.app/api/v1/conversions?date_from=2026-03-01&date_to=2026-03-25"const res = await fetch(
"https://www.atribu.app/api/v1/conversions?date_from=2026-03-01&date_to=2026-03-25",
{ headers: { Authorization: "Bearer atb_live_YOUR_KEY" } }
);
const { data } = await res.json();import requests
res = requests.get(
"https://www.atribu.app/api/v1/conversions",
headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
params={"date_from": "2026-03-01", "date_to": "2026-03-25"},
)
data = res.json()["data"]Response
{
"data": [
{ "event_type": "lead_created", "count": 85 },
{ "event_type": "appointment_booked", "count": 42 },
{ "event_type": "payment_received", "count": 28 },
{ "event_type": "closed_won", "count": 15 }
],
"meta": {
"date_from": "2026-03-01",
"date_to": "2026-03-25",
"profile_id": "uuid"
}
}Response fields
| Field | Type | Description |
|---|---|---|
event_type | string | Conversion type (e.g., lead_created, payment_received). |
count | number | Total conversions of this type in the period. |
Daily Conversions
GET /api/v1/conversions/timeseriesReturns daily conversion counts broken down by event type. Use this to chart conversion trends over time.
Scope: conversions:read
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date_from | string | Yes | Start date in YYYY-MM-DD format. |
date_to | string | Yes | End date in YYYY-MM-DD format. |
Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://www.atribu.app/api/v1/conversions/timeseries?date_from=2026-03-20&date_to=2026-03-25"const res = await fetch(
"https://www.atribu.app/api/v1/conversions/timeseries?date_from=2026-03-20&date_to=2026-03-25",
{ headers: { Authorization: "Bearer atb_live_YOUR_KEY" } }
);
const { data } = await res.json();import requests
res = requests.get(
"https://www.atribu.app/api/v1/conversions/timeseries",
headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
params={"date_from": "2026-03-20", "date_to": "2026-03-25"},
)
data = res.json()["data"]Response
{
"data": [
{ "date": "2026-03-20", "event_type": "lead_created", "count": 12 },
{ "date": "2026-03-20", "event_type": "payment_received", "count": 3 },
{ "date": "2026-03-21", "event_type": "lead_created", "count": 15 },
{ "date": "2026-03-21", "event_type": "appointment_booked", "count": 7 }
],
"meta": {
"date_from": "2026-03-20",
"date_to": "2026-03-25",
"profile_id": "uuid"
}
}Response fields
| Field | Type | Description |
|---|---|---|
date | string | Calendar date (YYYY-MM-DD). |
event_type | string | Conversion type. |
count | number | Number of conversions of this type on this day. |
Revenue by Day
GET /api/v1/revenueReturns daily attributed revenue and ad spend. Revenue is computed using the selected attribution model and includes cash payments only.
Scope: conversions:read
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date_from | string | Yes | Start date in YYYY-MM-DD format. |
date_to | string | Yes | End date in YYYY-MM-DD format. |
model | string | No | Attribution model. Default last_touch. Options: first_touch, linear, position_based, time_decay, last_non_direct. |
Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://www.atribu.app/api/v1/revenue?date_from=2026-03-20&date_to=2026-03-25&model=last_touch"const res = await fetch(
"https://www.atribu.app/api/v1/revenue?date_from=2026-03-20&date_to=2026-03-25&model=last_touch",
{ headers: { Authorization: "Bearer atb_live_YOUR_KEY" } }
);
const { data } = await res.json();import requests
res = requests.get(
"https://www.atribu.app/api/v1/revenue",
headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
params={
"date_from": "2026-03-20",
"date_to": "2026-03-25",
"model": "last_touch",
},
)
data = res.json()["data"]Response
{
"data": [
{ "date": "2026-03-20", "revenue": 2400.00, "spend": 680.00 },
{ "date": "2026-03-21", "revenue": 1800.00, "spend": 720.00 },
{ "date": "2026-03-22", "revenue": 3200.00, "spend": 650.00 }
],
"meta": {
"date_from": "2026-03-20",
"date_to": "2026-03-25",
"profile_id": "uuid"
}
}Response fields
| Field | Type | Description |
|---|---|---|
date | string | Calendar date (YYYY-MM-DD). |
revenue | number | Attributed cash revenue in reporting currency. |
spend | number | Total ad spend across all platforms. |
Cash Collected
GET /api/v1/revenue/cashReturns total cash payments grouped by payment source and currency. Unlike the attributed revenue endpoint above, this shows raw payment totals regardless of attribution model.
Scope: conversions:read
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date_from | string | Yes | Start date in YYYY-MM-DD format. |
date_to | string | Yes | End date in YYYY-MM-DD format. |
Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
"https://www.atribu.app/api/v1/revenue/cash?date_from=2026-03-01&date_to=2026-03-25"const res = await fetch(
"https://www.atribu.app/api/v1/revenue/cash?date_from=2026-03-01&date_to=2026-03-25",
{ headers: { Authorization: "Bearer atb_live_YOUR_KEY" } }
);
const { data } = await res.json();import requests
res = requests.get(
"https://www.atribu.app/api/v1/revenue/cash",
headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
params={"date_from": "2026-03-01", "date_to": "2026-03-25"},
)
data = res.json()["data"]Response
{
"data": [
{ "source": "stripe", "currency": "USD", "total": 9800.00, "count": 35 },
{ "source": "mercadopago", "currency": "MXN", "total": 45000.00, "count": 12 }
],
"meta": {
"date_from": "2026-03-01",
"date_to": "2026-03-25",
"profile_id": "uuid"
}
}Response fields
| Field | Type | Description |
|---|---|---|
source | string | Payment provider (stripe, mercadopago). |
currency | string | ISO 4217 currency code. |
total | number | Sum of payments in the original currency. |
count | number | Number of payments. |
Cash collected vs. attributed revenue
Cash collected (/revenue/cash) is the raw sum of payments, independent
of any attribution model. Attributed revenue (/revenue) distributes
payment value across the marketing touchpoints that contributed to the
conversion, based on the selected model. Use cash collected for financial
reconciliation and attributed revenue for marketing performance analysis.