
Self-hosting Browserless the easy way
Yulei ChenBrowserless gives you a headless Chrome browser as a service. It handles web scraping, screenshot capture, PDF generation, and automated testing through a simple REST API. The official cloud offering can get expensive quickly, especially at scale, and you're sharing resources with other users.
Sliplane is a managed container platform that makes self-hosting painless. With one-click deployment, you can get Browserless up and running in minutes - no server setup, no reverse proxy config, no infrastructure to maintain.
Prerequisites
Before deploying, ensure you have a Sliplane account (free trial available).
Quick start
Sliplane provides one-click deployment with presets.
- Click the deploy button above
- Select a project
- Select a server (If you just signed up you get a 48-hour free trial server)
- Click Deploy!
About the preset
The one-click deploy above uses Sliplane's Browserless preset. Here's what it includes:
- Chromium-based image (
ghcr.io/browserless/chromium) for a lightweight headless browser - Specific version tag (
v2.49.0) for stability - Token authentication enabled by default with a randomly generated 32-character token
- Healthcheck configured against
/docsto verify the service is running - No persistent storage needed since Browserless is a stateless service
Next steps
Visit https://browserless-xxxx.sliplane.app/docs to see the built-in API documentation.
Authentication
All API requests require the TOKEN value set in your environment variables. You can find it in your service settings on Sliplane. Pass it as a query parameter or header:
# Query parameter
curl "https://your-domain.sliplane.app/screenshot?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}' \
--output screenshot.png
# Authorization header
curl "https://your-domain.sliplane.app/screenshot" \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{"url": "https://example.com"}' \
--output screenshot.png
Common API endpoints
Browserless exposes several useful endpoints out of the box:
| Endpoint | Description |
|---|---|
/screenshot | Capture screenshots of web pages |
/content | Get the HTML content of a page |
/pdf | Generate PDFs from web pages |
/scrape | Scrape structured data from pages |
/function | Run custom Puppeteer/Playwright functions |
Environment variables
You can customize Browserless behavior by adding environment variables in your Sliplane service settings:
| Variable | Description | Default |
|---|---|---|
TOKEN | Authentication token for API access | (auto-generated) |
CONCURRENT | Max concurrent browser sessions | 10 |
QUEUED | Max queued requests | 10 |
TIMEOUT | Default request timeout in ms | 30000 |
HEALTH | Enable health checks | true |
Logging
Browserless logs to STDOUT by default, which integrates well with Sliplane's built-in log viewer. For more detailed output, set the DEBUG environment variable to browserless*. For general Docker log tips, check out our post on how to use Docker logs.
Cost comparison
You can also self-host Browserless with other cloud providers. Here is a pricing comparison for the most common ones:
| Provider | vCPU | RAM | Disk | Monthly Cost | Note |
|---|---|---|---|---|---|
| Sliplane | 2 | 2 GB | 40 GB | €9 (~$10.65) | Flat rate, 1 TB bandwidth, SSL included |
| Fly.io | 2 | 2 GB | 40 GB | ~$18 | Disk and bandwidth billed separately |
| Render | 1 | 2 GB | 40 GB | ~$35 | 100 GB bandwidth, Disk billed separately |
| Railway | 2 | 2 GB | 40 GB | ~$67 + $20 plan | Pro plan floor, usage-based, bandwidth billed separately |
Click here to see how these numbers were calculated.
(Assuming an always-on instance running 730 hrs/month)
- Sliplane: flat €9/month for the Base server. Unlimited services on the same server, 1 TB egress and SSL included.
- Fly.io:
shared-cpu-2x2 GB = $11.83/mo + 40 GB volume × $0.15/GB = $6 -> ~$17.83/mo. Egress billed separately ($0.02/GB in EU). - Render: closest match is Standard ($25, 1 vCPU / 2 GB) plus 40 GB disk × $0.25/GB = $10 -> ~$35/mo. Stepping up to Pro (2 vCPU / 4 GB) costs $85/mo + disk.
- Railway (Pro plan): CPU 2 × $0.00000772/s × 2,628,000 s = $40.57; RAM 2 × $0.00000386/s × 2,628,000 s = $20.29; volume 40 × $0.00000006/s × 2,628,000 s = $6.31 -> ~$67/mo compute, plus the $20/mo Pro plan floor and $0.05/GB egress.
Bandwidth costs can add up fast on usage-based providers. Use our bandwidth cost comparison tool to see what your egress would cost on each platform.
FAQ
What can I use Browserless for?
Browserless is great for any task that needs a real browser environment without a visible window. Common use cases include web scraping, generating PDFs or screenshots from URLs, running end-to-end tests with Puppeteer or Playwright, and automating form submissions. It's especially useful when you need browser rendering at scale in backend workflows or automation pipelines.
How do I limit concurrent sessions?
Set the CONCURRENT environment variable in your Sliplane service settings. The default is 10, which means up to 10 browser sessions can run at the same time. If you're on a smaller server, lowering this to 5 or even 2 can help keep memory usage stable.
How do I update Browserless?
Change the image tag in your service settings on Sliplane and redeploy. Check GitHub Container Registry for the latest stable version tags.
Are there alternatives to Browserless?
Yes. Playwright and Puppeteer can be run as standalone services in Docker. Selenium Grid is another option for distributed browser automation. However, Browserless is unique in offering a clean REST API that doesn't require any client-side libraries, making it easy to integrate from any language or platform.
Can I use Browserless with Puppeteer or Playwright?
Absolutely. Instead of launching a local browser, point your Puppeteer or Playwright client at your Browserless instance using the WebSocket endpoint. For Puppeteer, use puppeteer.connect({ browserWSEndpoint: 'wss://your-domain.sliplane.app?token=YOUR_TOKEN' }). For Playwright, use the connectOverCDP method with the same URL.