arrow_back Back to blog
Comparisons March 6, 2026 7 min read

Urlbox Alternative: Simpler Pricing, No Feature Gating

Urlbox is one of the most established screenshot APIs on the market. It has an impressive feature list, a proven track record, and a mature platform. But it also has a pricing model that can be painful at scale and a complexity that many developers don’t need.

If you’ve been using Urlbox and wondering if there’s a simpler, more cost-effective option — or if you’re evaluating both for a new project — this post breaks down the real differences.


The Core Difference: Philosophy

Urlbox is a power tool. It supports an enormous number of parameters, webhook callbacks, S3 integration, retina rendering, dark mode simulation, and more. If you need every possible rendering option, Urlbox probably has it.

len.sh is built on a different philosophy: cover 95% of real-world use cases with a simpler API, transparent pricing, and zero feature gating. Instead of one endpoint that does everything, we have purpose-built endpoints for the three most common tasks: screenshots, OG images, and PDFs.

The question is whether you need the other 5% that Urlbox offers — and whether it’s worth paying significantly more for it.


Pricing: The Elephant in the Room

Urlbox doesn’t offer a free tier. The cheapest plan starts at $19/month for 2,000 screenshots. That’s fine for production use, but it means you can’t evaluate the API without spending money.

Here’s how the pricing compares at different scales:

Monthly Volumelen.shUrlboxDifference
100 (testing)Free$19 (min)$19/mo saved
2,000€19$19Even
5,000€19$49$30/mo saved
25,000€19$149$130/mo saved
100,000€99$349$250/mo saved
500,000€99CustomSignificant

At 25,000 screenshots per month, the difference is $130/month — $1,560 per year. At 100,000 screenshots, you’re saving $3,000 per year. That’s real money, especially for a startup or small team.

Why the Price Difference?

len.sh is built entirely on Cloudflare’s infrastructure — Workers, Browser Rendering API, R2 for caching, D1 for the database. This gives us a fundamentally lower cost structure than providers running their own server fleet. We pass those savings to customers.

No Feature Gating

This is the other pricing difference that matters. With len.sh, every feature is available on every plan:

  • Free tier: full API access, all parameters, all output formats, OG images, PDFs, signed URLs
  • €19/mo Pro: same features, higher volume (25,000/mo)
  • €99/mo Scale: same features, much higher volume (500,000/mo)

Urlbox gates certain features by plan tier. Higher concurrency, priority rendering, and some advanced options require more expensive plans. This means you might build your integration on the free trial, then discover you need a higher tier for a feature your production workflow requires.


Feature Comparison

Featurelen.shUrlbox
Screenshot captureYesYes
Full-page captureYesYes
Custom viewportYes (1-3840px)Yes
Output formatsPNG, JPEG, WebPPNG, JPEG, WebP
PDF generationDedicated /v1/pdf endpointYes
OG image generationDedicated /v1/og endpointNo
Custom JS injectionYesYes
Custom CSS injectionYesYes
Ad blockingYesYes
Cookie banner blockingYesYes
Element selector captureYesYes
Signed URLsYes (HMAC-SHA256)Yes
Device scale (retina)Yes (1-3x)Yes
Wait strategiesload, domcontentloaded, networkidle0, networkidle2Multiple options
Webhook callbacksNoYes
S3 integrationNoYes
Dark mode simulationNoYes
Geo-targeted renderingNoYes
Proxy supportNoYes
Auth: Bearer headerYesNo
Free tier100/moNone

Where Urlbox Wins

  • Webhooks and async processing — if you need to queue screenshots and receive results via callback, Urlbox supports this natively.
  • S3 integration — direct upload to your S3 bucket without an intermediate step.
  • Dark mode — simulate dark mode preferences on the target page.
  • Geo-targeting — render pages from specific geographic locations.
  • Proxy support — route requests through custom proxies.

These are real features that matter for specific use cases. If your workflow depends on any of them, Urlbox might be worth the premium.

Where len.sh Wins

  • Dedicated OG image endpoint — generate branded social cards without building HTML templates.
  • Dedicated PDF endpoint — purpose-built parameters for paper size, margins, page ranges, headers, and footers.
  • Price — 50-80% cheaper at comparable volumes.
  • Free tier — evaluate the API without spending anything.
  • Simpler API — fewer parameters, clearer endpoint separation, faster onboarding.
  • Bearer auth — header-based authentication keeps keys out of URLs and server logs.

API Comparison

Taking a Screenshot

Urlbox:

curl "https://api.urlbox.io/v1/YOUR_API_KEY/png?url=https://example.com&width=1280&height=720&full_page=true"

len.sh:

curl "https://api.len.sh/v1/screenshot?url=https://example.com&width=1280&height=720&full_page=true&access_key=YOUR_API_KEY"

Both are one-liner curl commands. The main structural difference is that Urlbox embeds the API key and format in the URL path, while len.sh uses query parameters.

