📊 2026 Business Dashboard
2026 Annual
2026 Target
from 2025 QB actuals
2026 Actual YTD
collected so far
Variance
ahead/behind target
Jan 1 Customers
starting point
Current Customers
today
Net YTD Change
since Jan 1 2026
Monthly Target
from active customer base
Monthly Actual
loading Square data…
Monthly Variance
actual vs target
Started Month With
customers at month start
Added This Month
new signups
Lost YTD
since Jan 1
2026 Monthly Target vs Actual — $460K Goal
Month Target Actual +/−
Loading…
⚙️ Internal Activity system · 7-day retention
Loading…
👥 Customer Activity
Loading…
☀️ Morning Watch — Card Check
Stops Today
Cards OK
Warnings
Problems
Prepaid (skip)
Loading…

System Health

Workers OK:
D1 row counts:
Integrations OK:
Recent errors:

A. Workers

WorkerStatusResp (ms)Last cron
Probing 29 workers…

B. D1 — occ-customers

Counting tables…

B2. D2 — Jobs / Schedule / Geocode / History

Counting tables…

C. Integrations

ServiceStatusDetail
Pinging integrations…

D. Recent Errors

WhenWorkerActionMessage
Loading error log…
🚚 Routes
Messages Queued Today
across all batches
Sent Today
delivered to carrier
Delivery Rate
carrier confirmed
Failed
0
carrier rejected
Confirmed Empty
bins empty via SMS reply
📅 7-Day Reminder

Heads up — your cleaning is coming up next week.

⏰ 1-Day Reminder

Your cleaning is scheduled for tomorrow.

🚚 Day-Of Reminder

It's cleaning day — confirm your cans are empty.

📋 Today's Confirmation Status
Name Phone Route Sent At Status Response
Click Refresh to load today's status
Route Calendar
🚚 Full Year 2026
Route P&L — 90-Day Actuals
💰 Route Profitability — 90-Day Actuals
📊 Route Profitability by Run
📋 Route Summary Click any row to drill into customers
🚚 Per-Date Runs (Grouped by Week)
👷 Crew Cost by Route Labor cost breakdown using configured hourly rates (90-day actuals)
🚫 Cancellation Rate & Revenue Lost 90-day actuals from D2 job status
Territory Intelligence — 90-Day Actuals
🌎 Territory Intelligence — ZIP Profitability (90-Day Actuals)
📊 ZIP Profit Ranking
📋 ZIP Profitability Table Click any ZIP to see per-customer breakdown
Capacity Forecast — 26-Week View
⚡ Capacity Forecast — Weekly Load & Quarterly Surge Detection
📊 Weekly Stop Load (26 Weeks)
🔥 Quarterly Surge Weeks Weeks where quarterly customers are 25%+ of stops or route is over capacity
⚖ Route Balance by Week Weeks with imbalanced route loads highlighted
📋 New Customer Routing Queue Active customers without a route assignment
📈 Route Growth Preview Current size, growth rate, and projected time to capacity
🎯 Customer Density by ZIP
📈 Service Type Mix
🎄 Holiday Schedule — manual push, 8 days before each holiday

When a holiday is coming up that affects the route, this lets you notify affected customers. You pick the holiday, preview who gets the message, and manually send. Nothing fires automatically.

