Internal tool — no auth layer, no tenancy. What you see here is the whole configuration.
| Service | Mode | Set this | Without it |
|---|---|---|---|
OpenAI Brief generation and post-call extraction — the product. | live | OPENAI_API_KEY | Briefs are assembled by the offline writer from the same inputs, and calls are extracted by keyword rules. |
GoHighLevel Contact history on the brief, and write-back of notes and tasks. | simulated | GHL_PRIVATE_TOKEN, GHL_LOCATION_ID | History is read from what bookings already told us; notes and tasks are recorded but not sent. |
Slack The brief DM to the assigned closer, and the weekly team digest. | simulated | SLACK_BOT_TOKEN (or SLACK_WEBHOOK_URL) | Messages are written to Deliveries exactly as they would have been sent. |
Google Docs The full brief as a Doc, linked from Slack. | simulated | GOOGLE_SERVICE_ACCOUNT_JSON, GOOGLE_DRIVE_FOLDER_ID | The brief still has a permanent link inside this app. |
Fathom / Fireflies Recordings arriving on their own, which is what makes the post-call loop run without anyone remembering. | simulated | FATHOM_WEBHOOK_SECRET or FIREFLIES_API_KEY | Paste transcripts by hand from a call page. |
Zoom Cloud-recording transcripts pulled for every closer, with no one pasting anything. | simulated | ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, ZOOM_CLIENT_SECRET | Transcripts come from Fathom / Fireflies, or are pasted by hand. |
Google Business Profile Review count, rating and recency — a reputation gap most prospects have not priced in. | simulated | GOOGLE_MAPS_API_KEY | Plausible figures are generated per company and marked SIMULATED on the brief. |
Meta Ad Library Creative age and ad activity — the fatigue diagnosis. | simulated | META_AD_LIBRARY_TOKEN | Plausible figures are generated per company and marked SIMULATED on the brief. |
DEMO_MODE is auto — live wherever a key exists, simulated everywhere else.
POST https://ai-closers.buildmyagency.co/api/webhooks/ghlPoint your GoHighLevel workflow at this on the AppointmentBooked trigger. Send the contact and appointment objects. If GHL_WEBHOOK_SECRET is set, it must arrive as x-webhook-secret.
POST https://ai-closers.buildmyagency.co/api/webhooks/fathomFathom fires this when a recording finishes processing. Transcripts are matched to a booking by attendee email, then by time.
POST https://ai-closers.buildmyagency.co/api/cronRuns the T-60 sweep on demand, for when you would rather drive it externally than rely on the worker loop. Requires x-api-key: INTERNAL_API_KEY.