Loading…
Recent Commissions
Loading…
💰 Company Contribution
▾ Details
📊 Projected Payout
▾ Simulate
Commission Ledger
Loading…
Balance
Loading…
Payout History
Loading…
Loading…
Team Performance
Loading…
My Subagents
Loading…
Subagent Earnings Summary
Loading…
Send Invite
Invite a new subagent. They'll receive an email with a registration link tied to your account.
Sent Invites
Loading…
Agents & Subagents
Loading…
Payout Requests
Loading…
Commission Rules
Loading…
Clients by Group
Select a client group above to view clients.
📦 Clients & Invoices
Click "Sync Clients" to pull the latest data from WHMCS, or select a group and click a tab.
💰 Commission by Salesperson
▾
📊 Sandbox: Projected Payout
▾
Locking a period prevents commission edits for that month. Unlock only if corrections are needed.
Commission Periods
Loading…
Commission Reports
Loading…
Agent Invites
Agents send invites from their portal; admins view all here
Loading…
Commission Rate Overrides
Overrides set a custom commission rate for a specific agent + product combination, taking precedence over the default rule.
Loading…
Webhook Endpoints
System-wide webhooks receive real-time events (invoice.paid, payout.approved, etc.). The secret is shown once on creation.
Loading…
📱 SMS 2FA Code Forwarder
ACTIVE
Forwards SMS 2FA codes from your phone to the Sales Portal so you can quickly copy verification codes when logging into carrier portals (AT&T, Comcast, Verizon, etc.) from the Circuits Cost page.
Webhook URL
https://sales.amer.net/api/v1/sms-forward/webhook
Registered Phone
(415) 716-7240
Setup Instructions
1
Install SMS Forwarder - Forward SMS on the phone that receives carrier 2FA codes
2
In the app, add a new forwarding rule → choose Webhook as destination
3
Paste the Webhook URL above as the endpoint
4
Enable forwarding — filter by sender if desired (e.g. AT&T, Comcast short codes)
5
Go to Circuits Cost page → click a carrier login URL → the 2FA code will appear as a floating toast in the bottom-right corner
Webhook Payload Format
POST https://sales.amer.net/api/v1/sms-forward/webhook
Content-Type: application/json
{
"timestamp": "2026-04-09T14:30:00Z",
"content": "Your AT&T verification code is 482916",
"sender": "+1800288288",
"contact": "AT&T"
}
🔍 Circuit Billing Scraper
ACTIVE
Local desktop app that logs into carrier portals (AT&T, Comcast, Verizon, Sonic) using your real Chrome browser — bypasses bot detection (Akamai). One-time setup, then runs monthly to sync billing data, download PDF statements, and detect cost changes.
💻
LOCAL MAC APP
Real Chrome + Playwright
Runs on your desktop
Runs on your desktop
🌐
CARRIER PORTALS
AT&T, Comcast, Verizon
Login + scrape + PDF
Login + scrape + PDF
☁️
SALES PORTAL API
Parse, store, analyze
Circuits Cost table
Circuits Cost table
Features
☑
Auto-login with session reuse — Logs into carrier accounts using stored credentials. Chrome profile persists cookies so subsequent runs skip login entirely.
☑
2FA passthrough — When carrier requires SMS verification, Chrome window pauses and waits for you to enter the code (or use the SMS Forwarder above). Then continues automatically.
☑
Bill & payment history scraping — Captures current balance, due date, monthly charges breakdown, line items, payment history, and account activity.
☑
PDF statement download — Downloads PDF invoices from carrier portals. Syncs to Google Drive (
Amernet Financial/Telecom Billing/{Provider}/{Account#}/) and links to circuit records.
☑
PDF parsing (AT&T) — Extracts structured data from downloaded PDFs: line items, payments, previous bill, account charges — more reliable than HTML scraping.
☑
Service column profiling — Configurable per-circuit column layout in Circuits Cost. Define which services (Internet, Static IP, etc.) appear as spreadsheet columns.
☑
Multi-account batching — Groups circuits by carrier login. Logs in once per account, scrapes all circuits under that login, then moves to the next carrier.
Monthly Sync Workflow
1
Run scraper —
2
npm start opens dashboard at localhost:3099. Click "Scrape All" or filter by provider.Auto-login — App opens Chrome, logs into each carrier. If 2FA needed, complete it once in the browser window.
3
Scrape + parse — Current bill captured (page text), bill history imported, PDF statements downloaded and parsed.
4
Data synced — Billing data upserted to Sales Portal (deduped by circuit + bill month). PDFs archived to Google Drive.
5
Review — Check Circuits Cost page: billing spreadsheet, payment status, overdue indicators, rate change flags.
Coming Soon
☐
Rate change detection — Alert when monthly charges increase or new fees appear vs. previous billing cycle
☐
Cost reconciliation — Compare carrier invoice total vs. Provider Cost in Circuits Cost and flag mismatches
☐
Overdue payment alerts — Email/Slack notification when a circuit has an unpaid balance past the due date
☐
Scheduled auto-run — macOS launchd / cron job to auto-scrape on a monthly schedule after billing cycles close
☐
More carriers — Comcast, Verizon, Sonic parser templates (AT&T complete, others in progress)
One-Time Setup
1
Clone the repo:
git clone git@github.com:amernet/amernet-sales.git
2
Install:
cd local-scraper && npm install
3
Run:
npm start — opens dashboard at localhost:3099
4
Login to Sales Portal from the dashboard (credentials stored at
~/.circuit-scraper/token.json)
5
Ensure circuits have billing credentials saved (Circuits Cost → Edit → Login URL / Username / Password)
6
(Optional) Install Google Drive Desktop — PDFs auto-sync to shared
Telecom Billing folderTechnical Details
Runtime:Node.js + Playwright (real Chromium, not headless)
Chrome profile:
~/.circuit-scraper/chrome-profile/ — cookies persist between runs
PDF storage:Google Drive Telecom Billing/{Provider}/{Account#}/ or ~/.circuit-scraper/pdfs/
PDF parsing:pdfjs-dist — extracts line items, payments, balance from AT&T PDF statements
API sync:Upserts to circuit_billing_history — deduped by (circuit_id, bill_month)
Logs:~/.circuit-scraper/logs/
WHMCS Connection
Checking…
Sync Run Log
Loading…
Circuits Cost
Loading…
Contract Tracker
Loading…