
The core conclusion first: n8n has no browser of its own, so every workflow borrows one, and the four borrowing options split on two axes: monthly cost and whether your logged-in sessions come along. Scheduled public scraping at scale points at hosted Browserless or self-hosted community nodes; budget-sensitive work behind your own logins points at a local browser through Execute Command.
That fourth option is the only one where a session you already hold comes along, because the browser is a real desktop one rather than a rented cloud instance. It is also the only one that asks something back: session expiry, MFA, account permissions, and the cost of the machine itself all still apply.
Here are all four with real capabilities and prices, then the complete shape of the local login-wall workflow, since that's the case the cloud options quietly can't serve. Everything below assumes standard n8n; no plugin you can't name is required for any route.
What are the four routes?
Route 1: Browserless over HTTP Request nodes.

No special node needed: Browserless's own n8n docs say to "use n8n's HTTP Request node to call Browserless REST endpoints and BrowserQL," with your API token as a query parameter and copy-paste workflow templates.
The endpoint menu is real: /screenshot, /pdf, /content for HTML, /scrape with CSS selectors, an /unblock endpoint documented by Browserless for sites that require additional handling, and BrowserQL for multi-step GraphQL flows. Hosted, regional endpoints trade operational work for metered billing; an endpoint does not override a site's terms, permissions, or anti-bot decision.
Route 2: Browse AI.
No-code scraping robots you train by clicking, connected to n8n through its integration. The fastest route for a non-developer monitoring a competitor's pricing page; the least flexible when a flow needs logic a robot recorder can't express.
Route 3: community nodes on your own infrastructure.
Free software, self-managed: community packages like n8n-nodes-browserless give you typed nodes against a Browserless instance you host yourself in Docker. No per-request bill, full control, and the operational load (updates, memory, crashes) is yours.
Route 4: a local browser through Execute Command.

Self-hosted n8n runs on a machine; that machine can have a real browser. n8n's Execute Command noderuns shell commands, and a compatible agent browser becomes a workflow step. ego (lite) fits this slot: a free Chromium browser where you and the agent share one session, so it can work from the logins you explicitly open to it, sincethe session belongs to the browser profile you provision and no hosted browser session fees or per-minute billing meters apply.
How do costs and capabilities compare?
The four routes, on the axes that decide real deployments. The login-state column describes the default architecture, not a guarantee that a route can never be configured differently.
| Route | Monthly cost shape | Your logins | Maintenance | Scale ceiling |
|---|---|---|---|---|
| Browserless (hosted) | Metered platform fee; free tier to start | No; cloud sessions | Lowest; it's their infrastructure | High; built for volume |
| Browse AI | Subscription tiers | No | Low, until a robot breaks on a redesign | Medium; robot-shaped tasks only |
| Community nodes, self-hosted | Server costs only | No; automation profiles | Highest; your Docker, your pager | As high as your hardware |
| Local ego (lite) | Browser download is free; host and model costs remain | Possible; explicitly provisioned session | Low; a desktop app | Personal-scale; it's one real machine |
What does the local logged-in workflow look like?

