ScreenshotNeo

BlogHow-to

How to Use Thumbalizr: How to Take a Full-Page Website Screenshot

Use Thumbalizr’s web form for a quick capture or its Embed API for repeat screenshots. Full-page capture starts with Silver; the free tier captures screen size only.

By the ScreenshotNeo team4 October 20267 min read

Short answer: Thumbalizr’s website lets you enter a target URL for a screenshot. Its published demo says the free membership captures screen size only; full-page capture is available with Silver and higher plans. For repeat captures or embedding, use the Embed API with size=page. Check Thumbalizr’s demo and API documentation for current terms and controls.

1. Take a screenshot from the Thumbalizr website

  1. Open Thumbalizr.
  2. Enter the page’s URL in the target URL field. Include the full scheme, such as https://, and use the specific page URL rather than just the domain when you need a particular page.
  3. Follow the controls shown on the live page and choose an available capture mode. The published demo describes the plan differences, but does not establish a particular sequence of result-screen buttons.
  4. Inspect the returned image to confirm it includes the content you need.

For a full-page capture, the demo lists Silver and above. Free membership is screen-size only and watermarked. Silver offers full-page or screen-size capture without a watermark at a fixed 1280×1024 browser size. Gold and Platinum add larger browser dimensions, custom delay, and US or European browser locations. Check the live plan pages before choosing a plan.

2. Request a full-page capture with the Embed API

The Embed API is intended for thumbnails embedded on a website. The API key and secret are in the Thumbalizr member area after signup. The documented request requires a url; other parameters can default to your profile settings. A full-page request uses size=page. Properly encode parameter values, especially the target URL.

API request structure

https://api.thumbalizr.com/api/v1/embed/EMBED_API_KEY/TOKEN/?url=ENCODED_URL&size=page

TOKEN is the MD5 digest of the exact query string followed by your secret. The documented example uses url=https://www.google.com/&mode=page as the query string before appending the secret. The examples below use the documented size=page option. The query used to create the token must match the request query byte for byte, including parameter order and encoding; use the API documentation’s current examples if your account or integration uses different parameters.

Python: generate the signed URL and download the image

import hashlib
import os
from urllib.parse import urlencode

import requests

embed_key = os.environ["THUMBALIZR_EMBED_KEY"]
secret = os.environ["THUMBALIZR_SECRET"]
target_url = "https://example.com/"

# Keep this exact query string for both token generation and the request.
query = urlencode([("url", target_url), ("size", "page")])
token = hashlib.md5((query + secret).encode("utf-8")).hexdigest()
request_url = (
    f"https://api.thumbalizr.com/api/v1/embed/{embed_key}/{token}/?{query}"
)

response = requests.get(request_url, timeout=90)
response.raise_for_status()
status = response.headers.get("X-Thumbalizr-Status")
if status != "OK":
    raise RuntimeError(
        f"Thumbalizr status={status!r}; "
        f"error={response.headers.get('X-Thumbalizr-Error')!r}"
    )

with open("thumbalizr-page.png", "wb") as image_file:
    image_file.write(response.content)

Set THUMBALIZR_EMBED_KEY and THUMBALIZR_SECRET in your environment before running this script. Install the dependency with python -m pip install requests. Keep the secret on a server; do not expose it in browser JavaScript or a public page.

Node.js: generate the signed URL and download the image

import { createHash } from "node:crypto";
import { writeFile } from "node:fs/promises";

const embedKey = process.env.THUMBALIZR_EMBED_KEY;
const secret = process.env.THUMBALIZR_SECRET;
if (!embedKey || !secret) {
  throw new Error("Set THUMBALIZR_EMBED_KEY and THUMBALIZR_SECRET");
}

const query = new URLSearchParams([
  ["url", "https://example.com/"],
  ["size", "page"],
]).toString();
const token = createHash("md5").update(query + secret, "utf8").digest("hex");
const endpoint = `https://api.thumbalizr.com/api/v1/embed/${embedKey}/${token}/?${query}`;

const response = await fetch(endpoint, { signal: AbortSignal.timeout(90_000) });
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const status = response.headers.get("x-thumbalizr-status");
if (status !== "OK") {
  throw new Error(
    `Thumbalizr status=${status}; error=${response.headers.get("x-thumbalizr-error")}`
  );
}
await writeFile("thumbalizr-page.png", Buffer.from(await response.arrayBuffer()));

Run with Node.js that supports built-in fetch. Keep the API secret in a server-side environment variable.

cURL: retrieve the generated image

Because the Embed API token signs the query string plus your secret, generate the token server-side using the same exact encoding and parameter order shown above. Then request the signed URL:

curl --fail --location --output thumbalizr-page.png \
  'https://api.thumbalizr.com/api/v1/embed/EMBED_API_KEY/TOKEN/?url=https%3A%2F%2Fexample.com%2F&size=page' \
  --dump-header thumbalizr-headers.txt

Replace the key, token, and encoded URL. Inspect thumbalizr-headers.txt for X-Thumbalizr-Status and, on failure, X-Thumbalizr-Error. For manual query encoding, do not concatenate an unescaped URL into the request: characters such as &, ?, and # have special meaning in a query string.

