Written By Hanzala Saleem
Updated At October 16, 2026 | 9 min read
If your job is to turn URLs into images or PDFs, ScreenshotAPI.net is the more direct fit. It is built around screenshot output, with PNG, JPG, WebP and PDF formats, built-in ad and cookie banner blocking, and pricing counted per screenshot. ScrapingBee is a web scraping API that can also return a screenshot alongside the page HTML. Its strengths are proxy pools, geotargeting and anti-bot handling, which matter when target sites block automation. Its screenshots are billed in API credits, and PDF export is listed as "coming soon" in its documentation.
Everything below comes from the official documentation and pricing pages as published in October 2026. No speed or reliability claims are made, because neither vendor publishes comparable benchmarks and this article ran no tests.

Choose ScreenshotAPI.net when the screenshot or PDF is the deliverable: link previews, visual regression tests, compliance archives, scheduled competitor captures, PDF generation from HTML. You get format control, cookie banner removal, and a plan where one screenshot costs one screenshot.
Choose ScrapingBee when scraping is the core job and a screenshot is a by-product, or when target pages sit behind anti-bot systems that need premium or stealth proxies. One request returns HTML, extracted data and a screenshot together.
Still deciding whether you need pixels or data? The screenshot API vs web scraping API guide covers that question.
| Criterion | ScreenshotAPI.net | ScrapingBee |
|---|---|---|
| Core purpose | Screenshot, PDF and video rendering API | Web scraping API with JavaScript rendering |
| Request | GET/POST https://shot.screenshotapi.net/v3/screenshot with token | GET https://app.scrapingbee.com/api/v1 with api_key or Bearer header |
| Full page capture | full_page=true, plus lazy_load scrolling | screenshot_full_page=true |
| Image formats | PNG, JPG, WebP; image_quality, retina | No documented format or quality option; examples save PNG |
| PDF output | file_type=pdf with paper format, landscape, page range, HTML input | "Coming soon" per documentation |
| Dynamic content | wait_for_event, delay, lazy_load, scroll_delay | wait, wait_for, wait_browser, js_scenario |
| Ad and banner blocking | block_ads, no_cookie_banners, block_chat_widgets, block_tracking | block_ads; no documented cookie banner option |
| Cookies and headers | cookies, saved cookie template_id, headers, user_agent | cookies with domain and path attributes, forward_headers |
| Geographic rendering | Your own proxy, latitude/longitude, accept_languages, timezone | Built-in country_code with classic, premium or stealth proxy pools |
| Anti-bot handling | Pass cookies from a solved challenge; no built-in proxy pool documented | Premium and stealth proxies, session_id, Auto-Mode |
| Data extraction | extract_html, extract_text, extract_markdown, get_image_urls | HTML by default, extract_rules, AI extraction, Markdown, text |
| Pricing unit | Screenshots per month | API credits (5 to 75 per rendered request) |
| Entry paid plan | $9/mo for 1,000 screenshots | $19/mo for 75,000 credits |
| Free tier | 7-day trial, 100 screenshots, no card | 1,000 trial credits, no card |
ScreenshotAPI.net exposes one endpoint that renders a URL (or raw HTML) in Chromium and returns either the file itself (output=image) or JSON describing the render. The Render a Screenshot reference lists every parameter.
file_type accepts png (default), jpg, webp and pdf. image_quality sets JPG compression from 0 to 100, retina=true renders at 2x density, and omit_background=true makes white backgrounds transparent on PNG, per the file type docs.
PDF is a real document mode: set a paper format such as A4 or Letter, switch to landscape, trim a page_range, or omit the format for one long page. Passing custom_html instead of url turns the endpoint into an HTML to PDF converter for invoices and reports.
Timing is controlled by wait_for_event (load by default, or domcontentloaded and networkidle), a fixed delay, and lazy_load=true, which scrolls the page before capture so lazy-loaded images and infinite-scroll sections appear. scroll_delay tunes that scroll. Details are in the lazy loading docs. Full page capture is full_page=true; width and height emulate desktop, tablet or mobile viewports; dark_mode=true requests the dark theme where a site has one.
For clean output, the resource blocking docs describe block_ads, no_cookie_banners, block_chat_widgets and block_tracking, plus switches for images, fonts, media, XHR, fetch, WebSockets and specific request URLs. Anything the rules miss can be hidden with injected CSS or removed by selector.
cookies accepts a name=value; other=value; string, headers accepts custom HTTP headers, and user_agent and accept_languages emulate a client. For login walls, a saved cookie template_id applies a stored session; the behind-a-login guide shows how to create one.
With enable_caching=true, repeat requests for the same URL and parameters return the stored render for the ttl you set (30 days by default) unless fresh=true forces a new one. Cached hits and failed renders do not count toward quota, per the caching docs and help centre. Results can go straight to your own S3, Google Cloud or Wasabi bucket via the storage integration, and the same account supports scheduled captures on a cron expression, bulk jobs from CSV or JSON, scrolling video, and text, HTML or Markdown extraction when output=json.
ScrapingBee's HTML API fetches a URL through a headless browser by default (render_js=true) and returns rendered HTML. Screenshots are an option on that request, not a separate product, so the screenshot-specific features are separated out below.
screenshot=true captures the viewport, screenshot_full_page=true captures the whole page, and screenshot_selector captures one element. Screenshots require JavaScript rendering, and setting screenshot=true automatically turns off ScrapingBee's default block_resources behaviour so images and CSS load first. Viewport size comes from window_width and window_height.
With json_response=true, one JSON object carries the HTML body, a base64-encoded screenshot, response headers, cookies, intercepted XHR calls and the credit cost. That is how one render yields both HTML and an image.
wait adds a fixed delay, wait_for waits for a CSS or XPath selector, and wait_browser (default domcontentloaded) can be set to load, networkidle0 or networkidle2. js_scenario runs scripted clicks, scrolls, and typing before the page is returned, which is how you dismiss modals or expand content before capture. block_ads=true removes ads; the documentation lists no cookie banner blocker, so consent overlays need a scripted click.
cookies takes a string where each cookie can carry domain, path and expires attributes, and forward_headers=true passes custom headers through. The scraping heritage shows in the proxy layer: country_code selects the proxy country, premium_proxy=true escalates to residential IPs, stealth_proxy=true targets the hardest sites, session_id keeps requests on one IP for five minutes, and mode=auto tries configurations from cheapest to most expensive and charges only for the one that succeeds. For a page that blocks data centre traffic, this is the difference between a capture and a 500 error.
extract_rules, ai_extract_rules, ai_query, return_page_markdown, return_page_text and the dedicated Google and Amazon scraper endpoints have nothing to do with image output. They are the reason to pick ScrapingBee when structured data is the main deliverable.
Output formats. ScreenshotAPI.net offers PNG, JPG or WebP with quality control, plus PDFs with paper sizes. ScrapingBee documents no format, quality or PDF option.
Clean captures. Both block ads. Only ScreenshotAPI.net documents cookie banner and chat widget blocking; on ScrapingBee, that is js_scenario work.
Lazy-loaded content. ScreenshotAPI.net's lazy_load scrolls before capture; ScrapingBee relies on waits and scripted scrolling. Both can produce a complete full page capture, but the first needs less configuration.
Geography and anti-bot. ScrapingBee has a built-in, country-selectable proxy network with residential and stealth tiers. ScreenshotAPI.net relies on your own proxy plus geolocation, language and timezone emulation.
Response design. ScreenshotAPI.net returns the file directly with output=image. ScrapingBee returns HTML by default and needs json_response=true to deliver image and HTML together, base64-encoded.
Developer experience. Both publish samples in six languages. ScrapingBee adds official client libraries and a CLI; ScreenshotAPI.net adds a playground, an MCP server, and Zapier, Make, n8n and Google Sheets integrations.
ScreenshotAPI.net sells screenshots. Per its pricing page, Essential is $9/month for 1,000 screenshots at 20 requests per minute, Startup is $29/month for 10,000 at 40 per minute, and Business is $175/month for 100,000 at 80 per minute. All plans include full page capture, ad and cookie banner blocking, retina output, PDF and HTML rendering, bulk jobs and extraction. Proxy support and video output start at Startup. A unique screenshot is the URL plus its parameters; cached and failed renders are not counted, and overages are charged according to the plan rather than cutting you off.
ScrapingBee sells credits. Its credit cost table charges 1 credit for a fetch without JavaScript, 5 with JavaScript rendering, 10 or 25 with a premium proxy (without or with JavaScript), and 75 with a stealth proxy; AI extraction adds 5. Because screenshots require JavaScript rendering, the cheapest screenshot is 5 credits and one through a stealth proxy is 75. Plans on the pricing page run from Hobby at $19/month for 75,000 credits and 25 concurrent requests, through Freelance ($49, 250,000 credits), Startup ($99, 1,000,000) and Business ($249, 3,000,000), with Enterprise tiers above. ScrapingBee's screenshot page translates these to 15,000, 50,000, 200,000 and 600,000 screenshots, assuming every credit goes to a 5-credit capture.

