โ™ ๏ธ Ace Diabetic Supply

Cron Workflow Map โ€” Updated Sept 5, 2026 ยท 31 scheduled jobs

๐Ÿ“ฅ
Lead Intake
Zapier โ†’ Worker (0 LLM cost)
Automated Flow
FB Lead Ad โ†’ Zapier โ†’ Airtable (New) โ†’ Worker /new-lead โ†’ GHL SMS (instant intro, ~90s delay)
โ†ณ Bilingual, supply-type matching, price-anchored intros. Sets Status = Contacted on successful send.
New Lead Backstop 8:05 AM daily glm-5.3
Catches overnight/failed intros still in New and sends the intro text (backstop-outreach.sh). Excludes SMS-FAIL leads.
โ†’ #ace-alerts
SMS Retry Ladder 8:30 AM daily glm-5.3
New leads tagged SMS-FAIL / SMS-RETRY-1 get one retry per day (8h โ†’ 24h). 3rd failure โ†’ Call Only. outreach-with-retry.sh.
โ†’ #ace-alerts
๐Ÿ”„
Lead Lifecycle
9 crons
CONTACTED (intro sent)
GHL Polling Every 10 min, 7AMโ€“3AM opus-4-8
Reads inbound texts, quotes from the wholesaler list + tier math, negotiates, creates labels (EasyPost) + shipment records, flags to Anthony.
โ†’ #ace-alerts
VAPI Outbound Caller Every 15 min, 10AMโ€“7PM Monโ€“Sat glm-5.3
3-stage calling: quick call 5โ€“30 min after intro โ†’ follow-up after 2+ texts โ†’ final call โ†’ No Response. vapi-outbound.sh.
โ†’ #ace-alerts
Smart Contacted Follow-up Every 15 min, 9AMโ€“6PM glm-5.3
Day 1โ€“2 friendly check ยท Day 3โ€“5 value nudge ยท Day 7โ€“10 direct ask ยท Day 14+ close out. Contacted โ†’ Quoted / No Response.
โ†’ #ace-alerts
QUOTED
Smart Quoted Follow-up Every 30 min, 9AMโ€“6PM glm-5.3
Day 2 soft check ยท Day 4 interest nudge ยท Day 7 direct ask ยท Day 14 close-out. Counter-offers over $5/box need Anthony.
โ†’ #ace-alerts
DEAL MADE โ†’ shipment record Pending
Shipping Nudgelast-call tier added 9/3 10:00 AM Monโ€“Sat glm-5.3
Label sent but nothing scanned: unique nudge on days 4โ€“13 (max 20/run) + one last call on day 21โ€“30 (max 10/run, marker ๐Ÿ LAST CALL in lead Notes). Reads the GHL conversation first; skips Ken/NYC/pickups/DND.
โ†’ #ace-alerts
Packing Day Reminder 11:30 AM Monโ€“Sat script, no LLM
One 'pack it in a cardboard box' text 2 days after the label to mail-in customers still pre_transit. Marker in lead Notes prevents repeats.
โ†’ #ace-alerts
Stale Shipment Cleanupupd 9/5 12:00 PM Tueโ€“Sat opus-4-8
Rolling: shipments still Pending 35 days after Deal Made (p99 of dealโ†’delivery lag is 25 days; ~3โ€“4 records/day in steady state). Agent reads the conversation, then cancels the record, refunds the unused UPS label (found in our own EasyPost account), notes the lead (Deal Made โ†’ No Response). Never messages the customer. Dry run first; execute only by record id. Flags are stamped ๐Ÿšฉ and snoozed 7 days so nothing is re-reported; โ›” CLEANUP HOLD = permanent. Max 25/run.
โ†’ Telegram (decisions only, NO_REPLY otherwise) + #ace-alerts log
โœ… COMPLETE
Repeat Customer Follow-up 10:45 AM daily glm-5.3
Re-engages past customers 21+ days after their last deal for more supplies (training mode).
โ†’ #ace-alerts
๐Ÿ‘๏ธ
Monitoring
6 crons
Delivery Monitorscript 9/5 10, 12, 2, 4, 6 PM Monโ€“Fri ยท 10 AM Sat glm-5.3
Script, no model (delivery-monitor.py since 9/5): every Pending / In Transit shipment (paginated, was capped at 100 rows โ‰ˆ half) checked against its own EasyPost tracker. Pending โ†’ In Transit on carrier scan, โ†’ Delivered + date on delivery; cancelled / returned / failed labels โ†’ #ace-flags once a week. Never Complete/Paid, no customer contact, no Telegram. ~25 s/run.
โ†’ #ace-receiving (+ #ace-flags)
Deal Integrity 1 PM + 5 PM none
deal-integrity.py (blank owners, missing shipment records) + sweep-stale-deal-made.py (stale Deal Made โ†’ No Response, hard NYC/Ken gate). Replaced the hourly Message Gap Audit 2026-09-27.
โ†’ #ace-flags / log
VAPI Call Monitor Every 15 min, 8AMโ€“9PM glm-5.3
Polls VAPI for ended calls โ†’ Airtable status + notes, GHL follow-up text, Slack summary. 14h lookback at 8 AM.
โ†’ #ace-alerts
Ops Health Check 8:45 AM daily glm-5.3
Six read-only checks: lead backlog, cron health, stale shipments, PIPELINE STUCK detector, system health. Real data only.
โ†’ Telegram (Anthony)
Pipeline Pulse 1 PM + 5 PM daily script, no LLM
Silent watchdog: runs health-check.sh and only speaks when a revenue-critical process is broken. Added after the Aug 26โ€“30 stranded-leads outage.
โ†’ Telegram, only on โŒ
Conversation Audit 9:00 PM daily glm-5.3
End-of-day status hygiene on conversations. Fixes statuses, never messages customers.
โ†’ Telegram (Anthony)
๐ŸŒฑ
Nurture
1 cron
Nurture Check-in 10:35 AM ยท 1:35 PM ยท 4:35 PM glm-5.3
Soft 30-day check-ins for leads not ready to sell. Script pre-filters NYC / Ken / National ads / contacted-today; 3-layer dedup.
โ†’ #ace-alerts
๐Ÿ“Š
Reporting, Sync & Audits
10 crons
Dashboard Daily Refresh 6:00 AM daily glm-5.3
Regenerates the KPI dashboard (anthony-dashboard.workers.dev) from Airtable. Proj. Final = per deal month, Anthony view only.
โ†’ #ace-alerts
Airtable Daily Backup 6:00 AM daily glm-5.3
Full base export to the workspace.
โ†’ #ace-alerts
Wholesaler Price Sync 7:30 AM daily glm-5.3
Pulls wholesaler CSVs โ†’ wholesaler-price-list.md. Never overwrites price-overrides.json.
โ†’ #ace-alerts
Airtable Daily Maintenance 7:30 AM daily glm-5.3
Data-quality pass: stale Contacted/Quoted (14+ days) โ†’ No Response, field fixes.
โ†’ #ace-alerts
VAPI Price Sync 7:35 AM daily glm-5.3
Pushes current pricing into the VAPI prompts (vapi-push.sh) and the getQuote() worker table.
โ†’ #ace-alerts
VAPI Daily Review 12:30 PM daily glm-5.3
Reviews the day's call logs for failure patterns and agent struggles.
โ†’ Telegram (Anthony)
Prompt & Docs Consistency Audit Mon 7:00 AM glm-5.3
Weekly drift check on prompts, TOOLS.md, MEMORY.md, pricing, context budget. Reports only, never edits.
โ†’ Telegram (Anthony)
Meta Conversions Push Mon 8:00 AM glm-5.3
Sends recent completed shipments to Meta's Conversions API for ad optimization.
โ†’ #ace-alerts
Weekly Git Review Mon 10:00 AM ET glm-5.3
Summarizes the week's workspace commits, flags anything needing review.
โ†’ Telegram (Anthony)
Monthly Price Sheet Update 1st of month, 8:00 AM glm-5.3
Recomputes what-we-pay.html from wholesale + tier math and reports the diff for Anthony to paste into GHL.
โ†’ Telegram (Anthony)
Also: notion-reset-lance-tasks 8:20 AM daily (resets Lance's Notion to-do list) ยท Monthly ad spend reminder 1st 10:15 AM ยท Weekly Goals Review Sun 6 PM (main session) ยท one-shot reminders as needed.
โšก
Webhooks & API Endpoints
Cloudflare Worker
Base URL
https://ace-vapi-api.anthony-1cd.workers.dev
POST /
VAPI serverUrl โ€” routes assistant requests, end-of-call reports, and function calls
VAPI Assistant
POST /vapi-webhook
End-of-call reports โ†’ logs to Airtable + DMs Lance
VAPI End-of-Call
POST /lookup-customer
Looks up caller by phone in Airtable โ€” recognizes repeat customers
VAPI Function Call
POST /get-quote
Real-time quote calculation (55/60/65% tier math) during calls
VAPI Function Call
POST /new-lead
Zapier webhook โ€” instant intro SMS to new leads. Supply-type matching, bilingual, GHL contact creation. 0 LLM cost
Zapier โ†’ Worker
POST /follow-up
Follow-up drip โ€” disabled (replaced by OpenClaw Smart Follow-up crons)
Disabled
GET /health
Health check endpoint โ€” uptime monitoring
Monitoring
Call Flow
๐Ÿ“ž Caller โ†’ GHL (512-643-6823) โ†’ VAPI (737-702-6080)
    โ†’ POST / (assistant request)
    โ†’ lookupCustomer(phone) โ†’ Airtable
    โ†’ getQuote(items) โ†’ Price data
    โ†’ end-of-call-report โ†’ Airtable + Slack DM Lance
๐Ÿ“ž
VAPI Call Flow โ€” How It All Connects
Inbound + Outbound
โฌ‡๏ธ Inbound Call (customer calls us)
Customer โ”€โ”€โ”€โ”€โ†’ GHL (512-643-6823) โ”€โ”€โ”€โ”€โ†’ VAPI (737-702-6080)
โ”‚
Step 1: VAPI sends POST / to Worker (assistant-request)
Worker โ†’ Airtable lookupCustomer(phone)
Worker โ†’ Returns context to VAPI (name, repeat status, agreed pricing, shipment history)
โ”‚
Step 2: VAPI AI talks to customer, may call getQuote(items)
VAPI AI โ†’ Worker getQuote() โ†’ Price data (tier math)
โ†ณ AI quotes customer live on the call (e.g. "I can offer $165 per box")
โ”‚
Step 3: Call ends โ†’ VAPI Call Monitor picks it up within 15 min (vapi-poll.sh)
vapi-poll.sh โ†’ Airtable (update status + notes, create lead if new)
Call Monitor โ†’ GHL follow-up text (if no recent outbound)
Call Monitor โ†’ Slack #ace-alerts (call summary + DM Lance)
โฌ†๏ธ Outbound Call (we call lead)
Trigger: OpenClaw cron runs vapi-outbound.sh (every 15 min, 10AMโ€“7PM ET, Monโ€“Sat)
๐Ÿ”„ Merged May 1 โ€” was vapi-quick-call.sh + vapi-outbound.sh, now unified 3-stage script
Stage 1: Quick call โ€” Text=1, Call=0, 5-30min window (14hr at 10AM for overnight)
Stage 2: Follow-up โ€” Textโ‰ฅ2, Call=0, first callback attempt
Stage 3: Final call โ€” Textโ‰ฅ2, Call=1 โ†’ moves to No Response
Cron โ†’ Airtable (finds eligible Contacted leads) โ†’ VAPI API (create call)
Step 1: VAPI calls lead from (512) 488-1528 (Twilio outbound)
โ†ณ Uses Outbound Agent (Elliot voice, different from Inbound Agent)
โ†ณ Opens with "following up on the form you submitted"
โ”‚
Step 2: Same Worker flow as inbound โ€” assistant request, function calls
โ”‚
Step 3: Call ends โ†’ VAPI Call Monitor processes it (vapi-poll.sh, every 15 min 8AMโ€“9PM)
Call Monitor โ†’ Airtable (status + notes + GHL follow-up text)
Call Monitor โ†’ Slack #ace-alerts + DM Lance
โ†ณ Voicemail detection โ†’ logs "no answer" if only AI spoke
โ†ณ After 2 failed calls โ†’ moves lead to "No Response"
๐Ÿ—๏ธ Architecture โ€” What Runs Where
VAPI (Cloud)
โ€ข Voice AI agent (inbound + outbound)
โ€ข Speech-to-text + text-to-speech
โ€ข Function call orchestration
โ€ข Sends webhooks to Worker
โ€ข Phones: 737-702-6080 (in), 512-488-1528 (out)
Cloudflare (Workers + Pages)
โ€ข ace-vapi-api worker: VAPI webhooks, customer lookup, getQuote()
โ€ข /new-lead: Zapier โ†’ instant intro SMS
โ€ข anthony-dashboard worker: KPI dashboard
โ€ข cron-workflow Pages: this map
โ€ข Zero cold start, global edge
OpenClaw (Hetzner VPS, Docker)
โ€ข 31 scheduled crons (this page) + main session (Anthony's chat)
โ€ข GHL Polling every 10 min + Stale Shipment Cleanup on claude-opus-4-8
โ€ข Everything else on zai/glm-5.3; Packing Day + Pipeline Pulse are plain scripts
โ€ข Delivery: Slack #ace-alerts (ops) ยท Telegram (Anthony-facing) ยท #ace-flags (needs a human)
โ€ข Prompts live in business/*-prompt.md; scripts in business/*.sh|py
๐Ÿ’ฒ
Pricing Architecture โ€” How Offers Get Calculated
Override โ†’ Wholesale โ†’ Offer
โšก Step 0: Override
price-overrides.json
โ€ข Manual overrides set by Anthony
โ€ข Only Anthony changes this file
โ€ข Checked FIRST before anything else
โ€ข If item matches โ†’ use this price, skip Steps 1-2
โ€ข Format: { "item": "G7 15 Day FT-012", "wholesalePrice": 95 }
๐Ÿ“Š Step 1: Wholesale
wholesaler-price-list.md
โ€ข Auto-synced daily at 7 AM (Price Sync cron)
โ€ข Reflects what wholesalers actually pay us
โ€ข 4 CSV sources: FCM + W2 (3 sheets)
โ€ข Sync NEVER overwrites override items
โ€ข Ask / NT ATM = not available
๐Ÿงฎ Step 2: Offer
Calculated at quote time
โ€ข Standard / Returning / VIP = 55% / 60% / 65% of top-mint-tier wholesale
โ€ข 50% / 55% / 60% when the wholesale source is PATH (PATH prints high)
โ€ข Lancets: not bought at all since 9/15 (any brand)
โ€ข Overrides may pin fixed customer tiers (e.g. Skyrizi $1500/$1600/$1800)
โ€ข GHL Poll cron, VAPI getQuote() and the monthly what-we-pay sheet all use this math
๐Ÿ”€ Pricing Lookup Flow (GHL Poll + VAPI Worker)
Customer asks price โ”€โ”€โ†’ Read price-overrides.json โ”€โ”€โ†’ Match found?
YES โ†’ Use override wholesalePrice โ†’ calculate 55-70% offer โ†’ DONE
NO โ†’ Read wholesaler-price-list.md โ†’ get wholesale price โ†’ calculate 55-70% offer โ†’ DONE
โš ๏ธ Daily Price Sync cron (7 AM) fetches fresh CSVs from wholesalers โ†’ updates wholesaler-price-list.md โ†’ but NEVER overwrites items in price-overrides.json (noted in Slack if CSV differs)
๐Ÿ“‹ Active Overrides (price-overrides.json, as of 9/3/26 โ€” voided entries omitted)
Skyrizi (all strengths)
Fixed tiers $1500 / $1600 / $1800 never recomputed from wholesale
Set: 9/1
Lancets (all brands)
Not buying any brand, any count โ€” margin too thin
Set: 9/15
FS Lite Institutional 50ct
Wholesale $13
Set: 7/31
Accu-Chek Guide 50ct
Wholesale $14 retail ยท $8 yellow-tag OTC
Set: 7/24
Eliquis
Wholesale $110
Set: 7/19
FS Lite 100ct
Wholesale $40 $20/box offer, PATH-anchored
Set: 7/16
G7 15-Day STP-FT-016
Wholesale $65
Set: 7/16
Trelegy
Wholesale $150
Set: 7/11
Dupixent 300mg/2 mL
Wholesale $250
Set: 6/20
Repatha SureClick
Wholesale $150 sheet shows $0
Set: 4/15
Void rule: an override dies when a wholesaler's live price is higher than it. Only Anthony edits this file.
โš™๏ธ
Daily Timeline (America/New_York)
31 crons ยท what fires when
Always running
every 10 min โ€” GHL Polling (7 AMโ€“3 AM, opus-4-8)
every 15 min โ€” Smart Contacted Follow-up (9โ€“6)
every 30 min โ€” Smart Quoted Follow-up (9โ€“6)
every 15 min โ€” VAPI Outbound Caller (10โ€“7 Monโ€“Sat)
every 15 min โ€” VAPI Call Monitor (8โ€“9)
1 PM, 5 PM โ€” Deal Integrity (owners + stale Deal Made)

Morning
6:00 AM โ€” Airtable Daily Backup
6:00 AM โ€” Dashboard Daily Refresh
7:00 AM โ€” Prompt & Docs Consistency Audit (Mondays)
7:30 AM โ€” Wholesaler Price Sync
7:30 AM โ€” Airtable Daily Maintenance
7:35 AM โ€” VAPI Price Sync
8:00 AM โ€” Meta Conversions Push (Mondays)
8:00 AM โ€” Monthly Price Sheet Update (1st of month)
8:05 AM โ€” New Lead Backstop
8:20 AM โ€” notion-reset-lance-tasks
8:30 AM โ€” SMS Retry Ladder
8:45 AM โ€” Ops Health Check (Telegram)
10:00 AM โ€” Shipping Nudge (Monโ€“Sat; day 4โ€“13 + last call day 21โ€“30)
10:00 AM โ€” Delivery Monitor (then 12, 2, 4, 6 PM Monโ€“Fri; Sat 10 only)
10:00 AM โ€” Weekly Git Review (Mondays, Telegram)
10:15 AM โ€” Monthly ad spend reminder (1st of month)
10:35 AM โ€” Nurture Check-in (also 1:35, 4:35 PM)
10:45 AM โ€” Repeat Customer Follow-up
11:30 AM โ€” Packing Day Reminder (Monโ€“Sat, script only)

Midday / Afternoon
12:00 PM โ€” Stale Shipment Cleanup (Tueโ€“Sat, opus-4-8, no customer contact)
12:30 PM โ€” VAPI Daily Review (Telegram)
1:00 PM โ€” Pipeline Pulse (silent unless broken; again 5 PM)

Evening / Weekly
6:00 PM โ€” Weekly Goals Review (Sundays, main session)
9:00 PM โ€” Conversation Audit (Telegram)