Price
argues from numbers
Cost per cup against the café you were going to walk into anyway. The argument is arithmetic, and the buyer can check it.
The expensive call is when to stop
Prava sandbox, no real money movesGive it a product and it writes four ads, tests them against traffic, and only acts when the data is clear. Most tools stop at making the ads. This one learns which one works, tells you which to switch off and when, and pays for the next round itself inside a mandate you signed once with a passkey.
No form, one sentence
Write it the way you would say it. It reads the product, the price and the line about it out of that sentence, then runs the whole thing without another click.
The first question everyone asks
You never hand the agent a card, and it never sees a card number. You sign one permission with your passkey, the same fingerprint or face you unlock your phone with, and that permission carries three things: the most it can charge, the one shop it is allowed to charge at, and the day it expires.
Then, every time it buys, Visa mints a card on the spot that works once, for that one amount, at that one shop. If the agent asks for more than you signed for, the network refuses the charge and nothing moves. Further down this page you can read that refusal in Visa's own words. One tap revokes the permission and the agent has nothing left to charge.
Name, price, one line about it.
What makes it different
A generator hands you four files and leaves you the expensive part, which one you should stop paying for and when that answer can be trusted. That is the part banditd does, and it publishes how often it gets that call wrong.
You still have to guess which one is working, how long to wait before calling it, and how much of the budget it has already eaten while you waited.
It reads the traffic, holds the call until the evidence clears four gates, names the ad that lost, and pays for the next round of work itself.
Why you can trust it with money
A gives an agent permission to pay without asking you every time. You approve it once with a passkey and set the limits: how much it can spend, who it is allowed to pay, and when the permission expires. After that every payment follows those rules, and none of them can leave them.
Max spend
A ceiling the card network itself refuses to cross.
Allowed merchant
One listed merchant, and nothing else.
Expiry date
The permission runs out on its own.
Revocable anytime
One tap and the agent has nothing left to charge.
The card number
Never touches the agent. Every charge mints a single use credential that dies with that charge, and the dashboard shows which one was burned on what. There is no stored card for an agent to leak or reuse.
Over the ceiling
The over cap charge is not blocked by our code. It is sent, the card network refuses it, and the decline comes back with a reason a seller can act on. Nothing is spent and the mandate stays live.
The agent asked for $50.00 against a mandate the seller signed at $5.00.
Visa did not return COMPLETED (status DECLINED): Total amount 50.00 exceeds threshold 5.00 in current payment cycle
The agent tried to buy render credits on a mandate the seller signed for Allbirds.
Merchant not allowed for this mandate: Banditd Render Credits
Both of those came back from the Visa network through Prava on this account, and both are reproducible in the dashboard right now. Neither is a message this project writes. The agent sends the charge, the network refuses it, and there is no argument the agent can make that gets past either one.
Who it is for, and what it would cost
Not everyone who runs ads. The one who spends enough that a bad creative is a number they feel, and who has nobody on staff to say when a test has run long enough to act on.
Sells online
One store, one catalog, and paid traffic is the main way it grows. Not an agency, not a brand team.
Spends $10,000 to $250,000 a month on ads
Enough that a losing creative is a number you feel. Below that, testing is cheap enough to guess at.
Has no data team
Nobody on staff can tell you whether a test has run long enough, so the call gets made on a hunch and a dashboard.
Ships new creative every week
The ads that lose cost exactly as much as the ads that win, and you only find out which was which afterwards.
$29a month
3 tests at once, 12 ads under watch
$79a month
15 tests at once, 60 ads
$199a month
60 tests at once, 240 ads
Every tier is the same product. The only thing that moves is how many tests it watches at the same time. One test is one cohort of four ads judged together. We do not charge on your ad spend, because the agent never touches your ad spend.
This is a proposal. banditd has no customers, no revenue and nothing for sale today. Nobody has been charged a cent for it and there is no checkout on this site.
Price it against one week of your own testing, because you know that number and we do not. A seller at the bottom of the range this was built for, ten thousand dollars a month, puts roughly two thousand three hundred into ads in a week. Every test runs four ads and only one of them is the one you keep, so you are paying for the other three the whole time the call is still open. The first tier is about one percent of that week.
We have never run a paid campaign, so we have no figure for what banditd saves a seller, and we are not going to build one out of somebody else's estimate of how much advertising is wasted. What we can put a number on is the mistake. The rule most agents use calls a false winner 44.5% of the time. The four gates call one 2.5% of the time, and the section below shows how that was measured. A false winner is the expensive kind of error, because the seller believes it and scales it. What the subscription buys is the ones that do not get made, and you know better than we do what a scaled loser costs in your account.
How it works
It searches the web to find out who buys this, what rival sellers promise, and whether your price is high or low for what it is. The dashboard lists every page it opened, so you can check what it read.
You can also name the market you actually sell in. Write it in the when you hand the product over, Facebook Marketplace or TikTok Shop for example, and paste the listings you sell against. The research aims there instead of at a market you are not in.
Four angles, four images, four sets of copy. The angle is a fixed choice the model has to fill in, so what comes back is four different arguments and not the same argument written four ways.
One ad argues from numbers, two argue from feeling, one argues from craft. They are named under the chart at the end of this section.
Each ad is an arm on a , and traffic is allocated by , so the ad that is currently ahead earns more of the traffic while it is still proving itself.
Once agree, enough traffic, one ad clearly ahead, a gap worth money, and a result that holds up to repeated looks, it charges more render credits through Prava, with no approval step.
Live allocation
Running
01 Explore
02 Evidence
03 Concentrate
Open any ad to see the copy behind it
“Sixteen cups for $1.75 each”
Written for this illustration, not output from the model.
The price angle does the arithmetic for the buyer, one bottle divided into the cups it actually pours.
Where the money goes
$70.00 of the $100.00 test budget, 70.0%
Starts at 25.0%, settles at 70.0%. CTR 5.3% against 2.4% on Ad D, 2.2 times the clicks, so the agent concentrates spend here.
“You pour two inches over ice and the morning stays quiet”
Written for this illustration, not output from the model.
The ritual angle drops the reader into one exact moment of use, the gesture and its small payoff, no numbers at all.
Where the money goes
$10.00 of the $100.00 test budget, 10.0%
Starts at 25.0%, settles at 10.0%. Ad A outdrew it. The agent does not switch this ad off, it keeps paying for a small slice so a change in the audience still shows up.
“For the friend who leaves before any cafe opens”
Written for this illustration, not output from the model.
The gift angle talks to the giver, it names who the bottle is for and what handing it over solves.
Where the money goes
$10.00 of the $100.00 test budget, 10.0%
Starts at 25.0%, settles at 10.0%. Ad A outdrew it. The agent does not switch this ad off, it keeps paying for a small slice so a change in the audience still shows up.
“Steeped eighteen hours at room temperature, never heated”
Written for this illustration, not output from the model.
The quality angle names one checkable physical detail and lets that detail carry the whole claim.
Where the money goes
$10.00 of the $100.00 test budget, 10.0%
Starts at 25.0%, settles at 10.0%. Ad A outdrew it. The agent does not switch this ad off, it keeps paying for a small slice so a change in the audience still shows up.
Winner share
25.0%+45.0 pts
test budget
$100.00
The four ads in that chart
A, B, C and D are not one ad written four ways. Each one makes a different kind of argument, and the traffic decides which kind your buyers were waiting for. Press an appeal to see what it means.
argues from numbers
Cost per cup against the café you were going to walk into anyway. The argument is arithmetic, and the buyer can check it.
argues from feeling
The morning it belongs to. Sold as a habit the buyer already has, not as a bottle they do not.
argues from feeling
Who you would hand it to, and why it still reads as considered once it has been wrapped.
argues from credibility
What eighteen hours of cold steeping does to a bean that hot water never gets near.
The reasoning, in the open
The chart above shows the money moving. This is the belief underneath it: four guesses that start wide and tighten as traffic arrives. Every charge the agent makes then carries one plain sentence naming the winning ad, the probability behind it, and the traffic it was measured on. Your run writes its own. This is the shape of it.
What it does about it
Traffic share moves to A, 70%, and the other three hold at 10% while they stay in the test. It charges $4.00 for another pack of render credits to make more variants of A.
“Variant A, the price angle, leads with 5.3% CTR against 2.4% for the next best, and it is best with 96.4% probability across 1,840 impressions, so I am buying more render credits to build on it.”
Written in the shape the model returns on a real run. The numbers here are an example, the dashboard shows the sentence and the figures from your own run.
Measured, not claimed
False winners called on two identical ads
44.5%
Probability rule alone
Checked after every batch of traffic, which is what an agent actually does.
2.5%
The four gates
Same ads, same number of looks, same 200 runs against known truth.
A 95% probability of being best is not a 5% chance of being wrong. It is a statement about one look at the data, and an agent that rechecks after every batch of traffic is not taking one look. The add an effect size floor and an anytime valid boundary, and the false alarms collapse. On four identical ads the same comparison runs 8.5% down to 0.0%.
The naive rule stops the moment one ad looks 95% likely to be best. Banditd needs all four gates to clear. Choose a truth the ads do not know about, then watch which rule respects it and what respecting it costs in clicks.
Hidden truth
Ads in the test
0 shown
0 shown
Every ad has the same 3.0% true click rate, so there is no winner to find. Traffic is split evenly and both rules read the exact same numbers.
Stops as soon as P(best) passes 95%
Line marks the 95% bar
Waiting for traffic.
P(best), enough traffic, a gap worth money, and an anytime valid bound
Line marks the 95% bar
Waiting for traffic.
0 of 0 runs
0 of 0 runs
Pick a scenario and run it. Both rules read the same traffic, one look at a time.
Naive rule
Called a winner in 0.0% of runs
Clicks lost per run
0.0
Banditd, four gates
Called a winner in 0.0% of runs
Clicks lost per run
0.0
Run a scenario to price it. Lost clicks are counted against an oracle that knew the winner from the first impression, so lower is better.
The gate protects against declaring a false winner, and that is the error that matters when the spend is automatic and irreversible and the seller then scales the creative. The naive rule decides sooner, and that matters when being wrong is cheap. Both are true at once.
Each run serves 12,000 impressions and is checked 48 times, which is what an agent that rechecks after every batch actually does. Nothing here calls a server, a model or a payment API. Same engine as node scripts/bandit-test.mts.
And when it does fire
99.9%
Correct ad when it fires
Across the 4,500 runs behind the power tables in the README the gates named a false winner five times. Not zero, and the README prints the row where that cost us.
How it was measured
Simulated against known truth, so a false winner is countable rather than arguable. Reproducible with no API keys.
node scripts/bandit-test.mtsWhat is not real yet
The ad circuit is simulated
There is no Meta or Google integration. Impressions and clicks come from a simulator, and every figure it produces is labeled as simulated in the dashboard. The payment circuit is the real half: a signed mandate, an agent initiated charge, and a decline that comes from the card network.
It decides on clicks, not on sales
Click through rate is an imperfect stand in for a purchase. The maths does not care which event it counts, a posterior over purchases works exactly like a posterior over clicks, but the standard of the trade is around 50 conversion events per variant. On conversions the same engine needs a lot more traffic before it will call anything.
The half that is real
The commerce protocol is not simulated. Point the agent at any storefront and it reads the well known profile, asks the store what it sells, and tells you plainly whether that store speaks the protocol at all.
Check a real storeYour turn
The whole run takes a few minutes. You can watch the beliefs narrow and the gates disagree while it happens.
The dashboard keeps the last run in this browser, so you can read one without starting one.