01
What it is
Most “AI ad platforms” make the same mistake: they ask a model to decide what to bid. AdPilot is built on the opposite principle. We never write our own auction bidder — we build a thin deterministic control and protection layer on top of Google’s own Smart Bidding. All money maths and guardrails are ordinary code you can test and explain to an auditor.
There is an LLM in the system, but its role is narrow: write ad copy and human-readable rationales for decisions.
It never calls a mutate operation. That is not ideology — it is what lets you sleep while live budget sits on the account.
02
capabilities
What it does
01
Campaign construction
Automatic assembly of campaigns, ad groups and ads with keyword research — from structure to final creative.
02
Two-tempo ingestion
A slow loop for complete data and a fast loop for critical spend metrics. Overspend is caught in minutes, not the next day.
03
Lag-corrected conversions
Attribution arrives late, and naive counting always undervalues recent days. The lag model is built into the maths.
04
Guardrails and budget
Deterministic spend limits plus an independent watchdog process acting as a kill switch — it still fires when the main worker hangs.
05
Reconciliation
Every day we reconcile what the system believes about spend against what Google reports. A mismatch is an incident, not a log line.
06
Dashboard and roles
A React console with role separation and a decision log: every change carries a cause, an author and a human explanation.
03
architecture
How it works
01
Ingest Google Ads statistics
02
Compute conversions and budget
03
Deterministic rules and gates
04
Execute changes
05
Reconcile and report
Under the hood
- Python 3.12 + FastAPI on SQLAlchemy 2.0; PostgreSQL 16 with TimescaleDB for metric time series.
- A Celery worker, a separate beat scheduler running two tempos, and an independent watchdog as a kill switch.
- Domains split by purpose: guardrails, budget, decision_engine, fsm, rbac, ingestion, reconciliation, policy, executor.
- Deterministic tests over the money maths form their own mandatory suite.
- Token lifecycle and secrets live outside the code; four systemd units in production.
- Principle #1 is written down: the LLM never calls mutate. Ever.
04
scale
Numbers
0
bids set by an LLM
2
ingestion tempos
4
production processes
100%
decisions with a logged cause