Click Refresh to load upcoming holidays.
👥 Customer Intelligence
Active Subscriptions
from D1
New This Year
from D1 date_added
One-Time Customers
from D1 plan_type
Problem Accounts
balance > $0
VIP (3+ Years)
date_added before 2023
Signup Sources
from D1 signup_source
★ Loyalty:
📈 2026 Monthly New Customers
⚠ Problem Children — Accounts Needing Attention
📍 Top Service Areas
🎯 How They Found Us
💵 Financials ● Square ● Stripe ● QB
💳 Revenue — Square + Stripe Combined
YTD Collected
--
incl. OH sales tax
YTD Net (after fees & tax)
--
MTD Collected
--
incl. OH sales tax
MTD Net (after fees & tax)
--
YTD Transactions
--
YTD Fees
--
Avg per Transaction
--
🏭 Ohio Sales Tax — Exact by County (from D2 job prices)
YTD Service Revenue
--
GD completed jobs · excl. tax
YTD OH Sales Tax
--
exact per county rate
YTD Jobs Completed
--
from GD job data
Avg Job Price
--
before tax
County Rate Jobs Service Revenue OH Tax Gross (w/ tax)
Click Refresh to load
📈 2026 YTD — QuickBooks P&L
YTD Revenue
--
Net Income
--
Total Expenses
--
Margin
--
📈 YTD Expenses Breakdown — QuickBooks
📈 2025 Full Year — QuickBooks Actuals
Net Income
requires 2025 QB P&L query
Revenue
requires 2025 QB P&L query
Expenses
requires 2025 QB P&L query
Margin
requires 2025 QB P&L query
💰 AR Aging Summary
📈 Year-over-Year Growth — Customer Signups by Year
💳 Square Fee Analysis
💳 Square Reconciliation & Refunds
Reconcile Square transactions, issue refunds, export to QuickBooks
Opens in a new tab. Use to search a transaction, issue a refund, or export a date range to QB.
💲 Payment Escalation Rules (Day 0-28 ladder)
Loading…
💰 Manual Settle — Auth-Pending Captures
The 7:30 PM auto-settle runs nightly for anything not settled here.
Invoice # Customer Amount Authorized Held?
Click Refresh to load pending captures.
💲 2026 Pricing Model
★ Annual Prepaid: Pay 12, get 13th FREE · New orders only · Existing grandfathered
⚠ EDITING MODE — Prices are editable. Click the lock to save changes.
Full Pricing Matrix — Per-Cleaning
🎉 Marketing Coupons
Code Discount Used Expires Status Actions
Click Refresh to load coupons…
📈 Square Rate Analysis
Pulls live Square API data — takes 30–90 sec
⚡ Automation Control Panel
ALL OFF
Master Send Switch
Controls ALL automated email & SMS to customers (billing, renewals, reminders, follow-ups).
— loading
Manual Texting (reply by hand)
Lets you send a hand-typed SMS from the customer card or CRM inbox even while master is OFF. Does NOT enable automated sends.
— loading
Copy Inbound Texts to GorillaDesk
When ON, every inbound customer text is forwarded to the GD SMS inbox (+1 513-866-3270) so GorillaDesk keeps a history copy. Internal OCC→OCC forward only — not a customer send.
— loading
🛡️ Safety Kill Switches
Master blocks for each system. These override the switches above — if a system is BLOCKED here, nothing in it can send or charge, period.
Card Charges
Square card authorizations & captures
— loading
Email Sending
Hard block on all Brevo email sends
— loading
Text/SMS Sending
Hard block on all Telnyx SMS sends
— loading
GorillaDesk Sync
Customer data sync from GorillaDesk
— loading
Cluster Rebuild
Route cluster recalculation jobs
— loading
Test Mode (sends go to Howard only)
When ON, all sends are redirected to Howard — no real customers receive anything
— loading
💳 Billing Automations (22) — receipts, the payment-decline ladder, auto-charge, late fees
These are run by the billing engine. Turning one ON arms it; sends still require Master Send to be ON. Turning OFF stops that step immediately.

Expand to load billing automations…

⚠️

Master Clear

Removes ALL data from all 5 databases. Schema and connections are preserved — no functionality changes. Use this before reloading fresh CSV exports.

Reload Guide — What feeds what (click to expand)

STEP 1 — Howard uploads 3 CSV exports from GorillaDesk:

Customers CSV→ DB customersFeeds: Customer Card (name, phone, email, address), CRM search, Portal profile, Crew new-order search
Service Lookup CSV
(2 halves: Jan–Jun + Jul–Dec)
→ JOBS_DB jobs_cleanFeeds: CRM schedule/routes (via occ-api), Crew daily stops + map, Customer Card upcoming jobs, Portal next cleaning, Dashboard today-stop count, prepaid tracking
Invoice CSV→ DB invoicesFeeds: Customer Card billing tab, Portal /pay page, Dashboard secondary revenue

STEP 2 — Automated rebuilds (no CSV needed):

Square Card Sync→ DB customer_cardsFeeds: Customer Card payment methods, Portal card-on-file, billing automation
customers_v2 Build
(enriches D1 from D2)
→ DB customers_v2Feeds: Customer Card profile (plan, price, route), CRM customer list + counts, Dashboard active/lapsed/dormant, Morning Watch
Geocoding Scripts→ GEOCODE_DB address_geocodesFeeds: CRM map pins, Crew map/navigation, route optimization

STEP 3 — Optional / rebuilds over time:

