I build the systems performance marketing runs on: measurement, automation and AI, working as one.
Your visit is running through a miniature of one right now. Four sides of me bid for your attention, and the winner decides what you read first.
Since September 2023 my job has been the machinery around media: the systems that move data, buy, report and decide,
so that people spend their time on judgement instead of exports.
Organization-wide automation, well beyond campaign scope, on APIs and Python.
End-to-end campaign reporting pipelines, and the data integrity behind them, across global accounts.
Bringing global ad tech tools to the local market, and advising on vendor selection and architecture.
seat · builder
I write the software I use.
Not a spec handed to a dev team. Data model, backend, interface, deployment: I build applications end to end, myself.
This page is an example. The auction you just watched runs in your tab, and the site is served by a single
Cloudflare Worker, with no framework, no cookies and no pixels. View source; the bidding logic is readable.
TypeScript
Python
Cloudflare Workers
D1
BigQuery
LLM APIs
seat · performance
Ten years in performance marketing.
I learned media from the buying side: budgets, ROAS targets, platforms that each report their own version of the truth.
From 2019 to 2023 I led the teams that do it; today I build the systems they run on.
Media mix modeling and yearly budget allocation against strict ROAS targets.
A performance marketing team set up across Google, Meta, TikTok, Criteo and RTB House.
Every platform reports in its own language. I build the layer that makes them agree: signal captured without loss,
schemas joined into one model, and the result pushed back into the buying platforms.
Server-side tracking, conversion APIs and MMP events.
GTM, GA4 and pixel architecture, set up so it can be audited.
Pipelines in BigQuery and Python that normalize fragmented media data.
Google Ads API
Meta Marketing API
DV360
GTM
GA4
BigQuery
Bid request · your visit
OpenRTB-ish
{
"site": { "domain": "arif.media" },
"device": "filled in by your browser",
"user": "filled in by your browser",
"tmax": 120
}
Built from what your browser already tells every page. None of it leaves this tab.
Thesis
Brands don't buy tools. They buy the result.
Dashboards, platforms and seats are the means. What a brand wants is the number moving the right way, and someone accountable for it.
Performance marketing is turning into service that runs on software: the machinery stays behind the work, and the result is what gets delivered.
Getting there takes four things, and each one has been my job at some point in the last ten years.
01
Measure first.
If the signal is wrong, every optimization built on it is wrong. Tracking comes before targeting.
Behind it Server-side tracking, conversion APIs and MMP events at Mindshare. GTM, GA4 and pixel architecture at Sempeak.
02
Automate the operation.
Reporting, data integrity and routine checks run on their own, so people spend their time on decisions.
Behind it Organization-wide automation on APIs and Python, and end-to-end campaign reporting pipelines across global accounts.
03
Spend against outcomes.
Budgets follow what each channel returns, not what it returned last year.
Behind it Media mix modeling and yearly budget allocation against strict ROAS targets at Mindshare, where I set up the performance marketing team across Google, Meta, TikTok, Criteo and RTB House.
04
Build what's missing.
When the right tool does not exist, I write it. The client never has to learn it.
Behind it Applications built end to end: data model, backend, interface, deployment. This page is one of them.
synthetic data with a known answer · computed in your browser
Most of what moves the number isn't the campaign.
Before a channel gets credit, the calendar comes out, carry-over and saturation go in, and two questions get asked:
what would have happened anyway, and could this be chance? Each method below runs on synthetic data where the true
answer is known, so you can see how close it gets.
01 · seasonality
Take out the calendar first.
Sales rise in Q4 whether you advertise or not. The model fits trend and seasonality alongside media, so a December spike is not credited to whatever campaign happened to run in December.
02 · adstock
Spend keeps working after it stops.
A video burst sells for weeks; a search click mostly converts the same week. Each channel's carry-over is estimated from the data, not assumed, and the legend shows it next to the true value.
03 · sufficient level
Every channel has a sufficient level.
Past a point, the next ₺1K buys less than it costs. Response curves show where each channel stands today, and where its marginal return falls below break-even.
04 · cannibalization
Not every paid click is new.
Brand search ads collect clicks that would have come through organic results anyway. Switching them on and off in alternating four-week blocks shows how many are truly incremental.
05 · media mix model
Then, and only then, credit.
Media mix modeling splits every week into baseline and channel contributions. Where spend moved, the estimate lands close to the truth. Display ran flat all year, so the model cannot tell it apart from the baseline: that is a channel to test, not to trust.
06 · causality
Real, or chance?
A brand campaign ran in one city only, and brand search went up there. Synthetic control builds that city's counterfactual, what would have happened without the campaign, from 24 other cities. Running the same test on every city that never saw the campaign shows how large an effect chance alone produces.
Career
WPP Media Türkiye
Ad Tech & Automation Director
Organization-wide automation on APIs and Python. End-to-end campaign reporting pipelines across global accounts. Global ad tech tools brought to the local market, with advice on vendor selection and architecture.
Mindshare
Performance Marketing Director
Media mix modeling and yearly budget allocation against strict ROAS targets. Server-side tracking, conversion APIs and MMP events.
Sempeak
Performance Marketing Team Lead
Digital marketing plans and budgets for a diverse client portfolio, and the team behind them. GTM, GA4 and conversion pixel implementation.
Stack Python · BigQuery · Google Ads API · Meta Marketing API · GTM · GA4 · DV360 · Server-side tracking · TypeScript · Cloudflare Workers
How it works · real auction mechanics, computed in this tab
ingestparse the request
enrichbuild the feature vector
predictpCTR per bidder
shadefirst-price bid shading
pacebudget pacing
floordynamic reserve
clearfirst price wins
renderDCO bandit
automaterules engine
Features → pCTR
Each bidder is a logistic regression over twelve features of your request. The priors are mine. Your attention
trains them: a viewable impression you read is a positive label, one you skip is a negative. Online SGD, in this tab.
Bid shading
The auction is first price, so bidding your value overpays. Each bidder fits a lognormal to the prices it had to beat
and bids where expected surplus, (value − bid) × P(win), peaks.
Pacing and floor
A PI controller spreads each bidder's budget across a twelve-auction flight. Spend ahead of plan lowers its multiplier;
behind plan raises it. The reserve price follows recent clearing prices.
Automations
Rules that watch the exchange and change it. Nobody touches a setting by hand.