For ordinary pages that need no special proxies, ScrapingBee's Freelance plan covers more raw captures per dollar than ScreenshotAPI.net's Startup plan. Once you need premium or stealth proxies, the credit cost per screenshot rises five to fifteen times, while ScreenshotAPI.net's cost per screenshot does not change with request options. Low-volume teams, and anyone who wants PDF output and banner removal included, will find the $9 and $29 tiers simpler to budget.
Both snippets capture a full page screenshot at a 1280 by 800 viewport, wait for network activity to settle, and save a PNG. Replace the placeholder keys.
ScreenshotAPI.net (Node.js, native fetch)
import { writeFile } from "node:fs/promises";
const params = new URLSearchParams({
token: process.env.SCREENSHOTAPI_TOKEN,
url: "https://example.com",
output: "image",
file_type: "png",
full_page: "true",
width: "1280",
height: "800",
wait_for_event: "networkidle",
lazy_load: "true",
block_ads: "true",
no_cookie_banners: "true",
});
const response = await fetch(
`https://shot.screenshotapi.net/v3/screenshot?${params}`
);
if (!response.ok) {
throw new Error(`ScreenshotAPI error ${response.status}: ${await response.text()}`);
}
await writeFile("screenshotapi.png", Buffer.from(await response.arrayBuffer()));Drop block_ads and no_cookie_banners when the banner is part of what you need to archive.
ScrapingBee (Node.js, native fetch)
import { writeFile } from "node:fs/promises";
const params = new URLSearchParams({
url: "https://example.com",
render_js: "true",
screenshot: "true",
screenshot_full_page: "true",
window_width: "1280",
window_height: "800",
wait_browser: "networkidle2",
});
const response = await fetch(`https://app.scrapingbee.com/api/v1?${params}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPINGBEE_API_KEY}` },
});
if (!response.ok) {
throw new Error(`ScrapingBee error ${response.status}: ${await response.text()}`);
}
await writeFile("scrapingbee.png", Buffer.from(await response.arrayBuffer()));The Spb-cost response header reports the credits used. Add premium_proxy=true and country_code=de to render from Germany through a residential IP at 25 credits instead of 5. See the ScrapingBee screenshot section.
Pick ScreenshotAPI.net if the image or PDF is what users or auditors will see, if you want cookie banners and chat widgets removed without per-site scripts, if you need PDF output today, if you plan to schedule or bulk-run captures into your own bucket, or if you want a bill where screenshots are the unit.
Pick ScrapingBee if scraping is already your core workload and adding screenshot=true beats integrating a second vendor, or if you need scripted interaction before capture with HTML, data and screenshot returned together.
Some teams run both: ScrapingBee for extraction on protected sites, ScreenshotAPI.net for the visual record and PDFs. Test each with a few of your own URLs, including a long lazy-loaded page and one with a consent banner, and judge the output.
At least 5, because screenshots require JavaScript rendering, billed at 5 credits with classic proxies. The same screenshot costs 25 credits with premium_proxy=true and 75 with stealth_proxy=true. ScreenshotAPI.net counts one screenshot per unique render regardless of options.
Not according to its current documentation, which lists HTML to PDF conversion as "coming soon". ScreenshotAPI.net renders PDFs today with file_type=pdf, including paper formats, landscape orientation, page ranges and raw HTML input.
Partly. It can set geolocation coordinates, the Accept-Language header and the timezone, and route the render through a proxy you provide.
For screenshot and PDF workflows, yes: full page and element capture, cookie banner removal, multiple image formats, caching, scheduling and bulk jobs are all covered.