Historical Service Lookup CSV→ HISTORY_DB job_historyFeeds: Customer Card lifetime service history (CRM full profile)
GD Nightly Sync (cron)→ DB customers (delta)Keeps customers current after initial load — runs automatically at 2 AM ET
System activitycomms_log, cog_events, audit_log, crew_jobsRebuilds automatically as emails send, crew completes stops, events fire
Automation configautomation_settings, holidays, seasonal_rulesRe-configure toggles and rules in Automations tab after clear
Crew setupcrew_pinsRe-create crew PINs for crew app login after clear
Admin loginadmin_usersRe-create your PIN login after clear (Settings → Admin Users)

Dashboard KPIs: Square + Stripe revenue pull live from APIs (not stored). Customer counts from customers_v2. Scheduling stats from D2 jobs_clean. All restore after Steps 1–2.

Source of truth for scheduling: D2 jobs_clean — all schedule/route data flows from this table. No D1 scheduled_jobs dependency.

📣 Customer Broadcasts
Pick a broadcast → choose Manual or Auto → set the audience → send. Each card's KPIs activate the moment a broadcast fires.
🔁OT Conversion Drip
ON
One-timers get a recurring pitch at Day 3, Day 21, Day 80 after first cleaning.
Mode
Synced with Automations
Next fire: tomorrow 9:00 AM ET
No data yet — broadcast has not been activated.
#21 Review Request
OFF
24h after each completed service, asks for a Google review.
Mode
Synced with Automations
Currently disabled
No data yet — broadcast has not been activated.
🤝#23 Referral Offer
OFF
After a customer's 3rd completed service, sends their unique referral code + program rules.
Mode
Synced with Automations
Currently disabled
No data yet — broadcast has not been activated.
💬#24 Auto Review Response
OFF
Drafts a response when a new Google review lands — you approve and post.
Mode
Synced with Automations
Not yet wired
No data yet — broadcast has not been activated.
👜Upsell — 1 Can → 2 Cans
OFF
Active single-can customers who could add a second.
Mode
Flip Auto to add to Automations
Will fire 1st of each month at 9:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
📅Quarterly Reschedule
OFF
Quarterly customers ~4 weeks out — offer to move them up to fill a specific day/route.
Mode
Flip Auto to add to Automations
Will fire Mon 8:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
🦱Maggot Outreach — Summer Move-Up
OFF
Summer-specific quarterly move-up: “Let’s clean before the bugs hit.”
Mode
Flip Auto to add to Automations
Will fire weekly Jun 1 – Aug 31
Not yet sent — KPIs start tracking after first broadcast fires.
🔄Subscription Pitch — Join the Route
OFF
One-timers 26+ days post-clean not on recurring. “Your next clean’s about due — want a regular schedule?”
Mode
Flip Auto to add to Automations
Will fire daily 9:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
🤝Referral Push
OFF
Active customers who haven’t referred anyone yet — give them a nudge.
Mode
Flip Auto to add to Automations
Will fire 1st of each month
Not yet sent — KPIs start tracking after first broadcast fires.
🛣️Fill the Routes
OFF
Past one-timers + cancelled subs near next week’s route. 20% off if they hop on.
Mode
Flip Auto to add to Automations
Will fire weekly Mon 8:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
🔁Win Back — “We Miss You”
OFF
Cancelled customers gone 6+ months. Pure win-back: “We’d love you back. Here’s an offer.”
Mode
Flip Auto to add to Automations
Will fire 1st of each quarter
Not yet sent — KPIs start tracking after first broadcast fires.
🕐Re-engagement — Quiet Subscribers
OFF
Still subscribed but no service in 60+ days. They haven’t cancelled — yet.
Mode
Flip Auto to add to Automations
Will fire daily 9:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
📍Proximity — “We’ll Be On Your Street”
OFF
Lapsed customers in a specific ZIP for a given visit date. 90-day throttle.
Mode
Flip Auto to add to Automations
Will fire weekly Sun 6:00 PM ET
Not yet sent — KPIs start tracking after first broadcast fires.
🌷#55 Spring Reactivation
OFF
30-day heads-up before each seasonal customer’s season resumes. Covers S8 / S6 / S4 / WM (Warm Months) / 3X (3×/year).
Mode
Synced with Automations
Currently disabled
No data yet — broadcast has not been activated.
🌡️Start Season Early
OFF
Existing seasonal customers — temps warm, offer to start one month earlier than scheduled.
Mode
Flip Auto to add to Automations
Will check daily 8:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
🍂End of Season Add-On
OFF
At last scheduled cleaning, offer one more — temps still warm, bugs still active.
Mode
Flip Auto to add to Automations
Will fire daily 9:00 AM ET
Not yet sent — KPIs start tracking after first broadcast fires.
Emails Sent (30d)
requires Brevo analytics sync
Open Rate
requires Brevo analytics sync
Click Rate
requires Brevo analytics sync
Conversions
requires attribution worker
Attributed Revenue
requires attribution worker
OT Drip Pool
one-timers in sequence
OT Converted
OT → recurring (90d)
Proximity Eligible
dormant near this week's route
Reactivated MTD
brought back this month
📩 OT Conversion Drip — One-Time → Recurring LIVE

