URL in. Pixel-perfect PNG out.
One POST boots a managed browser, waits for the page to actually settle, strips the cookie wall, and drops a retina capture on the edge CDN — signed URL included.
LLM-ready render output for agents and developers. Three primitives on one billing meter — half the price of ScreenshotOne, no Puppeteer infra to babysit.
curl https://api.renderkit.tech/v1/screenshot \
-H "x-api-key: $RK_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://stripe.com",
"full_page": true,
"format": "png"
}'Rendering for engineering teams at
Stop stitching together ScreenshotOne, PDFShift, and Firecrawl. Every render — shot, doc, or markdown — counts against the same quota and the same key.
Full page, viewport, or a single element by CSS selector. PNG, JPEG, or WebP at any device scale.
Print-grade PDFs with custom page size, margins, and print CSS. Plus JSX-to-PDF — render a component straight to paper.
Clean, LLM-ready markdown with image alt extraction. Strips chrome, keeps structure — chunked for agent context windows.
# Pricing — plans & limits
Plans start at **$29/mo** with…
- 500 renders included
No per-product pricing. No three dashboards. One quota.
Same JSON shape across all three endpoints — flip the toggles and the request updates live. This is the whole API; there is no step two.
Request
curl https://api.renderkit.tech/v1/screenshot \
-H "x-api-key: $RK_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://news.ycombinator.com",
"full_page": true,
"block_ads": true
}'Response
No browser pools, no queues to operate, no Chrome versions to pin. The infrastructure is the product — you just make HTTP calls.
Sign up with GitHub or email. Your key and 500 free renders are waiting on the dashboard — no card, no sales call.
POST a JSON body to /v1/screenshot, /v1/pdf, or /v1/extract. Same auth header, same shape, same billing meter.
Every render lands on our edge CDN with a signed URL. Hotlink it, webhook it, or pipe the bytes straight through.
❯
What your code sends and what comes back — looped, unedited, no mock data. Every frame below is the actual request lifecycle.
One POST boots a managed browser, waits for the page to actually settle, strips the cookie wall, and drops a retina capture on the edge CDN — signed URL included.
Send JSX with props and get back a paginated document that obeys real print CSS. Invoices, reports, certificates — same design system as your app, rendered to paper.
const Invoice = (props) => (
<Doc paper="a4" margin="24mm">
<LineItems rows={rows} />
<Total due={total} />
</Doc>)
INVOICE
INV-2041 · May 2026
Nav, ads, and cookie chrome dissolve; structure survives. Output arrives chunked to your token budget with overlap — embeddings-ready without a parsing library.
# The state of edge rendering
Latency budgets moved the goalposts…
## What changed in 2026
- Browsers became a metered utility
- Agents read markdown, not DOM
Everything you'd otherwise build around a headless browser — caching, blocking, waiting, retrying, observing — ships in the box.
Identical render requests hit our CDN, not a browser. Cache keys you control with cache_ttl — repeat renders return in ~80ms and don't burn quota.
cache_ttl: 86400
→ HIT · 81ms · 0 credits
→ HIT · 79ms · 0 credits
→ HIT · 84ms · 0 credits
block_ads and block_banners ship with maintained filter lists. Your screenshots stop looking like a GDPR crime scene.
Pass webhook_url and we POST the finished render. No polling loops, no 30-second HTTP timeouts.
Render from a US or UK IP with locale-correct headers — see exactly what users in New York or London see.
HMAC-sign render URLs client-side so your key never ships to the browser. Safe for <img src> straight from your frontend.
wait_until: network_idle, selector, or custom JS predicate. Renders fire the moment the page is actually ready.
Per-endpoint usage, p50/p95 latency, error drill-downs with the exact failing request — replayable with one click.
Your invoices, reports, and certificates are already React components — so render them like one. Send JSX to /v1/pdf and get back a print-grade document with your design system intact. No HTML templates, no headless browser code, no wkhtmltopdf flashbacks.
await rk.pdf({
jsx: `
<Invoice
number="INV-2041"
customer="Brightfold GmbH"
items={[
{ desc: "Growth plan — May", amount: 29.0 },
{ desc: "Overage: 3,210 renders", amount: 9.63 },
]}
total={38.63}
/>
`,
paper: "a4",
});
// → https://cdn.renderkit.tech/rnd_7vq1z3.pdfINVOICE
INV-2041 · May 2026
Brightfold GmbH
Torstraße 140, 10119 Berlin
| Growth plan — May | $29.00 |
| Overage: 3,210 renders | $9.63 |
| Total due | $38.63 |
{
"mcpServers": {
"renderkit": {
"command": "npx",
"args": ["-y", "renderkit-mcp"],
"env": { "RENDERKIT_API_KEY": "rk_live_..." }
}
}
}RenderKit ships an MCP server, token-aware markdown chunking, and structured errors agents can recover from. Wire it into Claude, Cursor, or your own loop in one config block.
renderkit-mcp exposes all three primitives as tools. Your agent screenshots, archives, and reads pages without leaving the conversation.
chunk: true splits markdown on heading boundaries to your max_tokens budget with configurable overlap. Embeddings-ready, no extra library.
Machine-readable error codes with a retryable flag and retry_after hints. Agents recover without a human reading stack traces.
The matrix the incumbents would rather you didn't screenshot. (Use /v1/screenshot, obviously.)
| RenderKit | ScreenshotOne | Urlbox | PDFShift | Firecrawl | |
|---|---|---|---|---|---|
| Screenshot | |||||
| Markdown | |||||
| MCP server | |||||
| JSX-to-PDF | |||||
| Entry price | $9/mo | $17/mo | $19/mo | $9/mo | $16/mo |
Engineers switch for the price. They stay because the API never makes them think.
“Replaced ScreenshotOne + a cron'd Puppeteer box with one key. The bill literally halved and I deleted 400 lines of browser babysitting.”
Maya OkaforFounding engineer, Quillstack“JSX-to-PDF is stupidly good. Our invoices are a React component now — same design system as the app, rendered to paper-perfect PDF.”
Daniel ReyesCTO, Brightfold“We point /v1/extract at any URL and get chunked markdown straight into pgvector. Our RAG ingestion is one HTTP call. That's it. That's the pipeline.”
Priya NatarajanML lead, Octavia AI“The MCP server made our support agent self-sufficient — it screenshots the customer's page, reads the markdown, and answers with receipts.”
Tom LindqvistStaff engineer, Nordwind“Migrated 150k renders/mo off Urlbox in an afternoon. The dashboard's error replay paid for the switch by itself in week one.”
Aisha BelloPlatform lead, Datafjord“Finally an API where the PDF endpoint isn't an afterthought bolted onto a screenshot service. Print CSS support is the real deal.”
Jonas WeberIndie hacker, Kitewire“Geo rendering quietly fixed a bug we'd chased for months — our UK users saw different cookie walls than us. Now we render from a London IP and see it too.”
Sofia MarchettiHead of platform, Vantra“Signed URLs straight from the frontend, zero proxy code. Our key never leaves the server and the <img> tag just works. Exactly how it should be.”
Lucas MeyerEngineering manager, LooplineThree primitives, one API · hover to pause
Every tier includes all three primitives. Upgrade only when you outgrow your quota — no per-primitive add-ons, no surprise overage bills.
Growth
$29/mo
Choose Growth
All plans include all three primitives, the MCP server, signed URLs, and the dashboard. Prices in USD.
Anything else — the founder answers email within a day.
One successful API response: a screenshot, a PDF, or an extract. Cache hits are free and failed renders (4xx/5xx from the target site) are never billed. All three primitives draw from the same quota.
ScreenshotOne's entry plan is $17/mo for screenshots only. RenderKit's Hobby plan is $9/mo and includes screenshots, PDFs, and markdown extraction on one meter — you'd need two or three vendors to match it.
Yes. Every render runs in a real headless Chromium with configurable wait_until conditions: network idle, a CSS selector appearing, or a custom JS predicate. React, Vue, and Svelte apps render exactly as users see them.
Send a React component string to /v1/pdf instead of a URL and we server-side render it straight to a print-grade PDF. Invoices, reports, and certificates become React components — no headless browser code on your side.
renderkit-mcp is an npm package that exposes screenshot, pdf, and extract as MCP tools. Add it to Claude Desktop, Claude Code, or Cursor with one config block and your agent can see and read any webpage.
Yes — pass country: "us" or "gb" on Growth and above to render from a US or UK IP with locale-correct headers, useful for region-walled pages. Custom proxy pools are on the roadmap.
Requests return 429 with a clear error code and your dashboard shows the reset date. You can enable hard caps (default) or opt into metered overage at the same per-render rate as your tier — never a surprise multiplier.
Business plans carry a 99.9% uptime SLA with service credits. Enterprise plans can include a dedicated Chromium pool with custom SLA terms. Live status is public at all times.
Still curious? [email protected]
500 free renders to start. No card. Cancel by ignoring it.