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
State
Leads
Sold
Rate
Left
By carrier
Carrier
Leads
Sold
Rate
Left
Files
Day
State
File
Rows
Sold
Rate
Left to send
Dropped
Uploaded
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
New Notification Rule
Separate multiple recipients with commas.
"New Lead" fires when a lead is created. Stage triggers fire when a lead enters that stage.
Custom Message (optional)
Leave blank to send the built-in lead summary (all lead details in a table).
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.
Where the two sides stand
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.
Create User
Existing Users
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
✅ Complete & Send EIN
Attach the EIN confirmation document. The lead will be marked Completed and a fulfillment email will be sent to the customer with the document attached.
Leave blank and the CRM generates a private download page for this order number and includes it in the email. Only fill this in to point the customer somewhere else.
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)
Order status by number. Query: order (API key auth)
GET
/api/leads
List leads. Query: stage, search, source, campaign, from, to, page, limit
GET
/api/leads/:id
Get single lead + stage history
PUT
/api/leads/:id
Edit 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/stage
Manually update stage. Body: {"stage": "Paid"}
DELETE
/api/leads/:id
Delete lead
GET
/api/finance
Financial overview: revenue and fees from Stripe, spend from the expense ledger. Query: from, to, refresh (admin)
GET
/api/finance/expenses
Expense ledger; POST/PUT/DELETE to manage it. Query: from, to (admin)
GET
/api/analytics
Dashboard analytics
GET
/api/merchants/config
Checkout routing map per product. Query: product (no key needed)
Sign in
Enter your credentials to continue.
Authorized users only. Activity is recorded.
🔒 Two-factor sign-in
We sent a 6-digit code to
your inbox.
It expires in 10 minutes.
✉ Send Test Email
New Merchant
Add Expense
Stripe fees are read from Stripe and must not be entered here — they would be counted twice.
Leave blank to keep charging it every month.
New Role
Lowercase letters, numbers, hyphens. Cannot be changed later.
Granting a permission automatically grants what it depends on — a role that can write
notes can read them.
Tabs this role will see
Edit User
✎ Edit Lead
Blank a field to clear it. Every change is recorded in the Activity log with your name against it.
The stage is changed from the lead's own panel, and the tracking data the visitor generated
(IP, browser, referrer, form completion) is not editable.
Contact
Order
The customer's download link and documents follow this number when it changes.
Attribution
Funnel Notes
The single free-text field the funnel posts into — the timestamped
notes staff write live in the lead's Notes panel and are not touched here.
Upload lead lists
Drop the whole day at once. Each file's state and date are read from its name —
ar0831-ready.csv is Arkansas on the 31st, -2 on the end is that
state's second file. Anything the name doesn't say can be filled in below before importing.
File
Loading…
Blacklist — do not contact
Numbers here never go out again, whether or not they are leads — most opt-outs come from
people the CRM has never heard of. Matching ignores formatting, so
(305) 555-1234 and +13055551234 are the same entry.