Every account. Every day.
Each morning Adspenta pulls the last 30 days from every connected Meta and Google account: campaigns, budgets, delivery, spend, cost per result, creative performance.
6 accounts · 41 campaigns · read at 09:12
Ad account management software for agencies. It reads every connected Meta and Google account each day, flags what is drifting, and proposes the fix with the evidence — then executes only what your team approves. Every change is logged and reversible.
Approval-gated Dry-run mode Full audit ledger Row-level tenant isolation
A working demonstration of the Today screen. Six client accounts were read this morning and one is flagged. A proposal to reduce a daily budget from 120.00 to 96.00 is waiting. The Approve and Take back buttons below work: pressing Approve opens the five-minute take-back window, pressing Take back returns the card to a proposal.
Because pacing is 18% over plan with 11 days left. Holding this budget spends the month out on 24 September.
The loop
The five steps a good media buyer runs each morning, run every morning on every client account, and written down. The long version is on how it works.
Each morning Adspenta pulls the last 30 days from every connected Meta and Google account: campaigns, budgets, delivery, spend, cost per result, creative performance.
6 accounts · 41 campaigns · read at 09:12
Deterministic detectors compare what is happening to what was planned. Pacing above its band, cost per result drifting, creative fatiguing, a budget that will not spend, a learning phase reset.
Northwind Dental · Winter Prospecting · pacing above band since Tuesday
A finding becomes a proposal card: the exact change, the numbers before and after, the evidence it was drawn from, and how much of the account it touches. Nothing is hidden behind a score.
Reduce daily budget 120.00 → 96.00 · blast radius 12%
Reduce daily budget
A person approves, or does not. After a yes there is a five-minute window in which one click puts the old value back, before anything is written to the platform.
Approve, or take it back. Five minutes, your call.
The change is written, then read back from the platform to confirm it landed. The result goes into an append-only ledger: approved, executed, verified, by whom, at what second.
Nobody can edit this. Not even us.
What it catches
Five detectors, each written as a rule you can read. Each one shows the same evidence it would put in front of a buyer. This is Google Ads and Meta ads monitoring that names the problem instead of colouring a cell red.
Spend is running ahead of the plan with days still to go, so the budget runs out before the month does. Budget pacing is the check most agencies want running first.
The same people are seeing the same ad too often, and the click-through rate has been falling for long enough that it is not noise.
Cost per result has moved outside its normal range for this account, compared against its own recent history rather than a made-up benchmark.
The money that was meant to go out did not. Usually a delivery problem, a narrow audience, or a disapproved ad. It costs the client the same as overspending.
An edit sent an ad set back into learning, so recent numbers cannot be trusted yet and further edits will make it worse.
It does not write your creative, pick your offers, or decide your strategy. It watches the operational surface: budgets, delivery, pacing, structure. The judgement stays where it belongs.
Why another tool
Three problems an agency ad management platform is supposed to solve, and usually does not.
The problem
Written down from what buyers say about the tools that exist.
What Adspenta does
Read everything, propose specifics, execute only what is approved.
PPC automation with approval, rather than automation you hope you configured correctly.
How it decides
The part that touches money is ordinary, testable code. The language model is kept on the other side of that line, where the worst it can do is write a bad sentence.
Deterministic
Written as rules, covered by tests, identical every time it runs.
Language model
It reads the same numbers you can see, and writes.
It never executes a change, never moves a budget, and never approves anything on your behalf.
Safety, made visible
Built in dry-run first. Live is a switch you flip, per account, on purpose. The panel below works: flip the switches, drag the guardrails, press halt, and read what would happen underneath.
Lock 1
Dry run computes and logs the change without sending it. Every platform starts here.
Live writes reach Meta today. Google is connected read only until that work ships.
Lock 2
Even on a live platform, each account stays read-only until someone turns it on.
Lock 3
Limits on how much one approval can move, how often, and how many times a day.
Lock 4
One button stops every pending and future write across every account, immediately. It stays stopped until a person turns it back on.
Try a proposal
What would happen
ExecutesMove a switch or a slider.
Nothing here touches a real ad account. The order of checks is the product's own: halt first, then the guardrails, then platform mode, then the account's own switch.
The ledger
Append-only. Each entry carries the second it happened, who approved it, what changed, and whether the platform confirmed it.
Nobody can edit this. Not even us.
Ask it anything
The chat reads the same numbers you can see and explains them. When it thinks something should change, it raises a proposal card and stops.
Because pacing is 18% over plan with 11 days left.
It can answer. It cannot act. Approval is the only path to a change.
For agencies
Your clients' data is invisible to your other clients, and to us. How the separation is enforced is written out on the security page.
Every account you run, in one list, with the ones that need a decision at the top. Adding a client is connecting an account, not a migration.
Give a client a login that shows their account and nothing else. Read-only: they can see the findings, the changes and the reports, and they cannot approve.
What changed, why, and what it did, in sentences rather than a dashboard export. Generated automatically, sent by a person after they have read it.
Support staff at Adspenta have no route to the campaign data in your tenant. Where an operator can reach anything at all, the access is logged and shown to you.
Proof
Structural proof, checkable today. Names and numbers from clients will go here when there are clients to name.
Not mocks. The test suite runs the real schema, including the tenant-isolation rules, on every change.
Two rounds by people who do not work for us. What they found, and what we did about it, is in the changelog.
Operator access to a tenant is recorded in the same append-only log as everything else, and is visible to the tenant.
Built in the open. The changelog of what shipped and when is dated and honest, including the rounds where the audit found something.
Pricing
Two packages and an enterprise option, in euro. You pay for the client accounts you connect. Nothing about the safety machinery is metered.
A small agency, or a first portfolio on the system.
A team running a portfolio of client accounts across both platforms.
Larger portfolios, procurement, and agencies who need their own instance.
The first five agencies get 50% off for six months, in exchange for a monthly feedback call. That is the whole offer.
Pay for a year and two months are free, refundable pro rata within 14 days of the first payment. Monthly stays monthly, with no notice period.
One message to the assistant, or one generated client update. Reads, findings, proposals and executions are unlimited on every plan.
Live writes reach Meta today. Google is connected read only until that work ships, and it is dry run for everyone until then. Full detail on the pricing page for agency ad management.
Questions
Short answers. Where the answer is "not yet", it says so.
Yes for reading and proposing. Adspenta reads Meta and Google Ads accounts every day through the official APIs, runs the same detectors on both, and raises proposals for both.
Writing back is where they differ today. Live writes reach Meta. Google is connected read only while the write path is finished, so a Google proposal is computed, approved and logged rather than sent. The changelog will carry the date Google live writes are released.
No. There is no code path that changes an ad account without a recorded approval naming a person and the second they gave it. Adspenta proposes a specific change with the evidence behind it, and waits.
After a yes, a five-minute take-back window opens and one click restores the old value. Nothing has reached the platform during those five minutes.
Rule-based tools do what you configured. You write a condition, it fires, it acts. That works well for the cases you already thought of, and it is silent on the ones you did not.
Adspenta runs its detectors against every account's own recent history, so a problem gets raised whether or not you wrote a rule for it, and it stops at a proposal rather than acting. You get the reasoning and the numbers on the card, then you decide. It is PPC automation with approval rather than automation that runs while you are asleep.
15 on Studio, 50 on Agency, custom above that. A connected account is one ad account on one platform, so a client running both Meta and Google is two.
Pricing is per agency per month, on the number of connected accounts. It is not a percentage of ad spend, and it does not change when a client's budget does.
Both, daily. Pacing over plan compares spend against the month's plan with the days left. Creative fatigue watches frequency, click-through and days running together, so a single noisy day does not trigger it.
Three more detectors run alongside them: cost per result drifting outside the account's own range, budgets that will not spend, and learning-phase resets. Each one shows the evidence rows it fired on.
Yes. A client-scoped viewer login shows one account and nothing else. It is read-only: findings, changes and reports are visible, and approval is not available to it.
The separation is enforced in the database by row-level security rather than in application code, so a query that fails to scope itself returns nothing. The security page explains it in full.
Connect one account in dry run and watch it work for a week before anything is live.