← Archive

August 28, 2026

The $16 tool you can delete

Cloudflare built a browser with no Chrome inside it. Here's the competitor-watcher you can put on top of it in an afternoon.

The Toolkit · No. 22 · Fri Aug 28

The $16 tool you can delete

Cloudflare built a browser with no Chrome inside it. Here's the competitor-watcher you can put on top of it in an afternoon.

Welcome to the Toolkit, the Friday half of The AI Debrief. Tuesday tells you what happened; Friday hands you something to use. (If you missed it, Tuesday's issue was about four betas ending at once, and the one of them that changes your request shape.)

Tuesday ended on a browser tool that reads page structure instead of pixels. That idea is the good one, and you do not need a frontier model bill to try it. This week's tool is the cheapest possible way to get your hands on it.

In this email

» The browser that runs without Chromium, and what that buys

» A daily competitor-pricing watcher you can build in about 40 minutes

» The honest list of what this thing cannot do

🧰 The tool: a browser with no browser in it

Cloudflare Kitesurf

Every headless-browser product you have used works roughly the same way: it starts a real Chromium process per session, and you pay for that process in CPU, memory and money. Kitesurf, which Cloudflare launched on August 6, does not ship Chromium at all. It runs inside V8 isolates on Workers.

CPU

3.8× less

 

Memory

7× less

 

Wall time

1.7× slower

There are three pieces. The Engine is the public-facing part. It speaks Chrome DevTools Protocol, so existing tooling can talk to it, and it holds session state. PageScript spins up a Dynamic Worker per page to handle the DOM and run JavaScript and WASM. PageRenderer does the actual rasterizing using Rust libraries compiled to WASM: Blitz for layout, Firefox's Stylo engine for CSS, Parley for text.

That architecture is the whole story. No per-session Chromium process means the cost curve is different, and Cloudflare publishes the comparison: 3.1× less CPU on screenshots and 3.8× less on HTML extraction, 4.7× less memory on screenshots and 7.0× less on extraction. These are vendor-reported numbers on vendor-chosen workloads, so hold them loosely. But Cloudflare also publishes the tradeoff, which is the part that makes me believe the rest. Kitesurf is 1.7 to 1.8 times slower in wall time. It is cheaper, not faster. For anything on a cron that is a trade you will take every time; for anything a user is waiting on, it is not.

It passes over 235,000 Web Platform Test subtests, which is a real number for a rendering engine written from scratch. There is a public playground if you want to watch it render something before you write any code.

Getting at it is a query parameter. Add ?browser=kitesurf to any Quick Action endpoint and you are on it: /markdown, /content, /screenshot, /pdf, /snapshot, /accessibilityTree, /scrape, /links, /crawl, and /json for AI structured extraction. There is a CDP WebSocket endpoint and an MCP config too.

Cost. Free during beta, behind per-account limits Cloudflare has not published, so treat the free ride as real but unquantified. Underneath, Browser Run billing applies: the Workers free tier gives 10 minutes of browser time a day and 3 concurrent browsers, with /crawl capped at 5 jobs a day across 100 pages each. Workers Paid includes 10 browser-hours a month and then meters at $0.09 an hour, with 10 concurrent browsers included and $2.00 per browser beyond that. Requests that fail on waitForTimeout are not charged.

Who this is not for. No video. No WebGL. It cannot get through TLS-fingerprint bot challenges. It does not hold long-lived authenticated sessions. This is stateless, one-shot work: fetch a page, extract something, leave. If you need to log in and stay logged in, keep using what you have.

Kitesurf docs →

⚡ Steal this: a competitor-pricing watcher, ~40 minutes

What it replaces: a Firecrawl Hobby plan at $16 a month plus a Zapier monitor. What it costs after: nothing, or about $5 if you are already on Workers Paid.

1. Get a token. Cloudflare dashboard, API Tokens, create one with Browser Rendering - Edit. Copy your Account ID while you are there.

2. Smoke-test before writing any code. One curl proves the whole chain works:

curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/markdown?browser=kitesurf' \
  -H 'Authorization: Bearer <TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"url":"https://competitor.com/pricing"}'

3. Scaffold it. npm create cloudflare@latest watcher. Add a KV namespace binding called SEEN and a Cron Trigger of 0 13 * * *, daily at 13:00 UTC.

4. The logic is about fifteen lines. For each URL in a hardcoded array: call /markdown with browser=kitesurf, await env.SEEN.get(url), compare against what came back, put() the new version. If it changed, hand the old and new text to a cheap model with this prompt:

You are a competitive-intel filter. Below are two versions of a page, BEFORE and AFTER. Report ONLY material business changes: price changes, new or removed plans, changed limits or quotas, new features, changed terms. Ignore copy edits, testimonials, blog links, dates, and formatting. If nothing material changed, reply exactly: NO CHANGE. Otherwise reply with up to 5 bullets, each naming the old value and the new value.

5. If the reply is not NO CHANGE, POST it to a Slack webhook. Attach a /screenshot?browser=kitesurf if you want the visual.

Why this one works

The filter prompt is the part that makes this worth building rather than abandoning. A raw diff on a marketing page fires every time somebody swaps a testimonial, and you will mute the channel inside a week. Forcing a model to answer “material or not” and to name the old value and the new value is what turns it from noise into something you actually read.

Why it fits the free tier: twenty pages at roughly two seconds each is about forty seconds a day against a ten-minute daily allowance. You only get 3 concurrent browsers, so loop sequentially or chunk in threes. Do not fire twenty at once and wonder why it fails.

What it saves: a manual competitor sweep you either do badly or skip entirely. Call it 45 minutes a week, plus finding out about a price change on the day rather than the quarter.

📺 Go deeper

The full worker file, the KV setup and the Slack payload are going in the vault, along with a second version that watches changelogs instead of pricing pages.

Get the build →

Free. Same place the rest of the Toolkit builds live.

If you build only one piece of this, build step 2, the single curl. It takes ninety seconds and it tells you whether this whole category is useful to you before you commit an afternoon. Honest worst case: Kitesurf's undisclosed beta limits turn out to be tighter than your use, and you have lost ninety seconds finding out.


That's the Toolkit.

See you Tuesday for the Debrief.

From Drew and The AI Debrief team


P.S. What page would you actually want watched: a competitor's pricing, a supplier's terms, a job board? Hit reply and tell us. We read every one.

P.P.S. New here, or skipped one? Every past edition is in the archive.