Browser as a Service (BaaS)
Pricing
from $25.00 / 1,000 screenshot or page elements
Browser as a Service (BaaS)
Declarative browser automation. Send JSON actions โ navigate, click, type, scrape, screenshot โ get clean structured results. No code required. Powered by Playwright.
Pricing
from $25.00 / 1,000 screenshot or page elements
Rating
0.0
(0)
Developer

Aaron
Actor stats
1
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
๐ Browser as a Service (BaaS)
Automate any website with simple JSON. No code required.
Tell it what page to visit and what to do โ click buttons, fill forms, grab text, take screenshots. It runs a real browser in the cloud and gives you back clean data.
โก How it works (3 steps)
1๏ธโฃ Get your Apify API token
Go to apify.com โ create a free account โ Settings > Integrations โ copy your API token.
2๏ธโฃ Tell it what to do
Send a JSON message with two things:
urlโ the page you want to visitactionsโ a list of steps to perform (in order)
3๏ธโฃ Get your data
Results come back as clean JSON โ text, data, screenshot links, whatever you asked for. Each scraped item shows up as a row in the output table.
๐ค Use with AI โ Just Copy & Paste
Don't know how to code? No problem. Just paste one of these prompts into your favorite AI and tell it what you want. It does the rest.
๐ฌ Prompt for Claude / Claude Code
Copy this whole block, paste it into Claude, and replace the two things in [brackets]:
I want to use the Apify actor "zenacquire/browser-as-a-service" to automate a browser task.My Apify API token: [PASTE YOUR TOKEN HERE]How the actor works:- API: POST https://api.apify.com/v2/acts/zenacquire~browser-as-a-service/runs?token=YOUR_TOKEN- Send JSON with "url" (the page) and "actions" (ordered list of browser steps)- Actions available:โ navigate โ open a pageโ click โ click a button or link (needs "selector")โ type โ fill in a text field (needs "selector" and "value")โ scrape โ grab text from the page (needs "selector" and "name")โ screenshot โ take a picture of the page ("fullPage": true for whole page)โ wait โ pause until something loads (needs "selector" or "ms")โ select โ pick from a dropdown (needs "selector" and "value")โ hover โ mouse over an element (needs "selector")โ scroll โ scroll the page (needs "y" for pixels or "selector" to scroll to)โ evaluate โ run custom JavaScript on the page (needs "expression")Each scraped item comes back as { url, action, value } in the dataset.Screenshots are saved in the key-value store.Get results: GET https://api.apify.com/v2/actor-runs/{RUN_ID}/dataset/items?token=YOUR_TOKENGet screenshots: GET https://api.apify.com/v2/actor-runs/{RUN_ID}/key-value-store/records/{NAME}?token=YOUR_TOKENHere's what I want to do: [DESCRIBE YOUR TASK IN PLAIN ENGLISH]
Example things you can say:
- "Scrape all product names and prices from this Amazon search page: https://amazon.com/s?k=wireless+earbuds"
- "Go to Zillow, search for homes in Austin TX, and grab the first page of listings"
- "Take a screenshot of my website https://mysite.com"
- "Fill out the contact form on https://example.com/contact with my info"
๐ฌ Prompt for ChatGPT
Same idea โ copy, paste, fill in the blanks:
Help me use the Apify actor "zenacquire/browser-as-a-service" to automate a browser task.My Apify token: [PASTE YOUR TOKEN HERE]API: POST https://api.apify.com/v2/acts/zenacquire~browser-as-a-service/runs?token=YOUR_TOKENContent-Type: application/jsonBody: { "url": "...", "actions": [...] }Actions:โ navigate (open page)โ click (selector)โ type (selector + value)โ scrape (selector + name) โ extracts textโ screenshot (name, fullPage)โ wait (selector or ms)โ select (selector + value)โ hover (selector)โ scroll (selector or y pixels)โ evaluate (expression โ runs JavaScript)Results: GET https://api.apify.com/v2/actor-runs/{RUN_ID}/dataset/items?token=YOUR_TOKENEach result = { url, action, value }What I need: [DESCRIBE YOUR TASK IN PLAIN ENGLISH]
๐ Real-World Examples
๐ Grab an Amazon product title and price
{"url": "https://www.amazon.com/dp/B0DXXXXXXXXX","actions": [{ "type": "navigate" },{ "type": "scrape", "selector": "#productTitle", "name": "title" },{ "type": "scrape", "selector": ".a-price .a-offscreen", "name": "price" },{ "type": "screenshot", "name": "product-page", "fullPage": true }]}
Output:
| URL | Action | Value |
|---|---|---|
| amazon.com/dp/... | title | Sony WH-1000XM5 Wireless Headphones |
| amazon.com/dp/... | price | $278.00 |
๐ฐ Scrape Hacker News headlines
{"url": "https://news.ycombinator.com","actions": [{ "type": "navigate" },{ "type": "scrape", "selector": ".titleline > a", "name": "headlines" }]}
๐ Search Google and grab results
{"url": "https://www.google.com","actions": [{ "type": "navigate" },{ "type": "type", "selector": "textarea[name=q]", "value": "best headphones 2026" },{ "type": "click", "selector": "input[name=btnK]" },{ "type": "wait", "selector": "#search" },{ "type": "scrape", "selector": "h3", "name": "results" },{ "type": "screenshot", "name": "search-results", "fullPage": true }]}
๐ธ Screenshot any website
{"url": "https://example.com","actions": [{ "type": "navigate" },{ "type": "screenshot", "name": "full-page", "fullPage": true }]}
๐งช Quick Test (cURL)
Copy-paste into your terminal to test it right now:
curl -X POST "https://api.apify.com/v2/acts/zenacquire~browser-as-a-service/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"url": "https://news.ycombinator.com","actions": [{ "type": "navigate" },{ "type": "scrape", "selector": ".titleline > a", "name": "headlines" },{ "type": "screenshot", "name": "hn", "fullPage": true }]}'
๐ Python
import requests, timeTOKEN = "YOUR_APIFY_TOKEN"BASE = "https://api.apify.com/v2"# Start the runrun = requests.post(f"{BASE}/acts/zenacquire~browser-as-a-service/runs?token={TOKEN}",json={"url": "https://example.com","actions": [{"type": "navigate"},{"type": "scrape", "selector": "h1", "name": "heading"},{"type": "screenshot", "name": "page", "fullPage": True}]}).json()run_id = run["data"]["id"]print(f"๐ Run started: {run_id}")# Wait for it to finishwhile True:status = requests.get(f"{BASE}/actor-runs/{run_id}?token={TOKEN}").json()state = status["data"]["status"]if state in ("SUCCEEDED", "FAILED", "ABORTED", "TIMED-OUT"):breaktime.sleep(2)# Get resultsitems = requests.get(f"{BASE}/actor-runs/{run_id}/dataset/items?token={TOKEN}").json()for item in items:print(f" {item['action']}: {item['value']}")
๐ฆ JavaScript / Node.js
const TOKEN = "YOUR_APIFY_TOKEN";const BASE = "https://api.apify.com/v2";const run = await fetch(`${BASE}/acts/zenacquire~browser-as-a-service/runs?token=${TOKEN}`,{method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({url: "https://example.com",actions: [{ type: "navigate" },{ type: "scrape", selector: "h1", name: "heading" },{ type: "screenshot", name: "page", fullPage: true },],}),}).then((r) => r.json());const runId = run.data.id;console.log(`๐ Run started: ${runId}`);// Wait for it to finishlet state;do {await new Promise((r) => setTimeout(r, 2000));const status = await fetch(`${BASE}/actor-runs/${runId}?token=${TOKEN}`).then((r) => r.json());state = status.data.status;} while (!["SUCCEEDED", "FAILED", "ABORTED", "TIMED-OUT"].includes(state));// Get resultsconst items = await fetch(`${BASE}/actor-runs/${runId}/dataset/items?token=${TOKEN}`).then((r) => r.json());items.forEach((item) => console.log(` ${item.action}: ${item.value}`));
๐ฏ All Actions
| What you want to do | Action | What to include |
|---|---|---|
| ๐ Open a page | navigate | url (optional โ defaults to input url) |
| ๐ Click something | click | selector |
| โจ๏ธ Type into a field | type | selector + value |
| ๐ Grab text from page | scrape | selector + name |
| ๐ธ Take a screenshot | screenshot | name + fullPage (true/false) |
| โณ Wait for something | wait | selector or ms (milliseconds) |
| ๐ Pick from dropdown | select | selector + value |
| ๐ฑ๏ธ Hover over element | hover | selector |
| ๐ Scroll the page | scroll | selector or y (pixels) |
| ๐ป Run JavaScript | evaluate | expression + name |
๐ก What's a selector? It's how you point to something on a page. In Chrome: right-click any element โ Inspect โ right-click the highlighted code โ Copy โ Copy selector. Paste that into the
selectorfield.
โ๏ธ Options
| Setting | Default | What it does |
|---|---|---|
browserType | "chromium" | Browser engine: chromium, firefox, or webkit |
timeoutSecs | 30 | Max seconds to wait per action |
viewport | {"width": 1280, "height": 720} | Browser window size |
proxyConfiguration | none | Use Apify proxy to avoid blocks |
๐ฐ Pricing
| Event | Cost |
|---|---|
| Per scraped result | $7.00 / 1,000 |
| Per screenshot | $25.00 / 1,000 |
| Actor start | $0.00005 |
| Platform usage | Variable (cheaper on higher Apify plans) |


