LeakyButton Your visit 0 presses $0.000 Sign in Start free

Go on, press it. It's a real request with no limit. It just doesn't call a model, so it's free.

Your AI wrote the button. It forgot the limit.

LeakyButton watches every click and request on your site, catches the buttons quietly running up your AI bill, and hands you the fix. One script tag, no backend changes.

Free for one site. No card. Built for apps made with Cursor, Lovable, Bolt, v0 and friends.

One impatient visitor is all it takes.

A Regenerate button with no limit sends a paid model call on every press. Most AI-built apps ship exactly that, because the code works and nobody asked for a limit. Put in your own numbers.

This is arithmetic, not a statistic: presses, times price, times visitors, times days.

What one call costs you
A day$4.80
A month$144

Your turn. Press it as often as you like.

Same button, same endpoint, no limit. LeakyButton's script is on this page, so everything you do is recorded exactly the way it would be on your site.

What LeakyButton recorded session ...
Presses0
Seconds0
On a real model$0.000
The detector flags it at 10 presses with nothing refusing
  1. Nothing yet. Press the button.

Then it tells you what happened, in plain words.

Every report starts from counted numbers: sessions, presses, calls, cost. A language model only writes the sentences around them, and it's told to use nothing else. Here's the one for your visit so far.

On your site you get one of these daily or weekly, and on demand.

Report

Your visit hasn't been written up yet. Press the button above a few times, then ask for the report.

Fix it before lunch.

Every leak comes with two fixes. A guard LeakyButton switches on inside your visitors' browsers right now, no deploy. And the real limit your server should have, written as a prompt for your coding assistant.

The fix is off. Press away.

Paste into Cursor, Claude Code, Copilot, Lovable or Bolt
In my web app, the "Regenerate" button on /editor calls POST /api/rewrite. One visitor pressed it 412 times in a single session and the server never refused a request, so every press costs us an AI call.

Please:
1. Disable the button while a request is in flight and add a 3 second cooldown after it completes.
2. Add a server-side rate limit on POST /api/rewrite: 20 requests per 10 minutes per signed-in user, and per IP for guests. Return HTTP 429 with a Retry-After header.
3. When the client gets a 429, show "You're going a bit fast. Try again in a moment." instead of an error.

Keep everything else the same and show me the diff.

Written from the leak's own numbers: the button, the page, the endpoint and how far it was pushed. Or connect your assistant over MCP and it reads the leaks itself.

Buttons are where it starts.

The script sees every click and every request it causes, so it knows which press sent what, how often, and what came back. Every minute, a detector checks for these, and each one comes with its fix.

  • Uncapped buttonsPressed again and again, and the server never says no.
  • Your AI key in the pageThe browser calls OpenAI, Anthropic or Gemini directly, so anyone can copy the key.
  • Retry loopsA failure followed by the same call, over and over, a few hundred milliseconds apart.
  • Calls nobody clicked forA polling timer, or an effect that re-runs on every render.
  • Paid twiceThe same prompt sent again and answered again, when a cache would do.
  • Double sendsOne press, two identical requests, because the button doesn't lock.
  • Abandoned streamsVisitors press Stop or Regenerate halfway, and the model keeps writing on your bill.
  • AutomationHeadless browsers and scripted clicks spending on your AI features.
  • Spend spikesThis hour against your usual week.
  • Heavy sessionsA handful of visitors carrying most of the cost.
  • Endpoints that never refuseHundreds of calls a day and not one 429.
  • Failing paid callsTimeouts on model calls that still get billed.

No script yet? Run a button scan.

Verify you own the site and a sandboxed browser visits it, presses each AI button like an impatient visitor, and reports which ones never push back. It skips anything that looks like pay, delete or sign out.

Let your coding assistant fix them.

Connect Claude Code, Cursor or any MCP client. It lists your leaks, reads the fix for each, makes the change and marks it fixed. Your AI wrote the leak; now it can close it.

Hear about it where you are.

Email, Slack, Discord, Telegram or any webhook, when something new leaks or spend jumps. Plus a daily or weekly report written in plain words.

One line in your footer.

Paste it before </body>, or into your framework's layout. It works on plain HTML, Next.js, React, Vue, WordPress, Webflow and Framer.

<script src="https://leakybutton.com/c.js" data-site="lb_your_key" defer></script>
  • About 5 KB gzipped, loads after your page
  • No cookies, and nothing anyone types is ever read
  • Request bodies stay on the page; only a fingerprint leaves
  • Read the whole script

Start free. Pay when it's saving you money.

Free

$0

  • 1 site
  • 25,000 events a month
  • 3 days of history
  • Leak detection every minute
  • Weekly AI report
  • 2 button scans a month
  • Email and webhook alerts
Start free

Pro

$19 a month

  • 5 sites
  • 500,000 events a month
  • 30 days of history
  • Daily AI reports
  • 30 button scans, 10 pages each
  • 25 guards per site
  • Telegram, Slack and Discord
  • API and MCP for your coding assistant
Start with Pro

Team

$49 a month

  • 20 sites
  • 3 million events a month
  • 90 days of history
  • 150 button scans
  • 200 guards per site
  • Everything in Pro
Start with Team

Short answers

Will it slow my site down?

No. The script is small, loads after your page, and sends events in batches every few seconds, or when the tab closes. It doesn't wait for anything.

Does it see what people type?

No. It records which button was pressed (by its label), which request that sent, the status and the timing. Request bodies stay on the page; only an 8-character fingerprint leaves, so it can tell when the same prompt was sent twice. No cookies, and IP addresses are only kept as a daily-salted hash for spotting bots.

Can it stop someone attacking my API?

Partly, and we'd rather be clear about which part. A guard stops honest over-clicking and runaway loops on your own pages, straight away. Someone calling your API directly with a script never loads your page, so they need a real limit on your server. Every leak's fix includes that server code, and the button scan shows which endpoints have none.

Where do the dollar amounts come from?

By default from a price per call you set (per site, or per endpoint), so they're estimates. For real numbers, your server can report each model call's cost with one request, and LeakyButton ties it to the browser session that caused it.

Do I have to change my backend?

No. The script tag is enough to find leaks. The cost reporting and the server-side fixes are optional, and the fix prompts write them for you.

Is it only for AI calls?

AI is where unlimited buttons hurt most, so that's where the cost math points. It sees every request, so a hammered SMS, maps or search endpoint shows up too.

LeakyButton receipt

Your visit

session ...

Pages viewed
1
Clicks
0
Presses on the leaky button
0
Stopped by the fix
0
On a real model, about
$0.000
What it cost you
$0.00