Atribu
Concepts

Revenue Types

Cash vs pipeline vs gross -- why only confirmed payments count for ROAS

Revenue Types

Atribu tracks three distinct types of monetary value. Each serves a different purpose, and mixing them produces meaningless metrics.

Loading diagram...

The three types

Cash

Confirmed payments from Stripe and MercadoPago. The only value used for ROAS.

Pipeline

Deal values from GoHighLevel opportunities. Projections, not confirmed revenue.

Gross

Order values from e-commerce platforms. May include refunds or cancellations.


Cash (for ROAS)

revenue_type = 'cash'

Real payments confirmed by Stripe or MercadoPago. This is the only value used for ROAS calculations.

PropertyDetail
Sourcepayment_received events from Stripe/MercadoPago webhooks
Reliability100% -- these are actual bank transactions
API fieldrevenue in /api/v1/overview and /api/v1/campaigns
Used in ROASYes

Pipeline

revenue_type = 'pipeline'

Deal values from GoHighLevel opportunities (lead_created, appointment_booked, closed_won). These are projections, not confirmed cash.

PropertyDetail
SourceGHL opportunity sync
ReliabilityVariable -- deals can be lost, renegotiated, or never close
API fieldVisible in conversion counts, excluded from revenue and roas
Used in ROASNo

Gross

revenue_type = 'gross'

Order values from e-commerce platforms (e.g., order_placed events). May include orders that are later refunded, cancelled, or never fulfilled.

PropertyDetail
SourceE-commerce platforms (Shopify, etc.)
ReliabilityMedium -- represents intent to pay, not confirmed collection
API fieldTracked separately from cash revenue
Used in ROASNo

Why this matters

Never mix pipeline values into ROAS

If pipeline values were included in ROAS, a single $50,000 deal projection could make a $500 ad campaign show 100x ROAS -- completely misleading. That deal might never close, get renegotiated to $5,000, or be lost entirely. Only confirmed cash payments produce trustworthy ROAS numbers.

Consider this example:

MetricWith cash onlyWith pipeline included
Ad spend$2,000$2,000
Revenue$6,000 (3 payments)$56,000 (3 payments + 1 deal)
ROAS3.0x28.0x
Accurate?YesNo -- $50K deal hasn't closed

How it appears in the API

Overview endpoint

The revenue and roas fields in /api/v1/overview always use cash only:

Overview response (revenue = cash only)
{
  "data": {
    "current": {
      "spend": 4250.00,
      "revenue": 12800.00,
      "roas": 3.01,
      "cash_revenue": 12800.00,
      "cash_payments": 48
    }
  }
}

Campaigns endpoint

Campaign-level outcome_value and roas also reflect cash revenue only:

Campaign response
{
  "data": [
    {
      "campaign_name": "Spring Sale - Conversions",
      "spend": 1800.00,
      "outcome_count": 45,
      "outcome_value": 6200.00,
      "roas": 3.44
    }
  ]
}

Conversion counts include all types

The outcome_count field includes conversions of all revenue types (cash, pipeline, and gross). This gives you visibility into total conversion volume. Only the monetary fields (revenue, outcome_value, roas) are restricted to cash.

Conversions endpoint

The /api/v1/conversions endpoint returns individual conversion events with their revenue_type, so you can filter and analyze each type independently:

Conversion with revenue_type
{
  "conversion_type": "payment_received",
  "revenue_type": "cash",
  "value": 450.00,
  "customer_name": "John Doe"
}
Pipeline conversion
{
  "conversion_type": "closed_won",
  "revenue_type": "pipeline",
  "value": 15000.00,
  "customer_name": "Acme Corp"
}

On this page