Work · My own build · Code is public · Performance Plus
Ad budget follows clicks, not revenue
What I built: Ad budget that follows revenue, not clicks
Reads what sales reps wrote about each lead, and tells you which campaigns to scale, cut or pause. In testing it made the right call on 10 of 12 campaigns.
Right call on 10 of 12 campaigns in testing (verified)
Right call on 10 of 12 campaigns (verified)Every reason quotes the sales notes (verified)193 automated tests (verified)
Verified = seen in the system. Self-reported = my own measure.
Ad dashboards show clicks, cost and conversion rate. They don’t show what sales heard on the call.
A campaign can look great and be full of wrong-fit leads. Another can look average and bring your best deals.
So budget follows clicks, not revenue.
An app that reads the sales notes.
An app that joins ad data with CRM records, session by session.
An AI step that reads the sales notes and returns one action per campaign: increase, decrease, pause, or “not enough data”. Each comes with a % change, a confidence score, and a reason that quotes the notes.
Google Ads, Meta and LinkedIn exports, in different currencies, in one view.
Charts, filters, campaign comparison, PDF and CSV export, and saved past analyses.
A “close the loop” export: offline-conversion files where each lead’s value is weighted by its AI quality score. It writes files. It does not push to live ad accounts.
Step by step
Upload the ad export and the CRM export.
The app matches rows on session ID and rolls them up by campaign.
GPT-4o gets the campaign table plus the sales notes. It must answer in a strict JSON shape (Pydantic + OpenAI Structured Outputs), so it can’t return junk.
Rule built into the prompt: sales notes beat click volume. “Wrong ICP” everywhere means pause. “Ready to sign” means increase.
Results show as colour-coded actions with reasons. Export to PDF, CSV or offline-conversion files.
How I built it
Planned in phases with written specs, verification notes and code reviews (an AI-assisted planning workflow).
Built for the OpenAI x Outskill AI Builders hackathon (Cohort 01). Design started on 26 May 2026. Lead-quality scoring and the offline-conversion export landed on 15–16 Jun. 87 commits in all.
Demo mode works with no API key, using a cached real GPT-4o run.
Honest note: during development, AI calls could also run through an unofficial ChatGPT-subscription proxy. The repo says this is for local use only. Production should use the real OpenAI API.
What you can check
Verified: Right call on 10 of 12 campaigns in a test set of 122 sessions across 3 platforms. Every reason quoted the sales notes (11 of 11). Both misses chose “pause” where the answer was “decrease”. Source: Test results in the repo (EVALS.md), 15 Jun 2026
Verified: 193 automated tests in 21 test files. Source: Counted in the repo, 15 Oct 2026
What this means for your team
Your budget moves follow what sales actually hears, and every move comes with a reason you can check. For a client, I’d connect your real ad exports and CRM, run it weekly and post the actions to Slack.