First-party ad attribution

Know which ads make money.

Open Attrib records every ad click on your own domain, joins it to the person who actually bought, and splits the credit five ways. Every model, every click and every sale is yours to see — book a demo and we will walk the whole pipeline on your accounts.

First-party tracking on your own domain Five attribution models, side by side Server-side send-back to Meta, Google and TikTok
Campaign P&Lyour dashboard
CampaignSpendRevenueROAS
Brand1,200 9,4007.8×
Prospecting4,800 5,1001.1×
Retargeting900 3000.3×

One sale, five models — credit each

first
last
linear
time decay
position
An example from the P&L page: spend, revenue and ROAS per campaign, per model. The join is anchored on spend, so a campaign that cost money and returned nothing shows up as a zero-return row instead of quietly not showing up.
5models on every conversion
7-dayhalf-life, time-decay model
40 / 40position model: first and last
30-minuteleased number per visitor
8send tries, doubling backoff
0.85fingerprint merge floor
What it does

Three jobs, one pipeline.

Every attribution tool promises the same three things. Here is what each one means in this one, in plain words.

Records the click

One script tag, about 3 KB gzipped. It reads the click ID the ad platform appended, the UTMs and the referrer, and posts them to Open Attrib. If Safari clears the visitor cookie after seven days, the email or phone on your purchase still joins the sale to the click.

Recognises the buyer

The email on your purchase form, a phone number, a click ID and a visitor cookie are nodes in one graph; seeing two of them together draws an edge, and the person is whatever connects. A sale on a laptop joins an ad clicked on a phone two weeks earlier.

Pays the right ad

Every conversion is scored by five models — first, last, linear, time decay and position — kept side by side and joined to ad spend per campaign per day. The confirmed sale goes back to Meta, Google and TikTok server-side.

And what does it do?One pipeline, from the click to the attribution
How it works

Run it on your box, one command, one line.

No migration and no tag manager — the install is Docker Compose and the tracking is one script tag. Cloud skips all of it.

Fetch the source

The key in your invoice email is the only thing that ties the tree to you. One curl, one tar, one env file — the install call is already in the calendar.

Run it on your box

Five lines, one of them a text editor. Postgres, migrations, the API, the worker and TLS come up together; the only three values to fill in are a database password, the tracker's domain and an address for the certificate.

Paste one line

The setup page at /app generates the script tag and the webhook URLs. Point Stripe or WooCommerce at the webhook and revenue starts landing against campaigns — usually the same afternoon.

curl -o openattrib-src.tar.gz "https://app.2-25-162-33.nip.io/openattrib-src.tar.gz?key=YOUR-ACCESS-KEY"
mkdir openattrib && tar -xzf openattrib-src.tar.gz -C openattrib
cd openattrib
cp env.example .env && $EDITOR .env
docker compose up -d

Every one of those steps is repeatable on your own box, which is the whole reason to own it: the pipeline end to end.

What you get

What the pipeline covers.

The tracker, the identity graph, all five attribution models, the send ledger and the P&L dashboard — the whole pipeline, not a subset.

The full source

Every layer: the tracker, the ingest API, the identity graph, all five attribution models, the send ledger and the P&L dashboard. Not a subset and not an obfuscated build — the same tree this site runs on.

A deployment of your own

Your own domains, as many projects and clients as you have. No seat count and no per-event bill.

Install help, included

We walk your install with you on a call: DNS, TLS, Postgres and the tracker on your own subdomain, until a real conversion is attributed to a real click.

Your ad platforms, connected

Meta CAPI, Google Ads and TikTok Events, with your own credentials and verified end to end — server-side, hashed, one ledger row per send.

Updates as they ship

Every fix and improvement, by email. Four npm dependencies and no front-end build mean applying them is a pull and a rebuild.

Your data, on your box

The instance is yours the moment it comes up. No telemetry, no check-in service, and nothing that stops working if this site does not exist tomorrow.

1instance, unlimited projects — and the install is done with you, not documented at you.
Why it works

Why the ad platforms’ own dashboards cannot answer this.

Each platform dashboards only its own clicks, and each one counts a sale it touched as a sale it caused. Add the dashboards up and you have more revenue than you banked.

One sale, counted once

Meta, Google and TikTok each claim the same order. The identity graph resolves their three clicks to one person, and the models split exactly one unit of credit — never 1.6 because three platforms all won.

The browser stopped being a witness

Blockers, closed tabs, phone orders, a purchase that finishes in another app. Conversions here arrive server-side — a signed Stripe or WooCommerce webhook, or your own POST — so the sale is recorded whether or not a pixel ever fired.

Bidding is only as good as its feedback

You do not buy clicks any more, you buy an algorithm’s guess, and it learns from the conversions you send back. Send deduplicated, server-confirmed sales with the right click ID attached and it optimises for revenue instead of for whatever the pixel caught.

The long sale is the one everyone loses

History lives in Postgres, not in a browser. The lookback window is set per project and 0 means forever, so a conversion nine months after the first click still finds the click that started it.

Your data, not a shared pool

Emails and phones are SHA-256 before they are stored, IP truncation is a per-project switch, and one call exports or erases a person. There is no shared network and no pooled data set: no account sees another’s data, and a self-hosted copy never phones home.

Your data, queryable

History is plain Postgres tables you query yourself, with the full source in your hands when you self-host. No shared pool and no lock-in.

1.0of credit per conversion, per model — never 1.6 because three platforms all claimed it. That single difference is what makes a scale-or-cut decision safe to act on.
Your turn

See how it works for your business model.

Book Demo

See it on your own numbers.

A walkthrough on your accounts: the click, the sale, the five models and the send-back to Meta, Google and TikTok. No deck and no sales pitch — just the pipeline on your own data.

1 of 3

Book Demo

What is your name and email?

A first name and an email are enough to arrange the demo.

Prefer email? sales@mikee.ai reaches the same person.

Live tracking