Automatically contacts one-time customers at Day 3, Day 21, and Day 80 after their first cleaning with a targeted pitch to convert them to a recurring plan. Runs daily via occ-ot-followup worker.

In Sequence
one-timers eligible
Day 3 Sent (30d)
initial touchpoint
Day 21 Sent (30d)
follow-up
Day 80 Sent (30d)
final push
Converted (90d)
OT → recurring
Worker: occ-ot-followup — runs daily at 9 AM ET
📍 Proximity Reactivation — “We’ll Be On Your Street” LIVE

Identifies dormant customers near this week’s route and sends a personalized “we’ll be on your street” reactivation email. 90-day throttle prevents duplicate sends. Backend: occ-command-centernt_lapsed_send.

Enter a ZIP and click Find to preview eligible customers.
⭐ #21 Review Request OFF

Sends a Google review request 24 hours after service is completed. One request per customer per service date — never duplicates. Worker: occ-ot-followup (daily 9 AM ET).

Requests Sent (30d)
review asks delivered
Reviews Earned (30d)
requires GBP sync
Open Rate
Brevo sync required
Worker: occ-ot-followup — runs daily at 9 AM ET
🤝 #23 Referral Offer OFF

After a customer’s 3rd completed service, automatically sends their unique referral code and explains the referral program. Worker: occ-referral-pitch (daily 10 AM ET).

Codes Sent (30d)
offers delivered
Referrals Activated
new signups from codes
Revenue from Referrals
attribution required
Worker: occ-referral-pitch
💬 #24 Auto Review Response OFF

When a new Google review is detected, drafts a personalized response for Howard to approve and post. Keeps OCC’s review engagement high without manual monitoring. Requires Google Business Profile API connection.

Drafts Created (30d)
pending approval
Responses Posted (30d)
GBP sync required
Avg Rating (90d)
GBP sync required
Requires GBP API — not yet wired
🌿 #55 Spring Reactivation — Seasonal 30-Day Reminder OFF

Emails (and/or SMS) seasonal customers a heads-up before their service restarts in spring. Fires once per customer, 30 days before their season resume date. Channel: email.

Seasonal Customers
eligible for reminder
Reminders Sent (90d)
from comms_log
Toggle in Automations tab — config saved to D1
✉ EDDM & Growth Engine — New Neighborhood Acquisition TOOL

Plan, cost, and track Every Door Direct Mail (EDDM) campaigns for new neighborhood acquisition. Enter a target ZIP, household count, and number of mail touches to calculate cost and print-ready specs. Uses LOB for printing and delivery.

Standalone planner — LOB integration
📊 Email Health — Bounce & Suppression Tracking

Live stats from Brevo for the last 30 days. Hard bounces are permanently blocked — those addresses never receive another email. Soft bounces retry automatically.

Hard Bounces
blocked permanently
Soft Bounces
retry eligible
Unsubscribes (30d)
opted out
Spam Reports (30d)
flag if rising
📝 Template Library
📝 Email, SMS & Document Templates

Click any template to edit. Changes persist live to D1 and stay in sync with the CRM. Locked items show a yellow banner before save.

📊 Reports & B2B Data Delivery
📚 Report Library

Pre-built templates plus any you've saved. Click Run Now to generate immediately, or use Schedules to deliver on a recurring basis.

Select a report above to run, or use + Custom Report to build one.
👥 Customers
🔧 Settings
Company Information
Company Details
Company Name
Owner
Phone
Email
Address
Website
Logo
📷
Upload Logo
Business Hours
Tax ID
Founded
Payment Processors

Square (Current)

Type: Cost-plus (actual interchange per card)
Rate: Varies by card (Visa ~2.4%, MC ~2.6%, Amex ~2.8%)
Connected: March 2026
✅ Connected

Helcim (Pending)

Type: Cost-plus (interchange + markup)
Rate: Interchange + 0.3% + $0.08
Meeting scheduled — Howard to sign up
⏳ Pending Setup

