Syntora
All case studies

How We Automated a Google Ads Agency's Entire Backend saving ~230 hrs/month

Featuring work by Syntora

A Google Ads management agency serving 15+ clients across home services, commercial cleaning, legal, healthcare, automotive, and financial services.

Problem

Every operational process was manual. New client onboarding meant 48 fields of data entry across three systems. No connection between GHL and Google Ads. No automated notifications. No system to capture what was working.

Approach

We built a Python automation platform (FastAPI) between GHL, Google Ads, and Supabase, turning manual workflows into webhook-triggered chains. The platform runs 24/7 on Digital Ocean.

16,400+
Lines of Python
52
API Endpoints
17
Backend Services
352
Automated Tests

Automations Built

Client Onboarding Engine

Impact: 48 fields in. Fully provisioned GHL sub-account out. Zero manual steps.

A single form submission triggers a 6-step automation chain: validate 7 required fields, create a GHL sub-account with snapshot template, populate 87 custom values on the location, create the primary contact with all fields mapped, store a backup record in Supabase, and email the team a full onboarding summary. The system infers timezone from state, computes Google Ads scaling stage from monthly spend, and normalizes inconsistent GHL payload formats automatically.

GHL API Integration Layer

Impact: Rate-limited async wrapper for every GHL operation the agency needs.

A 980-line async Python service wrapping the full GHL API surface: contact CRUD with upsert logic, sub-account provisioning with snapshot application, custom field mapping and bulk population, pipeline and opportunity management, and inbound webhook posting. A global semaphore enforces 10 concurrent requests against GHL's 100/min rate limit. Supports both agency-level and location-level authentication for multi-tenant operations.

Webhook Processing Engine

Impact: Secure, signature-verified handlers for every GHL event that matters.

Three webhook endpoints process GHL events in real time. Client onboarding triggers the full provisioning chain. Opportunity stage changes trigger the AI strategy pipeline (fetch contact, pull Google Ads metrics, generate strategy, write results back to GHL, send Launch Blueprint email). All production webhooks verify HMAC-SHA256 signatures against a shared secret.

Multi-Channel Notification System

Impact: Email, Slack, in-app, and digest notifications with delivery auditing.

Four notification channels managed by a single service: email via Resend API (onboarding summaries, performance alerts, strategy blueprints), Slack via incoming webhooks (formatted alert cards with severity colors), in-app notifications stored in Supabase, and digest mode that batches alerts into daily summaries grouped by severity. Every delivery is logged to an audit table.

Background Schedulers

Impact: Three always-on jobs running in production, no human trigger required.

Anomaly detection scans all 15 client accounts every 6 hours for CPA spikes, CTR drops, conversion drops, ROAS drops, and budget pacing issues. ROI capture runs daily, measuring before/after metrics on implemented recommendations after a 14-day window. Weekly reports fire Monday 9 AM Central with week-over-week performance comparisons per client.

GHL Workflow Automations

Impact: Native GHL workflows shipped to every sub-account via snapshot.

Birthday reminders (email + SMS). Review response with AI sentiment analysis routing to happy/sad branches. Contact-to-opportunity-to-review-request pipeline. LSA auto-responder: Google Local Service Ads leads trigger an inbound webhook, generate a personalized SMS via GPT, send it, tag the lead, create an opportunity, and follow up 4 hours later. Per-client toggle via custom value.

Knowledge Base Seeding Pipeline

Impact: 12 scripts populating 1,210 domain-specific entries across 9 industries.

Vector embeddings (Gemini, 768 dimensions) stored in Supabase pgvector. 34 topics across 4 maturity stages ($5K-30K through $300K-2M+ monthly spend). Tailored entries for home services, commercial cleaning, roofing, legal, healthcare, automotive, real estate, financial services, and general verticals. Utility scripts for embedding backfill, data cleanup, and custom field provisioning.

CRM Data Layer

Impact: Unified client records from onboarding + GHL with cached queries.

REST endpoints merge onboarding records from Supabase with live GHL data. Client details organized into 11 form sections for display. 60-second TTL cache prevents hammering the GHL API on repeated reads. Full CRUD with field-level updates.

AI Ad Strategist

The automation infrastructure powers a client-facing AI tool. The Ad Strategist connects to Google Ads via OAuth, pulls live campaign data (search terms, quality scores, existing ad copy, existing negatives), and generates recommendations grounded in a 1,210-entry knowledge base across 9 industries. Includes a per-client chat interface, document upload pipeline (PDFs, CSVs, images extracted via Gemini), and one-click apply to push keyword, negative keyword, and ad copy changes directly to Google Ads.

The Strategist is one consumer of the automation platform. Without the onboarding engine, GHL integration, CRM layer, and notification system underneath it, it would just be another AI chatbot with no operational context.

The Real Outcome

The platform replaced every manual operational process the agency had. New clients go from form submission to fully provisioned sub-account with zero human intervention. Anomaly detection catches budget pacing issues and performance drops before the team even logs in. Strategy recommendations generate automatically when opportunities move through the pipeline.

This shifted the agency from reactive to proactive. Instead of spending time on data entry and account setup, the team focuses on client strategy and growth.

The Takeaway

1. Connect the systems.

GHL, Google Ads, Supabase, Resend, and Slack are all separate tools. The value is in the Python layer that connects them, shares state, and triggers chains across all of them from a single event.

2. Automate the boring stuff first.

Client onboarding is not glamorous. But automating 48 fields of data entry, sub-account provisioning, and team notifications is what freed up capacity for everything else.

3. Build for the operator, not the demo.

Rate limiting, webhook signature verification, delivery audit logging, HMAC validation, graceful error handling with non-fatal fallbacks. The code nobody sees is what makes the system trustworthy enough to run unattended.

Ready to be our next case study?

Book a call to discuss your workflows. We'll show you exactly what we can automate.

Get in touch