APS 2.0
Gulf Coast Pest Control
Loading APS 2.0 — v38.900…
build v38.900
APS 2.0 — Apex Pest Software

Combined Dashboard

The whole business in one view.
Book of business
Total business
Scheduled book — from your calendar
Revenue — completed work, last 12 months
This month
Jobs this month — by status
Unpaid invoices — aging
Revenue per month — this year vs last year
Booked forecast — next 12 months · jobs + Tiers subscriptions
Active services — next 90 days
🧪 Supplies
🗂 Aggie's desk
🏛 Boardroom
Aggie in your chair · MEG (money) · CAM (dispatch) · RAY (sales) · JUNE (customers & compliance)

Customers

One record per client, reused on every work order. Top Note is Apex-only and never shown to the client.
Clients (0)

Leads

Callers and inquiries — not customers yet. Win one and it becomes a client record.
Pipeline
New lead
AGI reply — priced from your sheet
Leads

Work Orders

A job tied to a client. Pick an existing client or type a new one. Top Note rides along on every order — internal only.
Pipeline
Work orders (0)
KEYred ring = job done, invoice not sent, money owedyellow edge = confirmation text out, awaiting their Cstatus chip color = job status, same as the calendar key

Schedule

Your work orders on a calendar. Click any job to open it; click a day to add one.
📊 Estimate funnel
🔄 Recurring IPM
1-year agreements, monthly billing
🔨 One-Time Project
Exclusion, trapping, installs — line items
Commercial IPM Pricing Tool · Confidential
Use this calculator for: Recurring commercial IPM proposals only (signed 1-year agreements, monthly service).
Not for: Single-unit residential / condo calls (use $350 one-time rate)  ·  Emergency one-shot visits (use $350 or escalate to Owner)  ·  Condo/HOA unit calls (use Multi-Unit Residential Authorization SOP first).
Hourly rate / hr · all pricing derived from this
1. Customer info
Business name
Contact name
Service address
City, State, ZIP
Phone
Email
2. Facility square footage
sq ft
Determines service tier & estimated visit time
3. Building perimeters
Enter each building separately. Perimeters are summed for bait station calculation.
lin ft
+ Add building
Total perimeter — lin ft
4. Establishment type
Non-Food
Office, warehouse, retail, gas station
Food Establishment
Restaurant, deli, grocery, food processing
5. Audit status
Non-Audited
Standard commercial account
Audited Account
AIB, SQF, BRC, health dept.
6. Program
Traditional
Standard products & pricing
Organic
Organic program — 1.5× the monthly rate
6. Service frequency
Weekly
52x / year
Bi-Weekly
26x / year
Monthly
12x / year
Bi-Monthly
6x / year
Quarterly
4x / year
Yearly
1x / year
7. Time overrides (optional) ▼
Override estimated hours. Leave blank to use defaults.
Recurring visit (hrs)
Setup / first visit (hrs)
Bait station count override
Overrides perimeter calc. Flagged on estimate PDF.
7. Payment terms
Net 15
Standard commercial recurring (default)
Net 30
Gov / municipal / institutional — Owner approval required
Due Upon Receipt
Prior late payment history — trust reset
8. Notes / special conditions (optional)
Enter square footage and linear feet to see pricing.
Est. visit time
—
per monthly visit
— hrs × —/hr
= —/mo base
Final: —/mo
Monthly payment
—
Charged 1st of each month · card on file
Annual contract value
—
recurring only
Pay in full — save 10%
—
full year paid upfront (setup + service)
vs —/mo × 12
You save —
Exterior bait stations
Spacing standard—
Stations needed—
Unit price—
Note—
Hardware total—
Setup fee breakdown
——
——
Setup total—
Year 1 total investment
—
setup + 12 months recurring
📄 Generate Estimate PDF
PDF is built and linked directly on screen
💾 Save estimate to APS
📧 Email to client
💬 Text to client
🖨 Print

Tiers — Subscriptions

Onboarding checklist + recurring subscribers.
Portfolio
Revenue over time
▸ Welcome email
Subscribers

One-Time Jobs

Individual paid jobs. New names here are added to your client book automatically.
Portfolio
Revenue by month
Add job
Jobs

Commercial Accounts

Flat-rate recurring contracts.
Portfolio
Revenue by account
Accounts are added from Customers
Create or open the customer, set type to Commercial, and the contract lives on that record.
Accounts

Legacy Recurring

GorillaDesk recurring clients from before Tiers.
Portfolio
Annual value by client
Clients are added from Customers
Create or open the customer, set type to Legacy, and their pricing lives on that record.
Clients

Inventory

Track product on hand by location. Items can live in multiple spots.
Totals
Add item
$
Items

Equipment

Track equipment by location. Items can live in multiple spots.
Totals
Add equipment
Equipment