Stripe (Available)

Type: Flat rate
Rate: 2.9% + $0.30
Not Connected
Integrations
🛒

WooCommerce

Site: ohiocleancans.com
Syncs: Orders, customers, coupons
Last Sync: Apr 7, 2026 2:00 AM
✅ Connected
📚

QuickBooks Online

Syncs: Invoices, payments, customers
QB sync queue ready — waiting on Julie for account mapping
✅ Connected
📧

Brevo (Email)

Sender: office@ (marketing) · billing@ (payments)
Sends: Transactional emails, campaigns
✅ Connected
💬

Brevo (SMS) NEW

Phone: OCC number
SMS approved and live as of April 7, 2026
✅ Connected
📮

Lob.com DIRECT MAIL

Used for: EDDM postcards, Neighborhood Takeover Touch 1 & Touch 2 mailings
How it works: NT Engine submits postcard orders to Lob per activation. Lob prints & mails to target addresses within 5–7 business days.
Env:  |  Set LOB_ENV=live on nt-engine worker to mail real postcards
✅ Connected
🦍

GorillaDeSK (Legacy)

Syncs: Customers, jobs, invoices (nightly 2AM)
Legacy system — will be disconnected after COG cutover
✅ Connected
Users & Roles
Active Users
NameEmailRoleRoutesStatusAction
Howard Cooper howard@ohiocleancans.com Owner All Active
Jason jason@ohiocleancans.com Manager All Active
Coby coby@ohiocleancans.com Crew Route 2 Active
Brady brady@ohiocleancans.com Crew Route 3 Active
Whitney whitney@ohiocleancans.com Read Only Active
Permissions Matrix
Feature Owner Manager Crew Read Only
CRM Dashboard
Customer Profiles✓ Full✓ Full✓ View
Routes / Schedule✓ Edit✓ View Own✓ View
Billing / Payments
Pricing
Automations✓ View
Templates✓ View
Settings
Crew App✓ All Routes✓ Own Route
COG Grid
Command Center✓ Limited✓ View
Financials / QB
Send Email/SMS✓ Templates Only
New Orders
Approve Actions
Note: Roles are assigned per user in the Users section above. Owner has full access to all features. Custom role configurations coming in COG v3.
COG Setup Wizard
Complete each step to get your company live on COG
78% Complete
1
Company Info ✓ Complete

Company name, address, phone, logo upload.

Already configured → Go to Settings
2
Service Area ✓ Complete

ZIP codes, counties, coverage area.

15 ZIP codes configured → View in Analytics
3
Service Plans ✓ Complete

Define your service types and pricing tiers.

134 service templates configured → Go to Pricing
4
Routes & Schedules ✓ Complete

Set up routes, assign areas, define schedules.

4 routes configured → Go to Settings
5
Crew & Users ✓ Complete

Add team members, assign roles and routes.

6 users configured → Go to Settings
6
Payment Processor ⏳ In Progress

Connect Square, Helcim, or Stripe.

Square connected. Helcim pending. → Go to Settings
7
Email & SMS ✓ Complete

Connect Brevo for transactional email and SMS.

Brevo connected. SMS live. → Go to Settings
8
Templates ✓ Complete

Customize email, SMS, and broadcast templates.

70+ templates configured → Go to Templates
9
Import Customers ⏳ In Progress

Upload customer CSV from old system.

1,842 customers imported. Invoice migration: 14,750 of 39,000
37.8%
10
Go Live ○ Not Started

Review everything, flip the switch.

Complete all steps above, then click GO LIVE to activate COG.
VENDORS & SUPPLIERS
Name Category Contact Phone Email Notes Actions
Loading…
📣 Marketing
Active Takeovers
routes currently armed
Channels Fired (7d)
emails + SMS + posts
Signups Attributed (30d)
from NT campaigns
Avg CPA
per attributed signup
📅 Active Takeovers

Loading…

📋 Past Takeovers

Loading…

📊 Brevo Email Health — Open / Click / Bounce Tracking
Open Rate (30d)
Click Rate (30d)
Hard Bounces
blocked from future sends
Soft Bounces
retry eligible
Unsubscribes
Spam Complaints
Click Refresh to load delivery health data.
Campaign Engine
📧 Active Campaigns
📅 Scheduled
📝 Past Campaigns
📄 Template Library

Every customer-facing template, grouped by channel. Locked templates cannot be edited without Howard's approval. See the Templates tab for full edit access.