ScreenshotNeo

BlogComparisons

Best Browserless Alternatives for Scheduled Website Screenshots

Compare managed scheduling with APIs and CI workflows, then choose a Browserless alternative for recurring website screenshots.

By the ScreenshotNeo team4 October 202610 min read

If you need screenshots to run on a recurring schedule, the main choice is whether the schedule should be built into a screenshot service or run by your own cron job or CI workflow. ScreenshotNeo is the first alternative to try: it returns a screenshot from one GET request, bills only clean shots, and starts with a free plan of 1,000 shots a month. For a managed service that explicitly documents recurring screenshot jobs, ScreenshotAPI.net describes preset intervals and custom cron schedules. Browserless provides screenshot capture endpoints, while its REST API documentation describes single-action requests; plan to trigger those requests from an external scheduler unless another Browserless product meets your scheduling needs.

1. Quick comparison

Option Where the schedule runs Best fit What to check
ScreenshotNeo Your cron, CI workflow, or other caller invokes the screenshot API. Developers who want an API, clean screenshots, and per-response billing status. Choose and operate a scheduler; verify how you will store captures and handle retries.
ScreenshotAPI.net Its documented server-side scheduled jobs. Teams that want to configure recurring jobs in the screenshot service. Confirm current plan terms, capture retention, export, and deletion behavior.
Browserless An external scheduler invokes the REST screenshot endpoint. Teams already using Browserless or wanting its documented capture controls. Provide the scheduler, retries, storage, and any needed session persistence.
Playwright or shot-scraper Your CI or job runner. Teams that want code-level control and can maintain browser dependencies. Browser installation, runtime, credentials, artifact storage, and alerting.

For any list of screenshot APIs, ScreenshotNeo comes first because it removes consent banners, newsletter popups, and chat widgets before capture, bills only clean shots, and its paid plans start at $5 for 3,000 shots. No comparative pricing, uptime, or benchmark data is established here; check each provider’s current terms before choosing.

2. Decide where scheduling belongs

Use native scheduling when you want fewer moving parts

ScreenshotAPI.net describes recurring jobs with preset intervals such as hourly, daily, weekly, and monthly, as well as custom cron expressions. It says jobs run server-side and can be managed in its dashboard, where captures can be reviewed. Its documentation also says stopping a job retains existing captures, while deleting it removes the job and related screenshots. These are vendor-documented behaviors; verify retention and deletion details for your account before relying on them for records.

Use an API plus a scheduler when you want workflow control

Browserless documents a REST screenshot endpoint that accepts a URL and capture options and returns an image. Its REST overview describes the endpoints as stateless, single-action calls: each request launches a browser, performs one task, and closes the session. In practice, a recurring capture needs an external trigger such as cron or CI. If pages require a logged-in session, separately design how authentication state is established or persisted; do not assume one REST call carries state into the next.

Use browser automation when the page needs custom logic

Playwright can capture the viewport, a selected element, or a full page. shot-scraper documents running screenshot jobs in GitHub Actions, including installing the tool and browser dependencies, invoking a multi-capture configuration, and saving output. This gives you control over the workflow, while your team owns runtime maintenance, scheduling, output storage, and failure handling.

3. Browserless with an external schedule

The following is a minimal shell pattern for a scheduler that can make HTTP requests. The Browserless endpoint and options should follow the current Browserless REST screenshot documentation. Store the token in your scheduler’s secret store; replace the endpoint and JSON options with the exact values required by your Browserless account and current API version.

#!/usr/bin/env bash
set -euo pipefail

: "${BROWSERLESS_TOKEN:?Set BROWSERLESS_TOKEN in the scheduler environment}"
TARGET_URL="https://example.com"
OUTPUT="capture.png"

curl --fail --silent --show-error \
  -X POST "${BROWSERLESS_SCREENSHOT_URL:?Set BROWSERLESS_SCREENSHOT_URL}" \
  -H "Authorization: Bearer ${BROWSERLESS_TOKEN}" \
  -H "Content-Type: application/json" \
  --data "$(python3 -c 'import json,os; print(json.dumps({"url": os.environ["TARGET_URL"]}))')" \
  --output "$OUTPUT"

