eTracer — operator portal
Internal only. Built to answer four questions in order: is anything broken, what happened to this customer, why did the engine decide that, and what is the state of the business. Deliberately not styled like the customer app — horizontal nav instead of a sidebar, a darker bar, and an ADMIN pill, so the two are never confused in a tab strip.
A1 · Health
The landing screen. Answers “is anything wrong?” in under two seconds.
With problems — the attention strip leads
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
Needs attention4 items
⚠
Maple Ridge Interiors — QuickBooks connection needs re-authentication (failing 6h)
Open tenant
⚠
1 parse failure in the last 24h — CIBC notification, amount field not extracted
Open parser
◑
Northside Flooring — delivery dropped to a disabled inbox (mike@)
Open tenant
◑
daily-summary cron last ran 27h ago — expected every 24h
Open system
This strip renders only when something is wrong — a healthy system shows nothing here at all
Recurring revenue
Our money — not customers’
Stripe · synced 2m ago
Refresh
Open in Stripe ↗
Committed MRR
$1,890.00
24 active subscriptions
Trialing (not yet revenue)
$575.00
9 trials · converts Aug 6–22
At risk (past due)
$190.00
3 tenants · billed, not collected
ARR (committed × 12)
$22,680.00
no growth rate — 6 months of data
Base plans $1,715.00 · 11 Solo · 9 Crew · 4 Fleet
Extra inboxes $175.00 · 7 × $25
Computed from subscriptions.tier — reconcile against Stripe before you quote it
Tenants
38
active · excludes deleted
Matched value
$412,880.50
customer volume · auto + manual
Queue depth
17
awaiting a human · all tenants
Reversals
3
last 30 days
Payment composition
Auto-matched 64%Manual 21%Awaiting 9%Unmatched 6%
Subscription composition
Trialing 9Active 24Past due 3Canceled 2
Connection composition
Healthy 31Needs reauth 5Disconnected 2
Proportions, not trends — a 13-month line chart on 6 data points would read “dead product”. Space reserved for when volume is real. No headline match-rate: a confident wrong number is worse than none. Revenue is split three ways for the same reason — one blended MRR figure would hide that trials aren’t paying yet and past-due wasn’t collected.
Healthy — the strip is absent entirely, not an empty state
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
Recurring revenue
Our money — not customers’
Stripe · synced 2m ago
Refresh
Open in Stripe ↗
Committed MRR
$1,890.00
24 active subscriptions
Trialing (not yet revenue)
$575.00
9 trials · converts Aug 6–22
At risk (past due)
$190.00
3 tenants · billed, not collected
ARR (committed × 12)
$22,680.00
no growth rate — 6 months of data
Base plans $1,715.00 · 11 Solo · 9 Crew · 4 Fleet
Extra inboxes $175.00 · 7 × $25
Computed from subscriptions.tier — reconcile against Stripe before you quote it
Tenants
38
active · excludes deleted
Matched value
$412,880.50
customer volume · auto + manual
Queue depth
9
awaiting a human · all tenants
Reversals
0
last 30 days
Nothing above the stats = nothing is wrong. The operator learns to scan for the strip’s presence, so it must never render an empty “no issues” state.
A2 · Tenants
A scanning surface. Dense, sortable, with status colour used sparingly so exceptions pop.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
Search business name or owner email…
AllActiveTrialingPast dueSuspendedDeleted
| Business / owner | Plan · subscriptions.tier | Subscription | CRM connection | Inboxes | Created |
|---|---|---|---|---|---|
| Northside Flooringmatt@northsideflooring.ca | Crew | Active | QuickBooks · healthy | 3 | Mar 4, 2026 |
| Maple Ridge Interiorsdana@mapleridge.ca | Solo | Active | QuickBooks · reauth | 1 | Apr 18, 2026 |
| Cedar & Co. Bookkeepingops@cedarco.ca | Fleet | Active | Xero · healthy | 12 | Jan 22, 2026 |
| Bright Path Plumbingsam@brightpath.ca | Solo | Trialing | FreshBooks · healthy | 1 | Jul 19, 2026 |
| Harbour Electricjo@harbourelectric.ca | Crew | Past due | Zoho · healthy | 2 | Feb 9, 2026 |
| Old Mill Tileinfo@oldmilltile.ca | Solo | Deleted | — disconnected | 0 | Nov 2, 2025 |
Plan column reads subscriptions.tier (Stripe mirror) — never tenants.plan, which is retired. Soft-deleted rows stay visible and struck through, never hidden.
A3 · Tenant detail
Everything about one customer on one screen, because support arrives as “customer X says Y”.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
Tenants /
Northside Flooring
Active
Identity
OwnerMatt Kelly · Owner
Emailmatt@northsideflooring.ca
CreatedMar 4, 2026
Business typeCorporation
Billingfrom Stripe · 2m ago
TierCrew — $75 / mo
StatusActive
Period endsAug 22, 2026
Extra inboxes0
Cancellation—
Contributes to MRR$75.00 / mo
Read-only — Stripe owns plan changes; a writable field here re-diverges on the next webhook
Connections
QuickBooks Online
Northside Flooring Ltd · synced 4m ago
jobs@northsideflooring.ca
u_7f3k9q2w@in.etracer.ca · filter active
accounts@northsideflooring.ca
u_7f3k9q2w@in.etracer.ca · filter active
mike@northsideflooring.ca
disabled Jul 20 · deliveries dropping
Activity
Matched (30d)128 · $48,920.00
Unmatched now2
Receipts pending2
Last paymentJul 23 · 3:12 PM
Last sign-inJul 23 · 8:04 AM
A3b · Impersonation
The most dangerous thing in the panel — designed to be impossible to forget you are doing it.
Typed confirmation · full access only
Impersonate with full access?
You will be able to change this customer’s live data.
• Every mutation is written to the audit log and cannot be bypassed
• The session is cookie-bound and expires on exit
• Read-only impersonation covers almost every support case — use that first
Type the business name to confirm
Northside Flooring
Active session — banner is fixed, unmissable, and exit is always one click
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
You are impersonating Northside Flooring — full access. Every action is logged.
14:22 elapsed
Customer app, seen as the customer
The banner above is fixed and unmissable for the entire session — it is not a subtle chip. Exiting is always one obvious click, never buried in a menu.
A4 · Reversals
Every un-booking and the story of why.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
| Tenant | Payer | Amount | Invoice | Type | When | Initiated by |
|---|---|---|---|---|---|---|
| Northside Flooring | Cedar Electric | $2,148.00 | INV-1043 | Clean undo | Jul 23 · 4:02 PM | customer |
| Cedar & Co. | R. Halliday | $1,300.00 | INV-8821 | Correction | Jul 22 · 11:14 AM | customer |
| Harbour Electric | M. Osei | $740.25 | INV-3310 | Credit memo · refused | Jul 21 · 9:38 AM | system |
i
“Refused” is not an error state
Harbour Electric’s accounting period is locked, so the reversal could not be posted. The system declined honestly and told the customer why, instead of writing something wrong. Style it informational — grey, not red. A red row here would train the operator to panic at correct behaviour.
A5 · Parser diagnostics
Interac email is the raw input to everything — and the one screen where a careless design choice creates a privacy problem.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
!
Redacted by default
This screen touches real customer financial email. Lists show structure and outcome only — never payer names, amounts or reference numbers. Raw content sits behind an explicit Show raw action, is never bulk-exportable, and every reveal is audit-logged.
| Sending bank | Result | Detail | When | |
|---|---|---|---|---|
| CIBC | Failure | amount field not extracted · new template? | 27m ago | Show raw |
| Tangerine | Partial | payer name empty · amount + ref OK | 3h ago | Show raw |
| RBC | Success | all fields extracted | 4h ago | Show raw |
| TD | Success | all fields extracted | 5h ago | Show raw |
| Scotiabank | Success | all fields extracted | 6h ago | Show raw |
Per-bank success ratelast 30 days
RBC
100%
n=212
TD
100%
n=188
Scotiabank
99%
n=96
BMO
98%
n=74
CIBC
94%
n=63
Tangerine
91%
n=22
Credit unions grouped once each has n>20 — small samples are labelled, never rounded into confidence
A6 · Matching
The explain-yourself screen, plus a simulator that can never be mistaken for live.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
Why this matched
Northside Flooring · Jul 23 · $2,147.50 → INV-2201
Auto-booked
The amount matched an open invoice to the cent, the payer’s last name matched the customer on that invoice, and eTracer had already learned this payer from a confirmed match in June. No other open invoice was within $50. Confidence landed at 0.97 — above the 0.95 auto threshold — so it booked without asking.
Amount exact — $2,147.50 = INV-2201 to the cent
+0.40
Learned payer — Paula Sutton → Ray Sherman, confirmed Jun 11
+0.30
Name match — surname “Sutton” on the invoice contact
+0.15
Unique amount candidate — no other open invoice within $50
+0.12
Message field hit — memo “kitchen reno — final” had no invoice #
+0.08
Timing proximity — invoice sent 3 days ago — outside the 48h decay
+0.05
Final score
0.97
auto ≥ 0.95 · confirm 0.75–0.94 · manual < 0.75
Reads as a narrative first, floats second — this is what you paste to a customer disputing a booking
◆ Simulation — nothing here changes live behaviour
Replaying 1,284 historical matches
Amount exact
0.40
Learned payer
0.30
Name match
0.15
Unique candidate
0.12
Would auto-book
1,096 +18
Would need confirm
142 −12
Would go manual
46 −6
Saving stores a proposal only — promoting it to live is a separate, deliberate step on System
A7 · System
Small screen, highest stakes in the product.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
!
These are circuit breakers, not preferences
Each switch affects every customer at once. Turning one off asks for confirmation; turning it back on does not — recovery should never be slower than the failure.
auto_match_enabled
Live
Platform-wide kill switch for automatic matching. Payments keep arriving and queue normally — nothing books itself until this is back on.
Last changed May 2, 2026 · 09:14 by operator
cron_enabled
Live
Scheduled jobs: daily summaries, trial reminders, connection health sweeps, receipt retries.
Last changed Apr 11, 2026 · 17:40 by operator
maintenance_banner
Stopped
Shows a message at the top of every customer’s app. Currently: “Scheduled maintenance Sunday 2–4am ET.”
Last changed Jul 18, 2026 · 22:03 by operator
A8 · Audit log
Every administrative action, permanently.
etracer
Admin
operator
MK
HealthTenantsReversalsParserMatchingSystemAudit
All actionsImpersonationSuspend / deleteSystem switchesWeights
Jul 1 – Jul 23, 2026
| Timestamp | Actor | Action | Tenant | Detail |
|---|---|---|---|---|
| 2026-07-23 16:40 | operator | impersonation.mutate | Northside Flooring | undid match INV-1043 while impersonating |
| 2026-07-23 16:22 | operator | impersonation.start | Northside Flooring | full access · typed confirmation |
| 2026-07-22 10:05 | operator | tenant.suspend | Harbour Electric | past due 14 days |
| 2026-07-18 22:03 | operator | system.maintenance_banner | — | enabled · “Scheduled maintenance Sunday 2–4am ET” |
| 2026-07-02 08:31 | operator | tenant.purge | Old Mill Tile purged | scheduled purge completed · 0 records retained |
Read-only, permanently
No edit, no delete, no exceptions. An audit log you can curate is not an audit log. There is no bulk export and no row menu — deliberately.
Rows outlive their tenant
The purge row above holds no customer data and its tenant link is dead — struck through, greyed, unclickable. It proves the purge happened, which is the whole point.