Overview

Sales — Last 7 Days

Day Total Sales Refunded Completed Info Needed

Sales — By Month

Month Total Sales Refunded Completed Info Needed

📈 EIN Campaign Analytics

All-State Lead, Checkout, and Sales Performance
Campaign Performance Funnel
State Performance Breakdown
Rank State Known Leads Partials Checkout Abandoned Gross Sales Refunds Net Sales Checkout Conversion Net Sales / Lead
Net Sales by State
Checkout Abandonment by State
💡 Quick Insights
ℹ This view is ranked by net sales and based on known-state leads only.

Financial Overview

Revenue, Spend, Profit, and Cash Flow
Revenue and Profit Trend
Cash Flow
Spend Breakdown
Profit by State
Daily Financial Summary
DateRevenueSpendProfitMargin
Reconciliation Status
View reconciliation center →
Unit Economics
Upcoming Stripe Payouts
Payout DateEst. AmountStatus

Payouts are estimates and may vary.

Expenses

CategoryAmountDateRepeats In RangeVendorNote

All Leads

Date Name / Email Phone Stage Source Campaign Form % IP Device Actions

StepsTracker

The lists we went out to, as opposed to the leads that came in. Drop a day's CSVs here — the filename says which state and which day, so ar0831-ready.csv and ar0831-ready-2.csv both file themselves under Arkansas on the 31st. Every number is matched against the CRM on the phone number, so a file can be judged on the sales it produced rather than on how many rows it had.

Pull a follow-up list

Yesterday's list again, minus everyone who bought, everyone on the blacklist, and every number that was in the day's files twice. A sale counts from the moment the lead reaches Paid, Pending Info, Need Info, Completed, Refunded, Reversal or Error — the same set the Dashboard calls Total Sales — so someone who paid this morning is already out of tonight's send.

Pick a day to see what is left to send.

By state

StateLeadsSoldRateLeft

By carrier

CarrierLeadsSoldRateLeft

Files

Day State File Rows Sold Rate Left to send Dropped Uploaded

Email

Automatic Notifications

Notify your team by email when a lead hits a trigger. These go to internal recipients — not to the lead.

Click Tracker

🔗 How to send clicks here
1. Tracking link (for SMS / ClickSend): put this URL in your messages — it logs the click and instantly redirects the visitor.
Parameters: m = message label, b = business, u = destination URL (only your own domains allowed), cid = optional custom click id.
2. API postback (from the Vercel site):

Latest Clicks

Time Msg Business IP Location ISP Device Browser Click ID

Merchant Gateways

Every product needs at least one live gateway. Weights are relative shares inside a product — 70 and 30 split traffic 70/30, and so do 7 and 3. Set a weight to 0 or flip a gateway off to pull it out of rotation without losing the link.

Routing endpoint

Your funnel fetches this and picks a gateway itself — no key needed, and it changes the moment you save a weight here.

GET /api/merchants/config
Live response
{}
Picking a gateway on the front end
const cfg = await fetch('/api/merchants/config').then(r => r.json());
const p = cfg.products[serviceType];        // 'standard' | 'extended'

// One random draw, one winner — the ranges already encode the weights.
const r = Math.random() * p.total_weight;
const gateway = p.gateways.find(g => r >= g.range_start && r < g.range_end) || p.gateways[0];

window.location = gateway.url;              // gateway.merchant tells you who took it

Stripe Reconciliation

Every succeeded Stripe charge in the range against every CRM lead in a sales stage (Paid, Pending Info, Need Info, Completed, Refunded, Reversal, Error), dated the same way the Dashboard dates a sale. Anything that exists on one side and not the other is listed below. Nothing here changes a stage — the only write is Link, which records the Stripe id on the lead.

Issue Stripe CRM lead What to check
Pick a range to run the reconciliation.

User Management

Create and remove CRM logins, and choose which of them need an emailed code to sign in. Only administrators can see this tab.

Test the sign-in code email

