Clearmarks
● Contribution margin, per campaign, after every cost

Your platforms are billing you for revenue that never arrived.

Meta and Google each report the revenue they believe they caused. Neither hears about the refund three weeks later. Neither knows what the goods cost. Clearmarks reconciles what they claim against what actually came in — every night, per campaign, to the cent.

Request a reconciliation

Read-only. Nothing you are running is touched. The reconciliation is yours whether or not you go further.

Or start with the inbox you already have
One brand · one fortnight · every cost applied in order Harbour & Vine
Their dashboards reported $564,700. The business kept $103,400 — 18% of what they claimed.
Real output from the Harbour & Vine demonstration tenant, generated nightly on this system. Every figure is a query against its data. Never a language model.
Now yours

Put your own numbers in. Watch the return you report fall apart.

This is arithmetic on the figures you type, not a measurement of your business — that needs your data, and it is exactly what we do in week one. But the shape is the shape, and most operators have never once seen it drawn.

Monthly ad spend$200,000
Reported ROAS4.2×
Cost of goods55%
Refund rate3%
Platform overclaim12%

Overclaim is the share of revenue your platforms report that never arrived — double-counted between networks, cancelled, or simply never real. Nobody can tell you your own figure without reading your data.

Your figures, same arithmetic Per month
You report a 4.2× return. The real one is 1.6× — and you keep $110,464 a month.
What arrives

One email each morning, before you open the ad accounts.

Not another dashboard to log into and interpret. The reconciliation runs overnight and the answer is already waiting — short enough to read standing up, and specific enough to act on before the day starts.

Profit per campaign, not return per campaign

Refunds, the cost of the goods and the fees sit in the same row as the spend, so each campaign carries its own costs rather than the account average. For a lead business the same line reads cost per qualified lead. The campaigns losing money are rarely the ones with the worst reported return, which is the whole reason this is worth reading.

A proposal you approve, or do not

Where something needs doing it arrives written out: the exact change, what it is expected to be worth, and what it could break. It acts only on what you have approved, inside limits you set, and nothing at all happens above the rung you have set for that department.

And where it is not sure, it says so in the email rather than rounding it away. No cost source, and the bottom line is called a gross contribution rather than a margin — and goes on being called that until it knows.

The platform

Advertising is where it starts. It is not what it is.

Underneath the marketing report is a control plane that does not know or care which department an action belongs to. It knows what the action is worth, what it could break, who is allowed to approve it, and whether it has earned the right to run on its own. Thirty-nine actions across five departments are governed by it today — fourteen of them can never run automatically at any setting.

Reading in production today Adapter built, waiting on a client that needs it Governed and specified. The adapter gets built when somebody is paying for it.

Why the last column is honest rather than embarrassing

We do not ship speculative integrations. An adapter written before a real client has described their real system is a guess, and a guess in this product is the one thing that cannot be allowed — the entire argument is that our figures can be checked. The policy, the limits, the approvals and the audit for those departments already exist. What is missing is a fortnight of work against a system we can see.

What that means for a company buying this

You are not buying a marketing dashboard that might one day grow. You are buying the control plane, and switching departments on as you need them — each with the same five rungs, the same spending ceilings, the same audit trail, and the same refusal to state a figure it cannot source. Marketing is simply the department where the money being lost is easiest to prove first.

The machine

Seven stages, every night, per client, in their own database.

Not a dashboard over an API. A pipeline that pulls from every system you run, agrees them against each other, and refuses to publish a figure it cannot stand behind.

It refuses more often than it reports

With no cost source it calls the bottom line a gross contribution, not a margin, and goes on calling it that until it knows. It names the days a platform failed to return data instead of drawing a dip that never happened. If your shop knows the cost of some products and not others, it reports no cost at all rather than a flattering one. A number you cannot check is worth less than no number.

Every figure can be taken apart

Click any amount in the product and it tells you where it came from. Not a citation — the actual query, the rows it touched, the moment it ran, and whether the period is still open.

$528,500  revenue, last 14 days
└─ shopify.orders  1,204 rows · 14 days
  ├─ less shopify.refunds  −$14,600
  ├─ currency  USD, no conversion applied
  ├─ computed  SQL, 03:14 local
  └─ still open?  yes — 2 days inside the refund window

Week one is a reconciliation, not an onboarding

You enter your own figures — as they stand in your systems, not corrected to match — and we put them beside ours and name the cause of every difference. They never agree on the first run. Most businesses discover their own reporting disagrees with itself. Anything we cannot explain is marked unexplained and left for a person.

What happens while you are asleep

