The split is worth understanding before you start: scrape and extract are single API calls through ZenRows' fetch infrastructure and are the cheap path for most pages, while the browser session tools open a real browser you drive step by step and have to close afterwards to give the slot back. Two operational details save the most time — read the accessibility tree before interacting rather than guessing selectors, and issue the navigation wait before the click that triggers it, not after.
ZenRows' own server over its web-data infrastructure. One tool scrapes a page to markdown, HTML, PDF or a screenshot; another extracts structured JSON; a batch API fans many URLs out asynchronously; and a full browser-session surface drives a real headless browser behind ZenRows' anti-bot handling.
- A page scraped to markdown, plain text, HTML, PDF or a screenshot, with JS rendering, wait conditions, JS instructions and premium proxies by country
- Structured JSON extracted instead of a page body — automatic mode, autoparse, or a CSS extractor you supply, with autoparse available as the fallback
- A cloud batch job fanning many URLs out asynchronously, its status and stats read, its result rows listed, the run stopped, or polled to a terminal state
- A browser session opened on a URL behind ZenRows' anti-bot infrastructure with a proxy region and country, and closed again to release the slot
- The page's ARIA accessibility tree read as text — the documented first step before interacting with anything
- Clicks, hovers, typing, filling, select options, checkboxes, focus, key presses, scrolling and drag-and-drop, all by CSS selector
- Page state read: URL, title, visible text, one attribute, HTML, or every element matching a selector with its text, HTML and attributes
- Screenshots of the page or an element, and the page rendered as a PDF
- Waits for a selector, for navigation, or for a fixed duration — with the navigation wait issued before the action that triggers it
- JavaScript evaluated in the browser context, cookies read, set and cleared, and localStorage read, written or cleared
- Tabs opened and switched, history navigated back and forward, and the page reloaded
- A whole sequence of browser actions sent in one call when you already know the steps, cutting the round trips
A ZenRows account. The hosted server at https://mcp.zenrows.com/mcp takes your API key as an Authorization bearer, or OAuth where the client supports it, and does not create accounts for you. Locally it is npx -y @zenrows/mcp on Node.js, reading ZENROWS_API_KEY or a key already stored in ~/.zenrows/secrets.json — and with neither present the stdio path provisions a Free plan account itself, writes the key and claim metadata under ~/.zenrows/ at mode 0600, and prints a claim URL, which ZENROWS_AUTO_SIGNUP=false turns off. The batch tools are in beta and can return BATCH_ACCESS_DENIED, and the automatic extract mode is open beta, currently free with billing possible later.
One command plus a key — npx -y @zenrows/mcp, then supply credentials