3. Choose the right API options

Parameter What it controls Documented details
size Full page or visible screen page or screen; the free tier is screen-only.
bwidth, bheight Browser viewport dimensions Free and Silver default to 1280×1024. Gold and Platinum allow larger dimensions, subject to tier limits.
delay Wait after page load Documented range is 1–30 seconds. Free and Silver show a 5-second default; higher tiers allow custom delay.
country Browser location Documented choices include US and Germany; contact Thumbalizr for other countries. Higher tiers offer US or European browsers.
format Image format JPG or PNG.
quality JPEG quality Documented range is 10–100; it applies to JPEG thumbnails.
width Thumbnail output width Maximum width depends on tier; the API table lists up to 1280 for Free/Silver, 1600 for Gold, and 2000 for Platinum.
timestamp Request a newly generated thumbnail Use a different value to generate a new image; unavailable on the free tier in the documented table.

Use bwidth and bheight to control the browser viewport, not the final thumbnail width. The API documentation lists the available tier limits and defaults; verify them against your account. Full-page output can be much taller than the viewport, so a thumbnail width setting should not be mistaken for a page-height limit.

4. Handle status, caching, and repeat captures

Thumbalizr documents these response headers: X-Thumbalizr-Status can be QUEUED, OK, or FAILED; X-Thumbalizr-Error gives a failure reason; and X-Thumbalizr-Generated reports when an image was generated.

  • QUEUED: the screenshot is still processing. Do not treat the response as a completed image; follow the current API guidance for checking the result.
  • OK: the image was generated. Save the response body using the expected image format.
  • FAILED: inspect the error header and correct the request, plan, or target page issue before retrying.

The timestamp parameter can request a newly generated image by changing its value. Avoid adding a changing timestamp to every request unless you need fresh captures: it prevents reuse of an existing generated image. For repeat jobs, store successful results and refresh only when the page or your capture settings change.

5. Troubleshooting

Symptom Likely cause What to check
Only the first screen appears The request used size=screen, omitted size, or the plan does not include full page. Set size=page and confirm your plan supports full-page capture.
Watermark appears The demo lists a watermark on Free membership. Check current plan terms if an unwatermarked image is required.
Request fails or token is rejected The signed query and requested query differ, or a value was encoded inconsistently. Build the query once, use the exact same string for hashing and request, and URL-encode the target URL.
Status is QUEUED Capture processing is not complete. Check the current API instructions and do not save the pending response as a final image.
Status is FAILED The service reports a failed capture or request. Read X-Thumbalizr-Error; verify the URL, account tier, and supported parameter values.
Page is missing content loaded later The page may render content after the capture delay. Where your tier permits it, increase delay within the documented 1–30 second range.
Layout differs from your browser Viewport dimensions or browser location can affect responsive layout and localized content. Set supported bwidth/bheight and country values to match the scenario you need.
Repeated request returns an old image A generated thumbnail may be reused. Use a new timestamp value when a fresh image is needed; check plan availability.

6. Performance, reliability, and cost

Full-page images contain more pixels than screen captures, so they can take longer to generate, transfer, and store. Request only the viewport and image width you need; use PNG for lossless output or JPG when a smaller photographic thumbnail is suitable. A longer delay can help pages that render content late, but it adds waiting time.

For production jobs, treat the status headers as part of the API contract: distinguish queued work from success and failure, record the error header, set a client timeout, and retry only failures that are safe to retry. Avoid exposing the secret in public frontend code. A failed response or a queued response is not a completed image.

The Thumbalizr feature page lists 100 monthly screenshots for Free, 2,000 for Silver, 3,000 for Gold, and 5,000 or more for Platinum. It displays Silver at $9/month, Gold at $13/month, and Platinum at $20/month for 5,000 screenshots, with higher Platinum volumes also listed. These are figures shown on the feature page, not a price guarantee; recheck current limits and prices before purchase.

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns a PNG, JPEG, WebP, or PDF. Its capture options include full-page screenshots with lazy images loaded.

See the ScreenshotNeo API documentation. This cURL request saves a WebP screenshot:

curl -G "https://api.screenshotneo.com/v1/shot" \
  -d access_key=YOUR_API_KEY \
  --data-urlencode url=https://stripe.com \
  -o shot.webp

Cookie banners, popups, and chat widgets are removed before the shot. Bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up free and get 1,000 screenshots a month with no card.

FAQ

Can Thumbalizr take a full-page screenshot for free?

Its published demo says free membership is limited to screen-size capture. Full-page is listed for Silver and above.

What does size=page mean?

It requests a full-page capture through the Embed API, subject to the options available on your plan.

Can I embed the result directly on a website?

Yes. The Embed API is intended to embed thumbnails. Keep signing credentials server-side when constructing requests for public pages.

Which country can Thumbalizr capture from?

The API documentation lists the US and Germany and says to contact Thumbalizr for other countries. Tier availability varies.

Sources