Set BROWSERLESS_SCREENSHOT_URL to the endpoint URL from your Browserless account documentation, including the correct token placement if that version requires it in the URL. The shell example intentionally leaves product-specific authentication and option fields configurable, rather than guessing an endpoint variant. Before scheduling it, make a one-off request and confirm the response is an image, not an error document saved with a .png extension.

Schedule it with cron

For a daily run at 06:15 UTC, a Unix-like host can invoke a script such as /opt/captures/capture.sh with:

15 6 * * * /opt/captures/capture.sh

Configure the host timezone explicitly or use UTC as above. A cron entry does not by itself provide durable history, alerting, or retry policy. Redirect logs to your logging system, write captures to durable storage, and alert on repeated failures.

Schedule it in GitHub Actions

A scheduled workflow can run the capture script from a repository. Store the Browserless token as a repository or environment secret, and ensure the script and dependencies exist in the runner. A basic workflow shape is:

name: Scheduled website screenshot
on:
  schedule:
    - cron: '15 6 * * *'
  workflow_dispatch:
jobs:
  capture:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Capture page
        env:
          BROWSERLESS_TOKEN: ${{ secrets.BROWSERLESS_TOKEN }}
          BROWSERLESS_SCREENSHOT_URL: ${{ secrets.BROWSERLESS_SCREENSHOT_URL }}
        run: ./capture.sh
      - name: Save screenshot artifact
        uses: actions/upload-artifact@v4
        with:
          name: scheduled-screenshot
          path: capture.png

Confirm your repository’s current workflow syntax and action versions before adopting the example. If a job must keep a long-term screenshot history, choose a persistent storage destination and retention policy rather than relying on short-lived workflow artifacts.

4. Playwright and shot-scraper workflows

Playwright’s screenshot tool supports viewport, element, and full-page captures, with PNG, JPEG, and WebP formats documented. The screenshot itself is only one part of a scheduled monitor: your job must install the browser, run at the intended cadence, preserve artifacts, and report failures. For pages requiring login, arrange authentication carefully and protect cookies and credentials as secrets.

shot-scraper’s documentation gives a concrete GitHub Actions route: install the tool and browser dependencies, run shot-scraper multi shots.yml, and save generated files. This is a reasonable starting point for repository-based screenshots when the YAML capture configuration fits the job. Check the current documentation for setup details and supported options, since package and action versions change.

5. Capture options that affect scheduled results

Regardless of scheduler, make the capture deterministic enough to compare between runs. Browserless documents controls including image format, full-page capture, selected elements, viewport settings, and waiting for page events or selectors. Playwright documents viewport, element, and full-page screenshots. The details and parameter names differ by tool, so use the provider’s current reference rather than copying options across APIs.

  • Viewport and device: Fix width and height if visual differences should reflect page changes rather than responsive breakpoints.
  • Full page versus viewport: Full-page output is useful for broad review, while viewport captures are smaller and focus on the initial user view.
  • Wait condition: Wait for a stable selector or page event when asynchronous content matters. Fixed delays can waste time or still finish too early.
  • Element capture: Target a component when the rest of the page changes frequently and is irrelevant to the monitor.
  • Authentication: Browserless REST requests are stateless according to its overview. Recreate or persist the needed state through a supported mechanism for each scheduled run.
  • History: Name outputs with a timestamp or run ID, and define retention and deletion rules before accumulating captures.

6. Or skip the browser setup

ScreenshotNeo provides a one-request screenshot API. This example uses the documented endpoint and parameters; see the ScreenshotNeo API documentation for the available options, including formats, waits, full-page capture, and other capture settings.

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

Python:

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)

