Revenue & Payouts

Earn revenue from vendor overage queries against your data. When vendors exceed their included monthly allowance, Conduit automatically tracks per-query revenue and pays out via Stripe Connect.

Revenue model

Vendor base subscriptions go entirely to Conduit. Your MLS earns revenue from overage queries — when vendors exceed their plan's included monthly allowance, each additional query generates revenue split between Conduit and your MLS:

Base subscription ($99/mo or $499/mo)
    └── 100% Conduit (your MLS share: $0)

Overage queries (beyond plan allowance)
    │  $0.05/query (Starter) or $0.03/query (Professional)
    │
    ├── Conduit: (100% - your share)
    └── Your MLS: your revenue_share_pct (10-70%, default 40%)

Example: 3 vendors on Professional, each doing 72K queries/mo
  → 50K included per vendor (no revenue share)
  → 22K overage per vendor × $0.03 = $660/vendor
  → Your 40% share = $264/vendor × 3 = $792/mo

Revenue dashboard

bash
GET /api/mls/revenue?period=30d

Response:

json
{
  "summary": {
    "total_earned": 847.32,
    "total_queries": 12450,
    "avg_revenue_per_query": 0.068,
    "revenue_share_pct": 40,
    "pending_payout": 847.32,
    "total_paid": 2341.80
  },
  "connect": {
    "status": "active",
    "onboarding_complete": true,
    "connect_id": "acct_xxx"
  },
  "daily_revenue": [
    { "date": "2026-02-01", "revenue": 28.44, "queries": 415 },
    { "date": "2026-02-02", "revenue": 31.12, "queries": 458 }
  ],
  "by_vendor": [
    { "vendor_id": "uuid", "vendor_name": "AI Realty Co", "revenue": 523.41, "queries": 7800 }
  ],
  "by_tool": [
    { "tool_name": "search_properties", "revenue": 645.20, "queries": 9500 }
  ]
}

Periods: 7d, 30d, 90d, all

Stripe Connect setup

To receive payouts, connect your Stripe account via Stripe Connect Express:

bash
# Check Connect status
GET /api/mls/connect
→ { "connect_id": null, "status": "not_started", "onboarding_complete": false }

# Start Stripe Connect onboarding
POST /api/mls/connect
→ { "url": "https://connect.stripe.com/setup/..." }

Redirect to the returned URL. After completing Stripe onboarding, your Connect status changes to active.

Requesting payouts

Revenue accumulates in your MLS revenue ledger. Request payouts for pending ledger entries:

json
POST /api/mls/payouts

{ "ledger_id": "uuid" }

→ { "success": true, "transfer_id": "uuid" }

Payout statuses

StatusDescription
pendingRevenue accumulated, payout not yet requested
processingTransfer initiated with Stripe
paidFunds transferred to your bank account
failedTransfer failed — can be retried

[i]Retry failed payouts

If a payout fails (e.g., bank account issue), fix the issue in Stripe and retry: { "ledger_id": "uuid", "action": "retry" }