Docs

Set up Revenue Linter for the beta review.

Start with the free check or browser-only evidence tracker, then authenticate only when your review path calls for audit-only Stripe evidence, secure evidence uploads, Revenue Pulse, or findings review.

  1. 1
    Diagnostic

    Start from the free check and choose the review path.

  2. 2
    Auth and setup

    Sign in, then follow guided setup one step at a time.

  3. 3
    Connect Stripe

    Connect Stripe in audit-only mode. Stripe changes are disabled in Revenue Linter.

  4. 4
    Add evidence source

    Add app/access evidence so billing-side findings can be confirmed.

  5. 5
    Run audit

    Run Revenue Pulse after Stripe and product access evidence are present.

  6. 6
    Inspect findings

    Review impact, review-ready evidence, engineering handoffs, and evidence packets.

Search docs

Find the answer before asking N7X.

FAQ

FAQ

Common answers for N7X, audit-only Stripe setup, supported systems, free preview limits, Core evidence, and paid review paths.

Open FAQ

Evidence tracker

Check structured CSV or JSON evidence locally for Paddle, Chargebee, custom ledgers, Prisma exports, warehouse views, and other non-native billing stacks.

Open evidence tracker

1. Connect Stripe

Connect Stripe in audit-only mode. Stripe changes are disabled in Revenue Linter, and restricted keys stay under Advanced fallback setup.

Open Stripe setup guide

2. Confirm product access

Share active users, entitlements, plans, and billing-provider references so the review can compare billing state with product access.

3. Add usage signals

Share feature, seat, export, and limit activity so Revenue Expansion can identify active, dormant, and upgrade-ready accounts.

Product usage guide

4. Add evidence history

Share terms accepted, login, cancellation, refund, and support history for Evidence Readiness.

5. Add PayPal monitoring

Connect PayPal billing events with the setup guide, then run sync and Revenue Pulse.

PayPal setup guide

6. Add acquisition context

Pass campaign and app-user metadata into Stripe so Revenue Expansion can group cohorts and export advisory follow-up lists.

Stripe UTM guide

Structured evidence batch example

{
  "uds_version": "1.0",
  "export_id": "local-2026-06-21T12:00:00.000Z",
  "generated_at": "2026-06-21T12:00:00.000Z",
  "source_type": "json",
  "source_system": "local_export",
  "records": [{
    "uds_version": "1.0",
    "record_type": "billing_state",
    "idempotency_key": "billing-sub_123-2026-06-21",
    "source_system": "stripe_export",
    "observed_at": "2026-06-21T12:00:00.000Z",
    "provider": "stripe",
    "provider_customer_id": "cus_123",
    "provider_subscription_id": "sub_123",
    "billing_status": "past_due",
    "amount_cents": 7900,
    "amount_basis": "mrr",
    "billing_interval": "month",
    "currency": "usd",
    "updated_at": "2026-06-21T12:00:00.000Z"
  }]
}

Validate local structured evidence in the browser before using Import Guard persisted imports, Evidence Guard event monitoring, or findings review.

Copy export scripts

Persisted structured import example

POST /api/uds/import
Content-Type: application/json

{
  "uds_version": "1.0",
  "export_id": "warehouse-2026-06-21T12:00:00.000Z",
  "generated_at": "2026-06-21T12:00:00.000Z",
  "source_type": "warehouse",
  "source_system": "billing_warehouse",
  "records": [{
    "uds_version": "1.0",
    "record_type": "billing_state",
    "idempotency_key": "billing-sub_123-2026-06-21",
    "source_system": "billing_warehouse",
    "observed_at": "2026-06-21T12:00:00.000Z",
    "provider": "stripe",
    "provider_customer_id": "cus_123",
    "provider_subscription_id": "sub_123",
    "billing_status": "past_due",
    "updated_at": "2026-06-21T12:00:00.000Z"
  }]
}

Requires an authenticated Import Guard workspace or higher. Imported records are normalized, diagnostics run against the latest workspace evidence, and findings are saved with stable fingerprints.

Evidence event endpoint example

POST /api/uds/events
Authorization: Bearer <ingest_token>
Content-Type: application/json

{
  "uds_version": "1.0",
  "export_id": "segment-2026-06-21T12:00:00.000Z",
  "generated_at": "2026-06-21T12:00:00.000Z",
  "source_type": "webhook",
  "source_system": "segment",
  "records": [{
    "uds_version": "1.0",
    "record_type": "lifecycle_event",
    "idempotency_key": "segment-msg-123",
    "source_system": "segment",
    "observed_at": "2026-06-21T10:00:02.000Z",
    "event_type": "payment_failed",
    "provider": "stripe",
    "provider_customer_id": "cus_123",
    "provider_subscription_id": "sub_123",
    "occurred_at": "2026-06-21T10:00:00.000Z"
  }]
}

Requires an active ingest token from an Evidence Guard workspace or higher. This endpoint accepts lifecycle_event records only.

Smoke-test snapshot example

POST /api/v1/app-state/snapshot
Authorization: Bearer <ingest_token>

{
  "users": [{
    "externalUserId": "smoke_user_1",
    "appStatus": "free",
    "entitlementStatus": "free",
    "plan": "free"
  }]
}

Use paid or premium statuses only when you include real matching Stripe customer and subscription IDs.

Evidence event example

POST /api/v1/events/support
Authorization: Bearer <ingest_token>

{
  "events": [{
    "externalUserId": "user_123",
    "stripeCustomerId": "cus_123",
    "type": "TERMS_ACCEPTED",
    "occurredAt": "2026-05-10T15:00:00.000Z",
    "raw": { "policyVersion": "2026-05" }
  }]
}

Read-only by design

Revenue Linter watches the signals. Your team stays in control.

Revenue Linter mirrors and ingests revenue signals, generates deterministic findings, and packages evidence. It does not cancel subscriptions, issue refunds, change Shopify orders, mutate your production database, or submit disputes automatically.

Guardrails

Restricted rk_ keys onlyUnrestricted sk_ keys rejectedNo production database credentialsNo automatic remediation
View contract