Generating a PDF

Urlbox:

curl "https://api.urlbox.io/v1/YOUR_API_KEY/pdf?url=https://example.com/invoice"

len.sh:

curl "https://api.len.sh/v1/pdf?url=https://example.com/invoice&paper_size=A4&margin_top=1in&margin_bottom=1in&print_background=true&access_key=YOUR_API_KEY"

len.sh’s dedicated PDF endpoint exposes all the parameters you typically need for document generation: paper size, margins, landscape orientation, page ranges, and header/footer templates.

Generating an OG Image

Urlbox: No equivalent. You’d need to build an HTML template, host it, and screenshot it at 1200x630.

len.sh:

curl "https://api.len.sh/v1/og?title=My+Blog+Post&subtitle=A+deep+dive+into+APIs&badge=Tutorial&brand_name=Acme&brand_color=%234F46E5&theme=dark&access_key=YOUR_API_KEY" \
  --output og.png

One request. No template to build or host.


Code Examples: Migrating from Urlbox

JavaScript

Urlbox:

async function screenshot(url) {
  const apiKey = process.env.URLBOX_API_KEY;
  const response = await fetch(
    `https://api.urlbox.io/v1/${apiKey}/png?url=${encodeURIComponent(url)}&width=1280&height=720`
  );
  return response.arrayBuffer();
}

len.sh:

async function screenshot(url) {
  const params = new URLSearchParams({
    url,
    width: "1280",
    height: "720",
    format: "png",
    access_key: process.env.LENSH_API_KEY,
  });

  const response = await fetch(
    `https://api.len.sh/v1/screenshot?${params}`
  );
  return response.arrayBuffer();
}

Python

Urlbox:

import requests
import os

def screenshot(url: str) -> bytes:
    api_key = os.environ["URLBOX_API_KEY"]
    response = requests.get(
        f"https://api.urlbox.io/v1/{api_key}/png",
        params={"url": url, "width": 1280, "height": 720},
    )
    response.raise_for_status()
    return response.content

len.sh:

import requests
import os

def screenshot(url: str) -> bytes:
    response = requests.get(
        "https://api.len.sh/v1/screenshot",
        params={
            "url": url,
            "width": 1280,
            "height": 720,
            "format": "png",
            "access_key": os.environ["LENSH_API_KEY"],
        },
    )
    response.raise_for_status()
    return response.content

Using Signed URLs (Both Support This)

len.sh:

import { signUrl } from "@lensh/sdk";

const publicUrl = signUrl(
  "https://api.len.sh/v1/screenshot?url=https://example.com&width=1280",
  { keyId: "your-key-id", signingSecret: "your-signing-secret" }
);

// Safe to use in <img> tags, emails, etc.

When to Choose Urlbox

Be honest with yourself about what you need. Choose Urlbox if:

  • You depend on webhook callbacks for async processing workflows.
  • You need direct S3 uploads as part of your pipeline.
  • You need to render pages from specific geographic regions.
  • You need dark mode simulation.
  • You need proxy routing for accessing geo-restricted or authenticated content.

These are legitimate requirements that len.sh doesn’t currently cover.

When to Choose len.sh

Choose len.sh if:

  • You want predictable, lower pricing without feature gating.
  • You need OG image generation without building HTML templates.
  • You want dedicated PDF generation with paper size, margins, and page ranges.
  • You need a free tier to prototype and evaluate.
  • You value a simpler API that covers the common use cases without complexity overhead.
  • You want official SDKs in JavaScript, Python, Ruby, PHP, and Go.

The Math at Scale

Let’s do the math for a real-world scenario. Say you’re building a SaaS that generates link preview thumbnails. You’re currently at 50,000 screenshots per month and growing.

With Urlbox: You’re on a plan around $199/month. As you grow to 100,000, you’ll need a higher tier at $349/month. Annual cost: $2,400-$4,200.

With len.sh: You’re on the €99/month Scale plan, which covers up to 500,000 screenshots. You won’t need to upgrade until you 10x your current volume. Annual cost: €1,188.

Annual savings: $1,200-$3,000. That’s a junior developer’s tools budget, a year of your monitoring stack, or a meaningful contribution to your runway.


Conclusion

Urlbox is a capable, mature screenshot API with features that len.sh doesn’t have. If you need webhooks, S3 integration, geo-targeting, or dark mode simulation, it’s a solid choice despite the higher price.

But for most screenshot, PDF, and OG image use cases, len.sh delivers the same core functionality at a significantly lower cost, with a simpler API and no feature gating. The migration is straightforward, and the free tier lets you validate everything before committing.

Sign up for a free len.sh account and run your first screenshot in under a minute. Compare the results side-by-side with your current Urlbox output and decide for yourself.

Try len.sh for free

Start capturing screenshots with a simple API call. No credit card required.