CloudConvert vs Browserless for Scheduled Website Screenshots
Compare CloudConvert and Browserless for recurring website screenshots, then build a reliable schedule with retries, storage, alerts, and clear cost estimates.
Short answer: CloudConvert fits scheduled screenshots when you want capture packaged as a job with documented asynchronous completion, webhooks, and storage integrations. Browserless fits when you want a screenshot REST endpoint with Puppeteer-style controls, or need a broader managed browser service. The cited documentation for neither product establishes a complete recurring schedule inside the screenshot call itself. In both cases, use an external scheduler or workflow to trigger captures and handle retries, alerts, and retention.
For a new screenshot API, try ScreenshotNeo first: it removes cookie banners, popups, and chat widgets before capture, bills only clean shots, and has a $5 paid plan for 3,000 screenshots. It also offers an MCP server for AI agents. The comparison below explains the two named services and how to make either one part of a dependable schedule.
1. What “scheduled website screenshots” requires
A screenshot endpoint turns a page into an image. A schedule is a workflow around that endpoint. A production setup needs to decide when to run, how to know a capture finished, where to save it, and what to do when a page or request fails.
- Trigger: a cron job, cloud scheduler, CI workflow, or automation platform starts the run.
- Capture: the workflow sends a URL and capture settings to the screenshot service.
- Completion: it waits for the image response or, for asynchronous jobs, receives a completion event or polls job status.
- Validate and store: check that the result is a usable image, then save it with a timestamp and stable target identifier.
- Recover and alert: retry transient failures within a limit, record permanent failures, and notify an operator if the schedule misses its objective.
- Retain: expire old images according to the comparison or audit history you need.
Decide what a successful capture means before choosing a provider. An HTTP success response alone does not prove the intended page rendered: bot defenses, a consent overlay, delayed JavaScript, an expired login, or a blank page can still make the image unusable.
2. CloudConvert vs Browserless at a glance
| Decision | CloudConvert | Browserless |
|---|---|---|
| Capture model | A named capture-website operation inside a task or job. |
A dedicated screenshot REST API, plus broader managed Puppeteer/Playwright browser connections and self-hosting options. |
| Output and controls | Website Screenshot API documents full-page PNG/JPG, selector waits, authorization headers, viewport, zoom, and resizing controls. | Screenshot API documents PNG, JPEG, and WebP, full-page capture, selectors, wait and navigation controls, resource rejection, and Puppeteer-style options. |
| Scheduling | Use an external scheduler or workflow to create jobs. The docs list integrations such as Zapier, Power Automate, Make, and n8n; the recurrence and recovery behavior depends on the integration you configure. | Call the REST endpoint from an external scheduler, or operate browser infrastructure yourself. The cited docs do not establish a native recurring screenshot scheduler. |
| Completion and storage | Supports synchronous or asynchronous jobs; docs describe webhooks and storage integrations including S3, Azure, and Google Cloud. | The screenshot API returns an image; your calling workflow should persist it and record its status. |
| Broader use | Job-oriented capture and file workflow. | Single-task REST APIs as well as managed browser sessions and self-hosting. |
| Cost basis | The screenshot page advertises a starting price of $0.008 per file. This is not a quote for a specific schedule; options and volume affect actual cost. | Cloud usage units, with browser time charged in 30-second increments and partial increments rounded up. Plan allowances, concurrency, session limits, and overages vary. |
Sources: CloudConvert Website Screenshot API, Capture Website operation, CloudConvert Jobs, CloudConvert API integrations and regions, Browserless Screenshot API, Browserless REST APIs, Browserless overview, Browserless unit consumption, and Browserless pricing. Pricing and plan details can change; check the live pages before committing to a volume.
3. When to choose CloudConvert
Choose CloudConvert when the screenshot is one step in a job-based file pipeline. Its website screenshot documentation describes a Chrome-based capture pipeline, URL or HTML input, full-page output, selector waits, configurable capture parameters, and authorization headers for protected resources. The API can run jobs synchronously or asynchronously; for recurring workloads, asynchronous jobs with completion handling can keep the scheduler from waiting on a long capture.
CloudConvert is a reasonable fit when you need a documented storage integration or want to connect an existing workflow platform. A listed integration does not, by itself, guarantee the retry policy, recurrence, or alerting you need. Verify each step in the specific integration you plan to use.
The capture-website operation reference requires a URL and output format and also exposes engine/version, filename, and timeout parameters. Its default task timeout is five hours, which is a task limit rather than a recommended screenshot wait. Set a shorter application-level deadline suited to your target pages and operational needs.
CloudConvert setup checklist
- Create a recurring trigger in your scheduler or workflow platform.
- Submit a
capture-websitetask with the URL, output format, and required capture settings. - For async work, connect completion handling through a webhook or a deliberate polling process; do not hold a scheduler worker blocked for a long job.
- Save the output to a configured storage destination or retrieve it in your workflow.
- Persist the task identifier, target URL, scheduled time, completion time, and outcome for diagnosis.
- Confirm how duplicate triggers are handled so retries do not silently create unwanted duplicate files or charges.
4. When to choose Browserless
Choose Browserless when the screenshot REST endpoint and its browser-style capture controls match your workflow, or when the project may need managed Puppeteer/Playwright sessions or self-hosted browser infrastructure. The screenshot API accepts a URL or raw HTML and documents image output in PNG, JPEG, or WebP, as well as full-page capture, selector capture, waits, navigation configuration, and resource rejection.
For recurring captures, keep the schedule, storage, retention, retries, and alerting in your application or scheduler. Browserless Cloud bills browser time in 30-second increments, rounding partial increments up. Estimate the cost using your actual session durations and current plan terms; include browser concurrency, session limits, plan allowances, and any overages in the estimate.
Browserless warns that bot defenses can result in blank, CAPTCHA, or access-denied screenshots. Use only authorized access, check the target site’s terms, and make the capture workflow detect and report an unusable result rather than treating every returned image as success.
5. Build a reliable schedule around either service
Choose a schedule and capture identity
Pick a frequency based on how quickly you need to detect a change and how many target pages you have. Give each target a stable ID separate from its URL: URLs can change, and the ID makes saved history and alerts easier to correlate. Store the intended schedule time in UTC or another explicitly chosen timezone to avoid daylight-saving surprises.
Set readiness conditions
“Page loaded” can mean different things. Prefer a selector that marks the content you care about when available. A fixed delay is simple but wastes time on quick pages and may be too short for slow ones. Network-idle signals can be unreliable on pages with persistent requests. Pilot both an ordinary page and a JavaScript-heavy page, then choose a bounded wait and validate the captured content.
Use bounded retries and idempotent storage
Retry timeouts, temporary service errors, and transient network failures with a small capped backoff. Do not retry an invalid URL, an expired credential, or a target blocked by an access policy without changing the cause. Give each scheduled run an identifier and write output to a predictable key such as target-id/YYYY-MM-DDTHH-mm-ssZ.webp. If a retry is allowed to replace a file, make that behavior explicit.
Monitor outcomes, not only process exit codes
Track scheduled, started, completed, failed, and skipped counts; duration; response status; output size; and a page-verdict signal if the provider offers one. Alert on missed runs and repeated failures, not on every single transient retry. Keep a sample of images or a lightweight image validation step so a blank or challenge page is visible in operations.
6. A small self-managed scheduled capture example
This runnable Python example uses Playwright to capture a page locally, saves a timestamped PNG, and exits nonzero on failure so cron or another scheduler can alert. It demonstrates the scheduling and file-handling layer; it does not include proxying, cloud storage, or site-specific authentication. Use it only for pages you are authorized to access.
python -m pip install playwright
python -m playwright install chromium
import asyncio
import os
from datetime import datetime, timezone
from pathlib import Path
from playwright.async_api import async_playwright
URL = os.environ.get("CAPTURE_URL", "https://example.com")
OUT_DIR = Path(os.environ.get("CAPTURE_DIR", "captures"))
TIMEOUT_MS = int(os.environ.get("CAPTURE_TIMEOUT_MS", "45000"))
async def main():
OUT_DIR.mkdir(parents=True, exist_ok=True)
stamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H-%M-%SZ")
output = OUT_DIR / f"page-{stamp}.png"
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page(viewport={"width": 1440, "height": 1000})
try:
response = await page.goto(URL, wait_until="domcontentloaded", timeout=TIMEOUT_MS)
if response and response.status >= 400:
raise RuntimeError(f"Navigation returned HTTP {response.status}")
await page.locator("body").wait_for(state="visible", timeout=TIMEOUT_MS)
await page.screenshot(path=str(output), full_page=True, animations="disabled")
if not output.exists() or output.stat().st_size == 0:
raise RuntimeError("Screenshot output is missing or empty")
print(f"saved={output} bytes={output.stat().st_size}")
finally:
await browser.close()
asyncio.run(main())
Set CAPTURE_URL and optionally CAPTURE_DIR or CAPTURE_TIMEOUT_MS in the scheduler environment. A basic cron entry that runs hourly at minute 15 is:
15 * * * * cd /path/to/job && CAPTURE_URL='https://example.com' /usr/bin/python3 capture.py
For production, use a managed scheduler if the machine may be offline, prevent overlapping runs if a capture can outlast its interval, rotate or expire old files, and forward standard output and errors to your logging or alert system. A local script is useful for a controlled workload; the service APIs below avoid maintaining a local browser installation.
7. Or skip the browser setup
ScreenshotNeo is the alternative to try first when you want a screenshot API with clean captures and clear billing outcomes. One GET request returns an image; see the ScreenshotNeo API documentation for its parameters and response details.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const image = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', image));
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. Every feature is on every plan. For a recurring schedule, call this endpoint from your scheduler and store each successful response with a timestamp.
Sign up free for 1,000 screenshots a month, with no card required.
8. Cost, performance, and reliability planning
Estimate the real workload
Before comparing prices, calculate monthly captures as targets × runs per target per month × expected attempts. Then account for formats, full-page output, page readiness time, concurrency, storage and retention, retries, and any authenticated-resource handling. CloudConvert advertises a starting rate of $0.008 per file, but that is not a workload quote. Browserless charges by plan-dependent units and rounds browser time up to 30-second increments. Recheck both live pricing pages and run a representative pilot before forecasting spend.
Keep capture time predictable
- Use the smallest viewport and output size that meet the review need.
- Wait for the specific content of interest instead of adding a long fixed sleep to every run.
- Block unnecessary resources only if the provider supports it and you have confirmed those resources do not affect the captured page.
- Set a realistic upper bound on navigation and job duration; a generous provider maximum is not a useful operational timeout.
- Stagger large batches to respect concurrency limits and avoid synchronized load spikes.
Protect credentials and results
Keep API keys and cookies in a secret store or protected scheduler settings, not in source control or logged URLs. Restrict access to saved screenshots because they may expose account or customer data. Set retention deliberately, and use authenticated headers or cookies only for resources you are allowed to access.
9. Troubleshooting scheduled captures
| Symptom | Likely cause | What to do |
|---|---|---|
| Blank, CAPTCHA, or access-denied image | Bot defense or access policy. | Check authorization and site terms, inspect the returned page, and report the run as blocked or unusable. Do not assume a screenshot endpoint can bypass defenses. |
| Header or consent layer covers the content | The page is visually ready, but an overlay remains. | Wait for the relevant page state and use a provider’s documented controls where suitable. For a clean shot without manual overlay handling, ScreenshotNeo removes 60+ known consent platforms plus newsletter popups and chat widgets. |
| Screenshot is cut off | Viewport capture was used, or the page had not finished expanding lazy content. | Enable full-page capture where supported, wait for content, and validate long pages. CloudConvert and Browserless both document full-page capture options. |
| Dynamic content is missing | The request captured before the target element appeared, or the page uses delayed rendering. | Wait for a stable selector or an appropriate readiness condition; add a bounded delay only when needed. |
| CloudConvert job appears stuck | The workflow is waiting synchronously on a long task or is not processing async completion. | Use asynchronous job handling for longer work, consume its webhook or poll deliberately, and set an application deadline. Review task timeout settings. |
| Browserless usage is higher than expected | Browser sessions run longer than estimated, partial 30-second intervals round up, or retries add sessions. | Measure session duration, reduce unnecessary waits, cap retries, and compare usage with the live plan limits and pricing. |
| Overlapping or duplicate screenshots | The next schedule fired before the previous run completed, or a retry created another task. | Use a concurrency lock or queue, add a run ID, and choose explicit duplicate handling for stored outputs. |
| Files are missing despite successful requests | The workflow did not persist the response or did not wait for asynchronous completion. | Check the storage step and completion state; verify that the output exists and is nonempty before marking the run complete. |
| Authenticated page shows a login screen | Credentials expired, cookies were omitted, or the capture context differs from the interactive session. | Refresh credentials, pass supported authorization data securely, and validate that the returned page is the intended account and environment. |
10. A practical evaluation plan
- List targets, frequency, output format, viewport, authentication needs, and retention.
- Estimate monthly runs and expected browser duration, including retries.
- Capture one ordinary page and one JavaScript-heavy page using the same settings you plan to schedule.
- Check full-page behavior, target content readiness, overlays, output dimensions, and blocked-page behavior.
- Exercise a timeout and a temporary failure so you can confirm retry limits, alerting, and duplicate handling.
- Confirm storage, concurrency, region or data-location needs, and current plan limits with the vendor documentation.
- Compare the resulting operational fit and projected price, rather than choosing from a headline unit price alone.
11. Frequently asked questions
Can CloudConvert or Browserless schedule screenshots by itself?
The cited screenshot documentation does not establish a complete recurring scheduler for either product. Trigger captures from an external scheduler or workflow and design retries, alerts, and retention there.
Which is better for a recurring screenshot archive?
CloudConvert documents storage integrations and async jobs, which can suit file-oriented workflows. Browserless returns screenshots from its endpoint, so plan for persistence in your caller’s workflow. Your retention and comparison requirements should decide the archive design.
Can I capture a page behind a login?
CloudConvert documents custom authorization headers for protected resources, and Browserless provides navigation and browser controls. Confirm the exact authentication path in the relevant docs and keep credentials secret. Access only pages you are authorized to capture.
Should I use a screenshot API or browser automation?
Use an API when a request and image response fit the job. Use browser automation or a managed browser connection when the workflow needs interaction beyond the documented screenshot controls. For either approach, the recurring trigger and operational handling still need design.
What should count as a failed capture?
Define failure as more than a transport error. Include missing output, unexpected status, blank or challenge content, absent target elements, and expired authentication when those conditions invalidate the image.