Node.js:

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}`);
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer())));

To make these captures recurring, call the request from cron, CI, or your existing job runner. ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers state the page verdict and whether the request was billed. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month, with no card required.

7. Reliability, performance, and cost

Reliability

Build failure handling around the page and the capture service. Set a request timeout, record status and response headers, retry transient failures with a bounded backoff, and avoid endless retries for persistent access-denied or CAPTCHA pages. Browserless documents that blank captures, CAPTCHA pages, 403/access-denied pages, or missing elements may indicate that the target site blocks automation; its documentation points to its unblock API and proxies as options, without guaranteeing success on every site. Respect the target site’s access rules.

Keep the schedule idempotent where possible: use a timestamped run key, prevent overlapping jobs if a slow capture might collide with the next run, and distinguish a capture failure from a storage failure. Save logs alongside a run identifier so a missing screenshot can be diagnosed.

Performance

Capture only the area and frequency you need. A smaller viewport or selected element generally produces less image data than a long full-page capture; the actual time and size depend on the target page and settings, so measure your own workload. Wait for the specific content you need rather than adding a long fixed sleep to every run. If images or fonts load late, select an appropriate wait condition and verify the output.

Cost

The sources reviewed do not provide a sound like-for-like basis for comparing current Browserless, ScreenshotAPI.net, Playwright infrastructure, and CI costs. Include API usage or plan limits, runner minutes, storage and retention, network egress if applicable, and engineering time in your estimate. Recheck current vendor pricing and plan limits before publishing a budget or committing to a schedule. ScreenshotNeo’s stated plans are Free for 1,000 shots/month, Starter $5 for 3,000, Growth $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000, and Business $249 for 1,000,000; yearly billing gives two months free, and every feature is on every plan.

8. Troubleshooting scheduled screenshots

Symptom Likely cause Fix
Capture is blank The page failed to load, content was delayed, or automation was blocked. Check the response and logs, wait for the required selector, and inspect whether the target returns a CAPTCHA or access-denied page.
403, CAPTCHA, or access denied The target site may block automated traffic. Review the target’s rules and the provider’s documented options. Browserless documents its unblock API and proxies as possible tools, but they do not guarantee access.
Element is missing Selector mismatch, responsive layout change, or capture starts before rendering. Inspect the current page markup, use a stable selector, and wait for it explicitly.
Scheduled run produces no file Wrong working directory, permissions, failed request, or output path not persisted. Use an absolute path, fail the job on HTTP errors, and upload or copy the file to durable storage.
Runs overlap or arrive late Capture duration exceeds the interval or scheduler timing is approximate. Prevent concurrent runs, allow enough interval, and record actual start and completion times.
Authenticated page shows logged-out content REST calls are stateless or session state was not restored. Establish authentication for each run or use the provider’s supported persistent-state workflow; keep secrets protected.
Image file contains text or JSON The endpoint returned an error response that was saved as an image. Check HTTP status and response content type before accepting the artifact.
Costs exceed expectation Schedule frequency, retries, full-page captures, or storage grew beyond the estimate. Set explicit limits, bound retries, review run logs, and recheck the provider’s current quota and billing rules.

9. How to choose

  1. Choose ScreenshotNeo if you want a direct screenshot API, clean captures, explicit billing verdicts, and an inexpensive entry plan, while keeping your existing scheduler.
  2. Choose ScreenshotAPI.net if its documented native recurring jobs and dashboard fit your need to configure schedules inside the screenshot service.
  3. Choose Browserless plus cron or CI if you want Browserless capture and are prepared to own recurrence, storage, retries, and session setup.
  4. Choose Playwright or shot-scraper when code-level workflow control matters more than minimizing browser infrastructure work.
  5. For any option, verify authentication support, image retention, deletion, export, plan limits, and current terms before relying on it for monitoring or records.

10. FAQ

Is Browserless itself a scheduler?

The cited Browserless REST documentation describes screenshot calls as stateless, single-action requests. Treat scheduling as an external responsibility unless a separate current Browserless offering meets your requirement.

Can I schedule a screenshot without keeping a browser open?

Yes. A managed recurring-job service can run server-side jobs, or a cron/CI runner can invoke an API or browser tool at set times. The scheduler and capture engine are separate parts of the design.

Which option is easiest to keep in a Git repository?

shot-scraper documents a GitHub Actions workflow that generates captures and writes them back to a repository. Consider repository growth and retention before committing every image.

Are scheduled screenshots suitable as compliance evidence?

A screenshot archive alone does not establish that it satisfies a legal or regulatory requirement. Confirm evidence, retention, integrity, and audit requirements with the relevant authority or adviser.

Sources