Two-factor sign-in fails closed: if this email cannot be delivered, an account with 2FA on cannot sign in at all. Prove delivery here before switching it on for anyone.

Roles & Permissions

A role is a set of permissions. Every protected route checks them on each request, so what you switch off here is refused by the server — not just hidden in the interface.

Roles
Permission matrix granted · not granted destructive or spends money

Activity Log

Every change to a lead, its notes and its documents — who made it, when, and what moved. Entries are append-only: nothing in the CRM edits or removes them, and deleting a lead leaves its history behind. Automated postbacks are recorded too; use People only to see just what staff did.

When Who Action Lead Details

API Documentation

Postback Endpoint

Send a POST request to create or update a lead. Matches by lead_id first, then email.

POST

Headers

Content-Type: application/json
x-api-key: YOUR_API_KEY   (optional when API_KEY=changeme)

Body Fields

FieldTypeDescription
lead_idstringOptional. Reuse existing lead UUID to update it.
emailstringUsed for dedup if lead_id not provided.
first_namestring
last_namestring
phonestring
companystring
stagestringOne of the pipeline stages below.
sourcestringe.g. "google", "facebook"
domainstringLanding page domain
campaignstringCampaign name or ID
utm_sourcestring
utm_mediumstring
utm_campaignstring
utm_termstring
utm_contentstring
referrerstringFull referrer URL
ip_addressstring
user_agentstring
browserstringe.g. "Chrome 124"
device_typestring"desktop" / "mobile" / "tablet"
form_completion_percentnumber0–100
form_fields_completednumber
form_fields_totalnumber
custom_dataobjectAny extra key/value pairs
force_stagebooleantrue = allow going backwards in stage

Pipeline Stages (in order)

Example — Form Started

curl -X POST  \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john@example.com",
    "first_name": "John",
    "stage": "Form Started",
    "source": "google",
    "domain": "yourstore.com",
    "campaign": "llc-spring-2026",
    "utm_source": "google",
    "utm_medium": "cpc",
    "utm_campaign": "llc-spring-2026",
    "ip_address": "192.168.1.1",
    "browser": "Chrome 124",
    "device_type": "desktop",
    "form_completion_percent": 10,
    "form_fields_total": 12
  }'

Example — Application Submitted

curl -X POST  \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john@example.com",
    "stage": "Application Submitted",
    "form_completion_percent": 100,
    "form_fields_completed": 12,
    "form_fields_total": 12
  }'

Order Status Endpoint

Look up an order's fulfillment status by order number — for your funnel or a customer "track my order" page. Authenticated by API key.

GET

When status is Completed, the response also includes the delivery_date and the document file_location (currently a placeholder URL).

Example — Completed order

curl "?order=ORD-AB12CD" \
  -H "x-api-key: YOUR_API_KEY"

{
  "found": true,
  "order_number": "ORD-AB12CD",
  "status": "Completed",
  "completed": true,
  "last_updated": "2026-07-15T18:30:00.000Z",
  "delivery_date": "2026-07-15T18:30:00.000Z",
  "ein_number": "12-3456789",
  "file_location": "https://yourstore.com/documents/ORD-AB12CD"
}

Other Endpoints

MethodPathDescription
GETOrder status by number. Query: order (API key auth)
GET/api/leadsList leads. Query: stage, search, source, campaign, from, to, page, limit
GET/api/leads/:idGet single lead + stage history
PUT/api/leads/:idEdit lead fields (admin). Body: any of email, first_name, last_name, phone, company, order_number, payment_transaction, ein_number, source, domain, campaign, utm_*, notes
PUT/api/leads/:id/stageManually update stage. Body: {"stage": "Paid"}
DELETE/api/leads/:idDelete lead
GET/api/financeFinancial overview: revenue and fees from Stripe, spend from the expense ledger. Query: from, to, refresh (admin)
GET/api/finance/expensesExpense ledger; POST/PUT/DELETE to manage it. Query: from, to (admin)
GET/api/analyticsDashboard analytics
GET/api/merchants/configCheckout routing map per product. Query: product (no key needed)