The concrete case: every morning, pull order statuses from a supplier portal that lives behind a login, into a sheet. Cloud routes stall at the login wall (or demand scripted credentials you'd rather not ship); the local route walks through it. The workflow is five nodes, and every one of them is a stock n8n node:
Schedule Trigger (07:30 daily)
→ Execute Command: ego-browser nodejs <<'EOF'
const task = await egoBrowser.newTaskSpace('supplier order check')
await task.page.goto('https://portal.supplier.com/orders',
{ waitUntil: 'load', timeout: 30000 })
const rows = await task.page.locator('.order-row').allInnerTexts()
console.log(rows.join('\n')) // stdout becomes the node's output
EOF
→ Code node: parse stdout lines into JSON items
→ IF node: any status changed since yesterday?
→ Google Sheets append / Slack notifyRequirements: n8n self-hosted on the same machine as ego (lite) (Execute Command runs on the n8n host), and the portal signed into through a supported, user-controlled flow. The session may persist in that browser profile, but expiration, MFA, re-authentication, and site policy still apply. No credentials appear in the workflow; keep the browser profile and host access protected. The same shape covers dashboard pulls and listing checks when the site and account permit it, swapping the URL and selector. This setup works because the browser runs on your own machine and the session is already yours, which is what ego (lite) provides; a hosted browser has no such session to borrow.
Three hardening notes from running this shape in practice. Give the Execute Command node a generous timeout (page loads plus script beat n8n's default on slow mornings). Make the script's final console.log the only stdout you parse, so incidental logging can't corrupt the Code node's input.
And branch on the command's exit code before parsing: a non-zero exit should route to a notify path rather than feeding empty text downstream, which is the difference between "the workflow told me the portal changed" and "the sheet quietly got a blank row."
A scheduled workflow is only as reliable as its browser step, so the executor's record matters: on Real-World Bench, 31 tasks against live sites with the same model (gpt-5.6-sol) and judge, run 2026-08-19 (including a Bankrate calculator run whose results land in an online spreadsheet), ego (lite) completed 93.5% of 31 tasks perfectly, the top score across the five tools measured. That result is specific to this task set and configuration, not a promise for every n8n workflow. The raw runs and rubrics are published on GitHub.
Which route for which workflow?
Public pages at volume, on a schedule, with a provider-approved access path: consider Browserless hosted or a self-hosted community-node deployment, trading operational work against platform fees. Browserless documents additional handling for some protected flows, but neither route guarantees access or overrides a site's rules. Non-developers building a simple monitor can consider Browse AI, accepting its flexibility ceiling.
Data behind your own authorized login, at personal or team scale: consider the local route when a separately provisioned browser and an always-on host fit the policy. It does not remove login expiry or operational cost; it keeps the session on infrastructure you control.
And when one workflow spans both worlds (public discovery at scale, then logged-in detail checks), split it: hosted nodes for the wide half, an Execute Command step against ego (lite) for the authenticated half, joined by ordinary n8n plumbing. The join costs one Merge node and saves you from forcing either route out of its lane.
Download ego (lite) for Mac, free, or read the login-wall guide for the session model behind route 4.
How do you build an n8n Google Maps lead-generation workflow?
Build a Google Maps lead workflow as a scoped discovery-and-verification pipeline: trigger a search, collect only public business fields, normalize and deduplicate them, verify a small sample, then route qualified records to a CRM or review queue. A browser step can handle a rendered map result when no approved API exists, but it does not grant permission to harvest personal data, bypass rate limits, or send unsolicited outreach.
- Trigger with a bounded query. Use a city, category, and maximum result count. Store the query, run time, authorization basis, and source URL with each execution.
- Extract public fields only. Prefer an official business-data API or licensed provider. If a browser is required, collect visible business name, category, address, website, and published contact details while respecting Google's terms, robots guidance where applicable, and origin rate limits.
- Verify before enrichment. Validate URLs, remove duplicates by a stable key, and send uncertain records to human review. Keep lead qualification and email sending in separate nodes with an approval gate.
A durable n8n shape is Schedule Trigger → HTTP Request or browser step → Code normalization → deduplication → human review → CRM or Sheets. Keep the browser task narrow; n8n should own retries, state, and routing rather than asking an agent to improvise the entire sales funnel.
How can you research social and real-estate data without Apify?
Apify is only one execution option. For social or real-estate research, first check an official API, data export, feed, or licensed provider; then choose self-hosted HTTP parsing for stable public HTML or a browser for a small, supervised set of dynamic pages. The trade-off is operational ownership: replacing Apify with a free node moves proxy, rate-limit, parser, and compliance work onto your team.
- Stable public pages. Use HTTP Request plus a parser, cache responses, and validate the schema. This is usually cheaper and easier to monitor than a browser.
- Dynamic or account-owned pages. Use a real browser only for data you are authorized to access. Keep the session local or in an approved vault; never sync raw cookies to a shared worker or paste them into n8n.
- Large recurring volume. Prefer a licensed feed or API. A self-hosted scraper is not automatically free once you count storage, maintenance, blocked runs, and review.
Do not promise that any replacement will avoid blocks. CAPTCHA, 403, account warnings, and terms-based denials are stop signals; switch to an approved source or human review instead of adding stealth, identity rotation, or challenge-solving logic.
What are cost-effective alternatives to Zapier and Apify?
Self-hosting n8n can lower subscription spend, but the real comparison is total cost per successful workflow: hosting, execution time, browser minutes, model tokens, retries, storage, maintenance, and human review. A free Apify alternative or a Zapier replacement is only cheaper if it stays reliable at your volume and does not create a larger operations bill.
| Pattern | Best fit | Hidden cost |
|---|---|---|
| Hosted API | Public, high-volume extraction | Metered requests and provider limits |
| Self-hosted n8n + parser | Stable pages and internal systems | Server, updates, monitoring, parser upkeep |
| Local browser step | Small authenticated workflows | Machine uptime, session expiry, manual review |
Control cost with queue limits, idempotency keys, cached responses, compact structured output, and a budget alert. Count failed retries and duplicate notifications as spend, not as free execution.
How do you trigger a local browser from n8n remotely?
Keep n8n as the orchestrator and expose a narrow, authenticated job interface on the machine that owns the browser. A webhook or queue can pass a task ID and approved parameters to a local runner; the runner executes the browser step and returns structured output. Do not expose Chrome DevTools Protocol, an unrestricted shell, or a browser profile directly to the public internet.
- Define the contract. Accept a task type, URL or record ID, allowed fields, timeout, and idempotency key. Reject arbitrary commands and unknown origins before they reach the browser.
- Authenticate the bridge. Use a private network, mTLS or a short-lived signed token, allowlist the n8n caller, and log each request. The local listener should run as a least-privilege user.
- Return a verifiable result. Return status, schema-version, source URL, timestamp, and validation errors. Route timeout, blocked, and partial states separately instead of returning an empty success payload.
For a same-host deployment, n8n's Execute Command node can call the local browser directly, subject to its security setting and container boundary. In Docker, the command runs inside the n8n container unless you deliberately provide a separate, secured runner. For n8n Cloud, use an authenticated private bridge or self-host the browser step; a cloud workflow cannot see your laptop's profile by default.
How should n8n handle authenticated browser sessions?
Keep authentication in the browser or an approved identity provider, not in workflow text. For a small local job, sign in interactively to the authorized browser profile and let the browser step reuse that session. For a remote worker, use the site's supported OAuth or service account flow; never sync Chrome cookies, auth.json, or refresh tokens as a shortcut.
- Expect MFA and expiry. Pause for 2FA, device checks, consent, and reauthentication. Branch an expired session to a human review path rather than retrying credentials.
- Scope and rotate access. Use a dedicated account with only the required permissions, rotate it through the provider, and revoke access when the workflow or machine is retired.
- Do not treat a cookie sync as portability. Cookies can be device-bound, expire, trigger security checks, or expose the whole account. A supported login flow is safer and easier to audit.
Store only the minimum status n8n needs—such as an opaque task ID and last successful timestamp. Keep screenshots, DOM snapshots, and downloaded statements on an encrypted, access-controlled path with a defined retention period.
How do you debug silent failures in n8n browser workflows?
Make every browser workflow observable and idempotent. A green node means the node returned successfully, not that a remote write landed or that a page contained valid data. Capture the input scope, browser status, exit code, output schema, source timestamp, and downstream write result so a partial failure cannot look like a completed run.
- Name failure states. Separate timeout, 401/403, rate limit, CAPTCHA, empty result, parse error, duplicate, and downstream write failure. Route each to a visible error branch.
- Validate and read back. Check required fields, record counts, types, and ranges. After a database, sheet, or CRM write, read back by idempotency key before notifying anyone.
- Bound retries. Retry transient 5xx or network failures with exponential backoff and a maximum attempt count. Do not retry account blocks, CAPTCHA, or malformed output as if they were temporary.
Use n8n's execution history and error workflows, keep browser traces only as long as necessary, and test scheduled runs with the same user, timezone, filesystem, and environment variables as production. If a node succeeds locally but fails on schedule, compare the execution host and permissions before changing the browser prompt.
How do you secure n8n AI workflows with approval steps?
Put human approval between an AI decision and any irreversible browser or connector action. Let the model propose a scoped task and a structured payload; let a person or deterministic policy approve the destination, fields, amount, audience, and expiry before n8n executes it.
- Preview the action. Show the URL, account, changed fields, message body, attachments, and expected side effect. Do not ask a reviewer to approve an opaque “run agent” button.
- Expire and audit approvals. Bind approval to one task ID and short expiry, record who approved it, and reject replayed or modified payloads.
- Keep a kill switch. Operators must be able to stop the queue, revoke browser credentials, and disable the bridge without asking the model. Limit concurrency and connector permissions by default.
Treat page text, scraped leads, and incoming webhook fields as untrusted input. Validate schemas, escape output, restrict domains, and keep outbound email, purchases, account changes, and public posts behind policy and review. A local browser or self-hosted n8n reduces external sharing but does not remove prompt-injection risk.
FAQ
Does n8n have a built-in browser automation node?
No first-party browser node exists; the officially documented path for hosted browsing is the plain HTTP Request node against a service like Browserless, and everything else is community packages or shell commands. That absence is why this article is a four-way comparison instead of a settings page, and why the login-state column above matters more than any single feature.
Which route is cheapest to start with?
Route 4 can be the lowest-cash starting point when n8n and the browser already run on a machine, but it still costs host time, maintenance, model usage, and review. Browserless offers a free tier to trial public pages; check current limits and pricing before estimating production spend.
Can n8n Cloud use the local browser route?
Not directly: Execute Command runs on the n8n host, and n8n Cloud's host isn't your machine. Cloud users wanting route 4 either self-host n8n locally or bridge with a webhook: the cloud workflow calls a small local listener that runs the ego-browser step and returns results.
How do I handle sites that block automation?
For public targets, Browserless documents an unblock endpoint and BrowserQL handling for some protected flows, with the caveat that no vendor wins every arms race and no tool guarantees access. For your own accounts, use an approved session and follow the site's rules; a real browser does not remove automation detection, rate limits, or account policy.
Does the local route work while I'm logged out of my machine?
The machine needs to be on with ego (lite) running, since route 4's whole premise is a real desktop browser; a laptop that sleeps at 7:29 will miss the 07:30 trigger. Users who need true unattended scheduling either keep a desktop machine awake for it or split the workflow: hosted route for the unattended half, local route for the logged-in half run when present. Where the boundary falls is worth naming: if the job is public pages on a schedule and nothing behind a login, a hosted route is the better fit, and ego (lite) is the better fit when the work sits behind your own logins or has to stay on a machine you control.
What about AI agent nodes in n8n?
n8n's AI agent tooling handles the reasoning layer, and it still needs one of these four routes as its hands whenever a step touches a real page. The pairing works fine: agent node decides, browser route executes, and the route choice follows the same table above.

