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.

Pipeline Board

All Leads

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

Email

Templates
Automations
Recent Sends

Automatic Notifications

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

Notification Rules
Recent Notifications

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

User Management

Create and remove CRM logins. Only administrators can see this tab.

Create User

Existing Users

API Documentation

Postback Endpoint

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

POST /api/postback

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 http://localhost:3000/api/postback \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john@example.com",
    "first_name": "John",
    "stage": "Form Started",
    "source": "google",
    "domain": "myeinregistry.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 http://localhost:3000/api/postback \
  -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 /api/order-status?order=ORD-AB12CD

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

Example — Completed order

curl "http://localhost:3000/api/order-status?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://myeinregistry.com/documents/ORD-AB12CD"
}

Other Endpoints

MethodPathDescription
GET/api/order-statusOrder 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/:id/stageManually update stage. Body: {"stage": "Paid"}
DELETE/api/leads/:idDelete lead
GET/api/analyticsDashboard analytics
GET/api/merchants/configCheckout routing map per product. Query: product (no key needed)