Activity

Everything that happened, one stream — every click and edit by every user, every checklist item, every action Aggie took in any chat, every pipeline verdict, every dial change. The answer to “what happened while I was gone.”
Loading…
📥 Inbox
all channels, one stream
Loading…

Fleet & Gear

Trucks and application equipment — Aggie researches each one's manufacturer maintenance schedule, watches for recalls and bulletins, and surfaces what's due.
🚚 Fleet
Service vehicles. Aggie researches the manufacturer schedule + open recalls for each, re-checks monthly (1st), and emails you the moment a new recall appears. Techs update miles; due items surface here and in Aggie's grounding.
Loading…
🧰 Equipment
Sprayers, foggers, bait guns, dusters. Aggie researches the manufacturer care schedule (seals, tips, calibration, seasonal care) + bulletins, re-checks monthly. Log service to roll the intervals.
Loading…

Settings

Short on purpose (v38.684): her controls first, the business, this device, setup, dev.
🎛 AGGIE CONTROLS
One tap sets every channel and the bookkeeping together — no more four separate switches. Current level shows below; hand-tuned channel settings read as CUSTOM.
While ON, confirmations park and mirror to your phone: reply SEND n / SKIP n / EDIT n <text>. Replies to inbound texts stay live. Stamps fire only when a parked confirm actually sends.
Critical alarms (🚨 booking guard · 📵 deaf text bridge · database down) always ring, any hour. Everything else obeys this dial — Important (default) spaces routine pushes 90+ minutes apart, holds them 8pm–7am, and tells you how many it held.
🎧 Read your last 30 days of calls. Every recording was transcribed and stored, but only ever reached the Calls sheet. This carries the complete transcript of every call and voicemail — including what was said after a transfer to Dana — into the customer's Inbox thread, with a link to the audio. Safe to run twice; it never double-posts. Does 60 at a time.
🧹 Old duplicate transcript rows? Calls carried home in an earlier format printed the whole conversation twice. This hides those rows — nothing is deleted, and Unhide puts them all back.
🔁 Call missing its beginning? The live feed used to cut long calls at 24 turns; the recording has all of it. This lays the full conversation into the thread, grouped into proper turns. One call per press, nothing deleted, Undo puts it back.
🔔 Phone alerts (Pushover). Calls, texts, leads and voicemails buzz your phone the moment they land — no carrier, nothing A2P can block. Someone asking to speak with you repeats until you tap it, even on silent. Add one Script Property named PUSHOVER with the value userkey:apptoken (a colon between them), then test.
These three lines are spoken as-is on her OLD telephone paths (voicemail, transfers, callback rescues), before she thinks — so they live here, not in her prompt. Blank any box to go back to the default.
📞 Her live-call greeting moved to her new telephone: Twilio Console → Functions → aps-proxy-1634 → /aggie (edit welcomeGreeting → Deploy All). It is live on the very next call.
How she sounds on the phone. Neural = fast · Generative = most human, ~1 second slower per reply. This sets her voice on callbacks, rescues, missions and voicemail — live on the next call, no deploy. Her inbound voice lives on her new telephone (Twilio → Functions → aps-proxy-1634 → /aggie); set it to the same one there.
🎙 Owner line. Call the business number from this cell and you get Aggie as your assistant, not the receptionist — ask her anything, have her do things. The spoken code is asked once per call before her first action (blank = caller ID only).
She answers customer emails with the same brain as the phones — The Canon, the tier pitch, her lessons. On/off lives at the 🎙 Aggie Autonomy dial above (Watch = drafts for your review · Answer = she replies herself). This section is the lane’s toolbox and health report. Processed threads get the "Aggie" label; newsletters and no-replies are skipped automatically. Sweeps every 5 minutes.
Press “Check lane” for a live health report.
⚡ WHEN SOMETHING IS WRONG
One tap, whole-system physical with LIVE probes — brain answers a real ping, Square and Maps get called, Twilio’s own 24h error feed is read, stale jobs counted. Anything sick gets a 🔧 Fix button. Runs itself here, and makes 7am rounds on its own — silent when green, loud in the Inbox when not.
🏢 THE BUSINESS
One accent color drives the whole app; your mark prints on receipts, estimates, invoices and statements. Owner only.
Operating costs AGI folds into margin math. Log fuel, insurance, payroll, vehicle — anything.
Florida requires daily pesticide application records kept for 5 years (Rule §8.02(b)). Applications are logged on each work order; this generates the state-format report to print or hand an inspector.
Licensed applicators
Names + FL certification numbers that appear on application records.
Tells the AI your current field capacity. Used in all projections and board meetings.
Block whole days or just hours for any tech. The calendar wears the block, and Aggie will never book that tech into it — jobs overflow to the next tech in the pool instead.
Where each tech's day begins — the route optimizer leaves from here (override any run inside the optimizer).
Real bank truth for the CFO — connect M&T once, and every night the transactions and balances sync into the 🏦 BankFeed sheet and Aggie’s grounding. Read-only: Plaid can see, never move, money.
…
The dispatcher. Reports to Aggie once introduced; until then he runs in shadow — computing slot hand-offs and night passes into his log, touching nothing, invisible to her. The introduction is a deliberate act, never automatic.
…
📱 THIS DEVICE
▶ How a job opens
Work order opens as — how a saved job opens on THIS device. 🎯 Focus walks the visit one step at a time (Exit any time for the full screen); 📄 Full is the whole work order. Focus is the default.
📱 View mode
Force the field/mobile interface on any device — test Field Mode from a laptop. Saved per device/browser; a green chip in the corner resets it if you get stuck.
🔧 SETUP (RARELY)
Each person gets a username, password, and role. Roles set what they can do — enforced on the server, not just hidden buttons: Tech runs jobs & supplies · Sales + leads & customers · Lead Tech + scheduling, invoices, messaging · Office Manager everything but imports/healing/user admin · Owner/CEO/CFO/CMO/COO everything. They sign in at the bare app link — no key needed.
Paste your Web app URL here so the "Phone link" button builds safe links. Get it from Deploy → Manage deployments → your active deployment → copy the Web app URL (ends in /exec).
🛠 DEV — plumbing and test tools
📨 Carrier registration (A2P 10DLC)
Until the carriers approve the company's registration, Twilio may not carry a customer text (error 30034) and the Twilio number is only a dead fallback behind the relay. The day Twilio says approved, flip this: texts ride Twilio when the relay is down, and her alerts to your cell stop bouncing.
…
Texting + phone plumbing status. Webhook wiring is automatic now (apsSetup or twilioWireNumber sets Twilio's URLs correctly) — the Script Properties list below is reference, not a to-do.TWILIO_SID, TWILIO_AUTH, TWILIO_FROM (your Twilio number, +1802…), and WEBHOOK_KEY (any long random string). Then paste the Twilio URL below into your Twilio number’s "A message comes in" webhook, and the Square URL into Square’s webhook subscriptions (payment events). Daily backup: run installDailyBackupTrigger once from the Apps Script editor.
If everything else fails, callers hear THIS instead of “application error” — it lives on Twilio’s servers, so it works even if Google is down. Paste the TwiML Bin URL (starts with https://handler.twilio.com/). Saving re-wires the number automatically.
⏳ checking the server… (v29.7: if this line never changes, the loader never ran — screenshot it and that IS the diagnosis)
Google’s server occasionally slams the door on a webhook (a “502”) and a caller hears an error. With the proxy saved, every webhook rides through Twilio’s side first, and door-slams are retried silently before the caller notices. Paste the Function URL (https://….twil.io/voice). Saving re-wires the number in the same tap. Type CLEAR to remove.
⏳ checking the server…
The backend's pulse — when each background job last ran, how long it took, how big the data has grown, and the latest errors. When anything feels slow or frozen, screenshot THIS.
Within ~2 minutes of every finished call, a deterministic safety sweep reads the transcript for promises, cancellations, and bookings-without-records — red obligations in near-real-time, no AI judgment. Sale/lead judgment belongs to Aggie’s morning review (her clock-in, one mind, her memory) — verdicts land on the 🏭 desk’s call list. No machine ever creates a lead, client, or work order at any dial position; “Answer + her bookings” means exactly that — HER bookings, earned on the 🪜 ladder. Below is the sweep’s activity log.
Verdicts live in Activity → 🏭 Pipeline.
Make the new key at the provider, paste it here, press Save & verify. Each one is checked against the provider with one read and is live immediately. The Railway-side variables (the gateway, the database, MASTER_KEY) are listed below by name — those wait for Railway.
🚪 Door keys (APP_KEY + WEBHOOK_KEY)
One tap makes new ones and re-wires Twilio and the SMS gateway itself. The voice gateway and the inbox service carry the webhook key in their environment — their results stop landing until Railway redeploys them with it. Do this when Railway is back, not before.
🚂 Railway variables to roll (by name)
Aggie reviews her own week — calls, texts, leads, signups, revenue — and writes an evolution brief: wins, friction, script changes, coaching notes, and numbered upgrade requests addressed to Claude. Every brief is logged so she remembers her own growth. Auto-emails Monday 7am after the first run.
Finds every trace a phone number left — call log, transcripts, leads, Aggie-booked jobs — and deletes exactly what you check. Leave the box empty to scan your own cell.
Move this job to…

🏖️ Request time off

Your requests

📄 Sale P&L