Case studies
How I actually get results
Three examples of the work behind the numbers on my CV — the specific decisions, not just the outcomes.
CASE STUDY 1
Fixing broken attribution first, then scaling to 4X ROAS
The challenge
A client account had a paid setup that looked underoptimized on the surface, but the real issue was upstream: the numbers driving every optimization decision weren't trustworthy.
Step 1 — Audit the tracking before touching the campaigns
Before optimizing anything, I audited the GTM setup and found the real-time conversion tracking wasn't appending correctly to campaign-level events — meaning attribution data coming back from the account was incomplete, and every prior optimization decision had been made on partial information. I rebuilt the tag and trigger configuration, verified firing with GTM's Preview mode and cross-checked it against GA4's real-time reports until conversions were mapping cleanly to the correct campaign, ad group, and keyword.
Step 2 — Reallocate budget based on what the (now-accurate) data showed
With reliable data flowing, a clear pattern emerged: the largest share of budget was going to Demand Gen video ads with a comparatively poor CTR, while the same creative concepts were converting significantly better on Performance Max and Search. I shifted spend toward the channels the corrected data actually supported, rather than the channel that happened to be consuming the most budget by default.
Step 3 — Geo-segment the audience and match the landing pages to it
I broke down performance by region to find where demand was strongest, then built geography-specific campaigns targeting those areas directly instead of running one broad campaign. I paired this with landing page adjustments tailored to those specific audiences and regions — matching messaging and offer to what each segment actually responded to — which is what moved ROAS rather than budget reallocation alone.
The result
ROAS went from 1.5x to 4X once budget was reallocated to the higher-performing channels and the geo-specific landing pages went live — a direct result of finally having accurate tracking data to base decisions on, rather than partial, broken attribution.
CASE STUDY 2
When a great ad meets a landing page that kills it
The problem
A specific creative was performing exceptionally well by every ad-level signal — strong CTR and watch time — but leads weren't converting. The landing page it sent traffic to had a low CTR/engagement rate of its own, which meant the funnel was breaking between the ad and the page, not in the ad itself.
Diagnosis
I pulled the funnel data into SQL to break performance down by creative, keyword, and landing page variant rather than looking at blended account-level numbers, and used Power BI to visualize where the drop-off actually concentrated. The pattern was clear: the landing page's messaging and visual treatment didn't match what the ad had promised — classic message-match failure, invisible if you only look at top-line CTR.
The test
I redesigned the landing page to mirror the creative's specific messaging and visual hooks, then ran structured tests across multiple landing page iterations alongside several creative and keyword variants — rather than testing the page in isolation, since which keyword brought the visitor in changed what messaging actually landed. Each combination was tracked separately in SQL so the winning pairings were unambiguous, not diluted into an averaged result.
The result
Landing page conversion rate went from around 20% to close to 79% once the page's messaging and visuals were rebuilt to match the winning creative — budget was reallocated away from the combinations the segmented data showed weren't converting, toward the ones that were.
CASE STUDY 3 — LIVE, VERIFIABLE
Building an AI agent that diagnoses ad campaigns
The problem
Every week, someone managing paid campaigns has to manually scan performance data and spot what's actually wrong — creative fatigue, audience overlap, wasted spend on underperforming segments. It's a repetitive, analytical task that doesn't require a human doing it by hand every single time.
What I built
- —Prototyped the diagnosis logic first in n8n — a workflow that pulls campaign data from Google Sheets, formats it, sends it to Claude with a structured prompt, and returns a plain-language diagnosis with specific recommended actions.
- —Rebuilt it as a full web application: a normalizer that accepts both Google Ads and Meta Ads export formats regardless of column naming differences, live charts, and a follow-up chat agent — scoped specifically to campaign strategy questions — that can pull in current best practices via real-time web search when a question needs it.
- —Deployed it end-to-end: Next.js on Vercel, a server-side API route so the AI provider key is never exposed to the browser, and a custom domain.
The result
A working tool, not a mockup — upload a real campaign export and it diagnoses it live, in front of you. This is the actual product this entire site is built to prove I can build: agents that automate the analytical parts of running paid media.
Try it yourself — upload a real campaign export