One run per client per night, in their own database, with every stage recorded. If a stage fails, the report says which one — it does not quietly publish a smaller number.

03:00  pull  7 sources · read-only tokens
03:06  reconcile  claimed vs received, per day
03:11  allocate  goods and refunds onto campaigns
03:14  detect  14 thresholds
03:15  2 findings · 1 caveat held back
03:16  write  report + audit rows
07:00  one email, and nothing touched
Fourteen detectors

Every one is a threshold, not an opinion.

No feed of charts to interpret. Each detector is a stated condition; when it fires it says what it found, what it is worth in money, and what it is still unsure about.

What lands each morning

One page. It disagrees with your ad accounts, and shows its working.

The campaigns losing money are rarely the ones with the worst ROAS. Harbour & Vine's expansion campaign returns 2.02× — respectable, and exactly what a media buyer optimises towards. It is the only one of their four that costs them money to run, and that only appears once product cost sits in the same row as spend.

No ad platform holds that figure. It is the reason this product exists.

What it found · last 14 days Harbour & Vine
$528,500Revenue
$119,100Ad spend
$103,400Contribution
HighLookalike 3% | Expansion Returns 2.02× on the platform. Costs $5,470 to run once goods and refunds sit in the same row as the spend.
−$5,470
MediumPlatforms claim more than arrived They report $564,700 produced. $528,500 came in — 6.4% of what they claim never existed.
−$36,200
Cost of goods, from the shop Allocated across campaigns at the company rate, and every row says that it was.
55.1%
Each figure is a query against this tenant's own data — never a language model.
Control

It earns the right to act, one action at a time.

Every competitor gives you an automation switch and a warning. This has five rungs, set per department, and you are the one who moves between them. Nothing skips a rung.

01MapStill mapping your business. Nothing is connected.
02ObserveReads your data. Cannot write anything — there is no code path that could.
03RecommendTells you what to fix and prepares the reasoning. Still writes nothing.
04ApprovePrepares the exact change with its expected effect. Nothing happens until you click.
05AutomateOnly actions you have approved often enough to trust run on their own — inside a spending ceiling and a daily count you set, for that one action. Everything else still asks, and you revoke it in a click.

Some actions are never automatic at any rung. A permission granted below “automate” is stored and cannot fire.

How it is built

The parts that are hard to copy.

Isolation
A separate database per client. Not a tenant column with a filter on it. There is no query that could return another company's row.
Access
Read-only, narrowest scope. Ad platforms use their own sign-in, so no password reaches us. Revoke at the provider, any moment, without asking us.
The figures
No language model touches a number. Every amount is SQL against that client's own data. Models write sentences; they never compute money.
Provenance
Every figure names the source it came from, the period it covers, and whether that period can still move.
Audit
Every proposal, approval, grant and write is recorded with who, when and on what evidence.
What it connects

Your stack, at the narrowest access that answers the question.

Google Ads Shopify Meta Ads Stripe HubSpot Everflow CSV

● Approved and reading in production today. The rest are built and connect on request.

Built around your business, not your category

The pipeline is the product; the last mile is yours. A network running offers and publishers has never run a campaign, and their report should not be headed with somebody else's word for their own business. We model what you actually sell, how you actually get paid, and what your costs actually are — then the same machine runs it every night.

Most systems put every customer in one database and add a company column to every table. One missing WHERE clause in one query is then a breach of every account at once. This has no such query to get wrong — and it is why deleting a client is a dropped database rather than a hopeful sweep.

● Support · a forwarding rule, and a day

The fastest way in is the inbox you already have.

Nothing to connect and nobody to approve it. Every message your customers send gets read, sorted and answered — as a draft, in your own inbox, threaded under the person who wrote in. You read it, change anything you want, and press send.

Book fifteen minutes

Drafts only. Nothing reaches a customer until a person presses send, and we only ever reply to people who wrote to you first.

One customer email · the reply it produced Support department
Ada Lovelace — “Order #1183 still not here”
“I ordered on the 23rd and the tracking hasn’t moved for nine days. Order #1183. Is it lost? I need it for a birthday at the weekend.”
the reply, waiting in your inbox
Hi Ada,

Thanks for your patience, and sorry for the worry this has caused. I’m looking into order #1183 now and will get back to you as soon as I have an update.

Thanks,
Written from her message only — no order confirmed
Real output from this system, generated from the message above. It names what it could not settle, and refuses rather than invent.

Start with the inbox you already have.

One forwarding rule, and by tomorrow morning the replies to your customers are drafted and waiting in it — threaded under the person who wrote in, for you to read, change and send.

Fifteen minutes, no commitment. Or write to hello@clearmarks.co