The ZenRows MCP connector routes your AI agent's tool calls to ZenRows's own MCP server through Scalekit. Each user signs in to ZenRows once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 62 tools.
- Tools
- 62
- What they doRead · write · destructive
- 18 · 42 · 218 read42 write2 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
What you can do
- Scrape webpages: fetch any page as clean markdown, with JavaScript rendering and premium proxies when needed
- Extract structured data: pull products, articles, or listings from a page as JSON fields
- Drive a live browser: open pages, click, type, fill forms, scroll, and switch tabs in a browser session
- Capture page content: get the visible text, HTML, a screenshot, or a PDF render of the current page
- Run batch jobs: submit many URLs at once, check job status, cancel runs, and download the results
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the ZenRows MCP connection
In AgentKit > Connections, create a ZenRows MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for ZenRows MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'zenrowsmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize ZenRows MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'zenrowsmcp_batch_results',toolInput: { job_id: 'YOUR_JOB_ID' },})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "zenrowsmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize ZenRows MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={"job_id":"YOUR_JOB_ID"},tool_name="zenrowsmcp_batch_results",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolzenrowsmcp_batch_resultsList result rows for a ZenRows Batch job.Read-onlyBatch Results
List result rows for a ZenRows Batch job. Each row may include task_id, external_id, status, and a short-lived result_url; download soon as presigned links expire.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
cursorstring- next_cursor from a previous batch_results call
limitstring- Max rows to return (default 100, max 1000)
run_idstring- An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run.
statusstring- Filter rows by status (default all). processing = tasks not finished yet. successful also returns expired rows.
zenrowsmcp_batch_statusGet status and stats for a ZenRows Batch job, including latest_run.status and latest_run.stats.Read-onlyBatch Status
Get status and stats for a ZenRows Batch job, including latest_run.status and latest_run.stats.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
zenrowsmcp_batch_waitPoll batch_status until a ZenRows Batch job reaches a terminal state (completed, stopped, or deleted).Read-onlyBatch Wait
Poll batch_status until a ZenRows Batch job reaches a terminal state (completed, stopped, or deleted).
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
timeoutstring- Max wait in seconds (default 50). Many MCP clients cancel a call after 60 s.
timeout_msstring- Deprecated: the same wait in milliseconds. Use the seconds parameter instead.
zenrowsmcp_browser_generate_pdfRender the current page as a PDF document.Read-onlyBrowser Generate Pdf
Render the current page as a PDF document.
Inputs
session_idstringrequired- Session ID returned by browser_navigate
landscapeboolean- Landscape orientation (default false)
print_backgroundboolean- Print background graphics (default false)
scalestring- Page scale factor (default 1)
zenrowsmcp_browser_get_accessibility_treeReturn the accessibility tree of the current page for element discovery and screen-reader testing.Read-onlyBrowser Get Accessibility Tree
Return the accessibility tree of the current page for element discovery and screen-reader testing.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_get_attributeGet the value of a specific HTML attribute from an element matching a CSS selector.Read-onlyBrowser Get Attribute
Get the value of a specific HTML attribute from an element matching a CSS selector.
Inputs
attributestringrequired- HTML attribute name to read, e.g. href, src, data-id.
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_get_htmlReturn the outer HTML of an element or the full page if no selector is given.Read-onlyBrowser Get Html
Return the outer HTML of an element or the full page if no selector is given.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
selectorstring- CSS selector identifying the target element, e.g. #submit-button or .product-card.
zenrowsmcp_browser_get_textReturn the visible text content of an element or the full page if no selector is given.Read-onlyBrowser Get Text
Return the visible text content of an element or the full page if no selector is given.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
selectorstring- CSS selector identifying the target element, e.g. #submit-button or .product-card.
zenrowsmcp_browser_get_titleReturn the current page title.Read-onlyBrowser Get Title
Return the current page title.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_get_urlReturn the current page URL.Read-onlyBrowser Get Url
Return the current page URL.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_query_selector_allReturn all elements matching a CSS selector as an array of handles.Read-onlyBrowser Query Selector All
Return all elements matching a CSS selector as an array of handles.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_screenshotCapture a screenshot of the current page or a specific element.Read-onlyBrowser Screenshot
Capture a screenshot of the current page or a specific element.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
full_pageboolean- Capture the full scrollable page, not just the visible viewport.
selectorstring- CSS selector identifying the target element, e.g. #submit-button or .product-card.
zenrowsmcp_browser_waitPause execution for a specified number of milliseconds.Read-onlyBrowser Wait
Pause execution for a specified number of milliseconds.
Inputs
msintegerrequired- Milliseconds to pause execution.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_wait_for_selectorWait until an element matching a CSS selector appears in the DOM.Read-onlyBrowser Wait For Selector
Wait until an element matching a CSS selector appears in the DOM.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
visibleboolean- If true, wait until the element is visible in the viewport; if false, wait until present in DOM.
zenrowsmcp_extractExtract structured data from a webpage using ZenRows.Read-onlyExtract
Extract structured data from a webpage using ZenRows. Prefer this over scrape when you need JSON fields (products, articles, listings) rather than a full page body. Supports auto (site-tailored Extract, open beta), autoparse (general-purpose), or css (explicit selector map) modes.
Inputs
urlstringrequired- The webpage URL to extract from
css_extractorstring- Required when mode=css. JSON map of field→selector, e.g. '{"title":"h1","price":".price"}'
fallback_autoparseboolean- Deprecated, has no effect: Extract no longer falls back to autoparse. Prepare the domain with prepare_domain instead.
include_htmlboolean- mode=auto only: also return the full page HTML. Default false; the HTML is most of the response size.default
false js_renderboolean- Force JS rendering on every request. Overrides automatic mode (mode=auto), which already renders when needed.
modestring- Extraction mode: auto (extract=auto, default), css (requires css_extractor), or the deprecated autoparsedefault
auto mode_autoboolean- Automatic mode (mode=auto) is on by default; leave unset. False sends a plain request without it.
premium_proxyboolean- Force premium residential proxies on every request (10x cost). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them.
proxy_countrystring- ISO 3166-1 alpha-2 country code. Works in automatic mode (mode=auto); with js_render or mode_auto=false it requires premium_proxy.
waitstring- Milliseconds to wait after load. Requires js_render=true; without it, including in automatic mode, it may be ignored.
wait_forstring- CSS selector to wait for before extracting. Requires js_render=true; without it, including in automatic mode, it may be ignored.
zenrowsmcp_scrapeScrape any webpage and return its content using ZenRows.Read-onlyScrape
Scrape any webpage and return its content using ZenRows. Returns clean markdown by default; supports JavaScript rendering, premium proxies, CSS extraction, and structured output.
Inputs
urlstringrequired- The webpage URL to scrape
autoparseboolean- Automatically extract structured data from the page into JSON. Best for product pages, articles, and listings.
css_extractorstring- Extract specific elements using CSS selectors. JSON object mapping names to selectors, e.g. '{"title":"h1","price":".price-tag"}'. Returns JSON instead of full page content.
js_instructionsstring- JSON array of browser interactions to run before scraping. Works in automatic mode (mode=auto), which then renders the page and bills it at the JS rendering rate, or with js_render=true. Example: [{"click":"#load-more"},{"wait":1000},{"wait_for":".results"}]
js_renderboolean- Force JavaScript rendering on every request. Overrides automatic mode (mode=auto), which already renders JavaScript when a page needs it. Leave unset unless you need a fixed configuration.
outputsstring- Comma-separated list of data types to extract as structured JSON. Available: emails, headings, links, menus, images, videos, audios. Use '*' for all types. Returns JSON instead of full page content.
premium_proxyboolean- Force premium residential proxies on every request (10x credit cost). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them. Leave unset unless you need a fixed configuration.
proxy_countrystring- Country for geo-targeted scraping. ISO 3166-1 alpha-2 code (e.g. 'US', 'GB', 'DE'). Works in automatic mode (mode=auto); if you set js_render without premium_proxy, it requires premium_proxy=true.
response_typestring- Output format. 'markdown' (default) preserves structure and is ideal for LLMs. 'plaintext' strips all formatting for pure text extraction. 'pdf' returns a PDF of the page. 'html' returns the raw HTML source (omits the response_type param; Zenrows default). Ignored when autoparse, css_extractor, outputs, or screenshot params are set.default
markdown screenshotboolean- Capture an above-the-fold screenshot of the page. Returns an image instead of text content. Useful for visual verification or debugging.
screenshot_fullpageboolean- Capture a full-page screenshot including content below the fold. Returns an image instead of text content.
screenshot_selectorstring- Capture a screenshot of a specific element using a CSS selector. Example: ".product-card". Returns an image instead of text content.
waitstring- Milliseconds to wait after page load before capturing content. Max 30000 (30s). Requires js_render=true; without it, including in automatic mode, it may be ignored.
wait_forstring- CSS selector to wait for before capturing. Use when key content loads after the initial page render. Requires js_render=true; without it, including in automatic mode, it may be ignored.
zenrowsmcp_account_usageRead the current plan's credit allowance and how much of it is spent.WriteAccount Usage
Read the current plan's credit allowance and how much of it is spent. Useful before a large batch, or after a 402 / AUTH004, to see whether the account has credits left and when the allowance renews. The call is free and does not use a concurrency slot. Credit costs per request: 1 basic, 5 js_render, 10 premium_proxy, 25 both. AUTH004 ("usage exceeded") means this allowance is spent until it renews at the end of the billing period (period_ends_at in this tool's response). Plans and credit options are described at https://www.zenrows.com/pricing. AUTH006 is the concurrency limit, not a credit limit. AUTH014 (Batch: api_key_cap_reached) means this API key hit one of its own credit caps while the account still has credits; other keys keep working. The response's api_key.caps lists the calling key's caps: window, credits, used_credits, remaining_credits, resets_at, and unavailable (usage could not be read). Caps are managed at https://app.zenrows.com/settings/api-keys.
Inputs
This tool takes no inputs.
zenrowsmcp_batch_contentRead one Batch task's stored result, by job_id and task_id (from batch_results).WriteBatch Content
Read one Batch task's stored result, by job_id and task_id (from batch_results). A text result (HTML, Markdown, plain text, JSON) comes back inline, cut to max_chars (default 20000); a final note says when it was cut. A binary result (a PDF) is not inlined: the reply gives its result_url, presigned for 2 hours. Finding that URL reads the run's results; on a large run one call may run out of time first and answer with lookup_cursor: call batch_content again with it to go on. BATCH_TASK_NOT_READY: the task has not finished; BATCH_TASK_FAILED: it failed (task_error holds its error); BATCH_RESULT_EXPIRED: past the job's retention (14 days by default); rerun to scrape it again.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
task_idstringrequired- task_id from a batch_results row
lookup_cursorstring- lookup_cursor from a previous batch_content reply on a binary result, to go on looking for its result_url
max_charsstring- Max characters of a text result to return (default 20000)
run_idstring- An earlier run's id (from batch_status or batch_rerun). Default: the job's latest run.
zenrowsmcp_batch_createSubmit a cloud Batch job that fans out many URLs asynchronously (ZenRows Batch API, beta).WriteBatch Create
Submit a cloud Batch job that fans out many URLs asynchronously (ZenRows Batch API, beta). Not the same as browser_batch. Returns a job_id and latest_run status/stats; poll with batch_status or batch_wait, then fetch rows with batch_results.
Inputs
idempotency_keystring- Sent as the Idempotency-Key header, up to 128 characters; generated per call when unset. Reusing a key with the identical request within 24 hours returns the original response instead of doing it again; with a different request it is BATCH_IDEMPOTENCY_CONFLICT.
js_renderboolean- Force js_render on all tasks (5 credits each). Overrides automatic mode (mode=auto), which already renders when needed.
mode_autoboolean- Automatic mode (mode=auto) is on by default; leave unset. False sends plain requests without it.
premium_proxyboolean- Force premium_proxy on all tasks (10 credits each, 25 with js_render). Overrides automatic mode (mode=auto), which already uses premium proxies when a page needs them.
proxy_countrystring- Job-level ISO country code. Works in automatic mode (mode=auto); with js_render alone it requires premium_proxy.
response_typestring- Job-level output format. Leave unset for the raw HTML, the default.
tasksstring- Tasks (each needs a url), up to 100,000. Prefer this over urls when you need per-task params.
urlsstring- Shorthand: list of URLs (converted to tasks), up to 100,000. Ignored when tasks is provided.
waitboolean- If true, poll before returning until the run ends or pauses, or wait_timeout passes; a timeout returns the current state with ok:true
wait_timeoutstring- Max wait in seconds when wait=true (default 50). Many MCP clients cancel a call after 60 s.
wait_timeout_msstring- Deprecated: the same wait in milliseconds. Use the seconds parameter instead.
zenrows_paramsstring- Additional job-level scrape params merged with the flags above. Accepted: allowed_status_codes, autoparse, block_resources, css_extractor, custom_headers, extract, extract_fields, js_instructions, js_render, json_response, mode, original_status, outputs, premium_proxy, proxy_country, response_type, session_id, wait, wait_for.
zenrowsmcp_batch_listList this account's Batch jobs, newest first, each with its latest run's status and stats.WriteBatch List
List this account's Batch jobs, newest first, each with its latest run's status and stats. Filter by status (open or closed) and type (regular or scheduled). Pass next_cursor as cursor for the next page; a page can hold fewer than limit jobs while next_cursor is still set, so keep paging until it is null. Deleted jobs are not listed.
Inputs
cursorstring- next_cursor from a previous batch_list call
limitstring- Jobs per page (default 20, max 100)
statusstring- Only jobs with this job status
typestring- Only jobs of this type
zenrowsmcp_batch_pausePause a Batch job's current run: it picks up no new tasks until batch_resume.WriteBatch Pause
Pause a Batch job's current run: it picks up no new tasks until batch_resume. Tasks already in flight still finish and bill; for a hard cost stop use batch_cancel. A paused run still counts as an active job. Idempotent; a run that already ended answers with its final status and already_ended:true.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
zenrowsmcp_batch_rerunStart a new run of a Batch job whose latest run ended (completed, stopped or failed).WriteBatch Rerun
Start a new run of a Batch job whose latest run ended (completed, stopped or failed). By default it reruns only the tasks that failed or never started (status ["failed", "pending"]), and carries the others' results over: the recovery after a run that failed on credits or was cancelled. Pass status to pick other task statuses, or full:true to scrape every task again. Rerun tasks are billed like new ones. A rerun of only some tasks works up to 10 days after the run started (BATCH_RERUN_WINDOW_EXPIRED after that; full:true still works). BATCH_NO_MATCHING_TASKS: no task has those statuses. BATCH_RUN_NOT_FINISHED: the latest run is still in flight. Sends an Idempotency-Key, so a retry never starts two runs. Returns the new run at once (it writes its tasks first, ingesting:true); call batch_wait.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
fullboolean- Rerun every task, not only some (default false)
idempotency_keystring- Sent as the Idempotency-Key header, up to 128 characters; generated per call when unset. Reusing a key with the identical request within 24 hours returns the original response instead of doing it again; with a different request it is BATCH_IDEMPOTENCY_CONFLICT.
statusstring- Task statuses to rerun (default ["failed", "pending"]). Ignored with full:true.
zenrowsmcp_batch_resumeResume a paused Batch run: it picks up its remaining tasks again, billed as they finish.WriteBatch Resume
Resume a paused Batch run: it picks up its remaining tasks again, billed as they finish. Idempotent on a run that is not paused; a run that already ended answers with its final status and already_ended:true. Needs credits: BATCH_INSUFFICIENT_CREDITS or BATCH_KEY_CAP_REACHED otherwise.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
zenrowsmcp_browser_batchExecute a sequence of browser actions in a single call against an existing session.WriteBrowser Batch
Execute a sequence of browser actions in a single call against an existing session. Actions run sequentially and stop at the first failure unless stop_on_error is false.
Inputs
actionsarrayrequired- Ordered list of actions to perform. Each action has a 'type' field plus type-specific parameters.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
stop_on_errorboolean- If true (default), stop executing actions when one fails. Set false to continue on errors.
zenrowsmcp_browser_checkCheck a checkbox or radio button by CSS selector.WriteBrowser Check
Check a checkbox or radio button by CSS selector.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_clear_local_storageDelete every localStorage entry in the current page context.WriteBrowser Clear Local Storage
Delete every localStorage entry in the current page context.
Inputs
session_idstringrequired- Session ID returned by browser_navigate
zenrowsmcp_browser_clickClick an element identified by a CSS selector.WriteBrowser Click
Click an element identified by a CSS selector.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_closeClose a browser session and free its resources.WriteBrowser Close
Close a browser session and free its resources. Always call this when done to avoid session leaks.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_dragDrag an element from a source to a target CSS selector.WriteBrowser Drag
Drag an element from a source to a target CSS selector.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
source_selectorstringrequired- CSS selector for the element to drag from.
target_selectorstringrequired- CSS selector for the element to drop onto.
zenrowsmcp_browser_evaluateExecute a JavaScript expression in the page context and return its result.WriteBrowser Evaluate
Execute a JavaScript expression in the page context and return its result.
Inputs
scriptstringrequired- JavaScript expression to evaluate in the page context. Return value is serialized to JSON.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_fillFill an input, textarea, or contenteditable element with text.WriteBrowser Fill
Fill an input, textarea, or contenteditable element with text.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
valuestringrequired- Text value to set (fill) or option value to select.
zenrowsmcp_browser_focusMove keyboard focus to an element identified by a CSS selector.WriteBrowser Focus
Move keyboard focus to an element identified by a CSS selector.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_get_local_storageRead one localStorage value in the current page context.WriteBrowser Get Local Storage
Read one localStorage value in the current page context.
Inputs
keystringrequired- Storage key to read
session_idstringrequired- Session ID returned by browser_navigate
zenrowsmcp_browser_go_backNavigate to the previous page in the browser history.WriteBrowser Go Back
Navigate to the previous page in the browser history.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_go_forwardNavigate to the next page in the browser history.WriteBrowser Go Forward
Navigate to the next page in the browser history.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_hoverMove the mouse pointer over an element identified by a CSS selector.WriteBrowser Hover
Move the mouse pointer over an element identified by a CSS selector.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_new_tabOpen a new browser tab and navigate to a URL in the current session.WriteBrowser New Tab
Open a new browser tab and navigate to a URL in the current session.
Inputs
session_idstringrequired- Session ID returned by browser_navigate
urlstring- URL to open in the new tab (opens blank tab if omitted)
zenrowsmcp_browser_press_keySimulate pressing a keyboard key, optionally combined with modifier keys.WriteBrowser Press Key
Simulate pressing a keyboard key, optionally combined with modifier keys.
Inputs
keystringrequired- localStorage key to read or write.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_reloadReload the current page.WriteBrowser Reload
Reload the current page.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_browser_scrollScroll the page in a given direction by a specified pixel distance.WriteBrowser Scroll
Scroll the page in a given direction by a specified pixel distance.
Inputs
directionstringrequired- Scroll directionone of
updownleftright session_idstringrequired- Session ID returned by browser_navigate
distancestring- Pixels to scroll (default 500)
zenrowsmcp_browser_select_optionSelect an option in a <select> element by value or label.WriteBrowser Select Option
Select an option in a <select> element by value or label.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
valuestringrequired- Text value to set (fill) or option value to select.
zenrowsmcp_browser_set_local_storageWrite one localStorage value in the current page context.WriteBrowser Set Local Storage
Write one localStorage value in the current page context.
Inputs
keystringrequired- Storage key to write
session_idstringrequired- Session ID returned by browser_navigate
valuestringrequired- Value to store
zenrowsmcp_browser_switch_tabSwitch focus to a different tab in the current session by tab ID.WriteBrowser Switch Tab
Switch focus to a different tab in the current session by tab ID.
Inputs
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
tab_idstringrequired- Numeric tab ID returned by browser_new_tab.
zenrowsmcp_browser_typeType text into the focused element character by character, simulating real keyboard input.WriteBrowser Type
Type text into the focused element character by character, simulating real keyboard input.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
textstringrequired- Text to type character by character into the focused element.
clear_firstboolean- If true, clear the existing field value before typing.
zenrowsmcp_browser_uncheckUncheck a checkbox identified by a CSS selector.WriteBrowser Uncheck
Uncheck a checkbox identified by a CSS selector.
Inputs
selectorstringrequired- CSS selector identifying the target element, e.g. #submit-button or .product-card.
session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
zenrowsmcp_crawl_contentRead the stored page of one URL a crawl kept, in the crawl's output_format.WriteCrawl Content
Read the stored page of one URL a crawl kept, in the crawl's output_format. Works only for crawls created with an output_format, and only for results whose content_status is fetched. Pass crawl_id and content_id: a content id, or content_url from a crawl_results row. Returns the page as stored — raw HTML for output_format "html", Markdown for "markdown" — cut to max_chars (default 20000); a final note says when it was cut. To read a page the crawl did not store, use scrape on its URL instead.
Inputs
content_idstringrequired- A content id (ct_…), or content_url from a crawl_results row; its last path segment is the id
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
max_charsstring- Max characters of the page to return (default 20000)
zenrowsmcp_crawl_createStart a crawl from one URL (Zenrows Crawl API).WriteCrawl Create
Start a crawl from one URL (Zenrows Crawl API). Crawl follows the links in each page's HTML up to depth hops (no depth limit when depth is omitted), keeps the URLs that match include_patterns / exclude_patterns, and stays on the start URL's registrable domain (subdomains count). Use crawl when you have one start page (a listing, category, blog index) and need the URLs behind it, optionally with each page's HTML. For a single page, use scrape. Each page fetched is billed as one scrape on this account; max_pages bounds the cost (default 100), max_items bounds how many URLs are kept (default 100). Without depth, the crawl keeps following links until max_pages or max_items stops it or nothing is left to open, so set max_pages to what you are willing to spend. The start page itself is never a result, but its fetch is billed: a crawl whose include_patterns / exclude_patterns match nothing still costs that one scrape. A crawl whose pages held nothing new to follow (no link, only links to other sites, or only links the patterns reject) ends completed with no results and no error. When patterns are set, check them against the URLs the start page links to. Set output_format "html" or "markdown" to also store each kept URL's page, then read it with crawl_content. Returns crawl_id, status and the crawl (with coverage) at once; the crawl runs asynchronously. Call crawl_wait, then crawl_results. Set idempotency_key to make a retry safe: the same key returns the crawl the first request created instead of starting another. CRAWL_NOT_ENABLED: Crawl is not enabled for this account; do not retry. CRAWL_TOO_MANY_CRAWLS: the account has reached its limit of active jobs (3 by default), shared with its Batch jobs; retry after retry_after seconds.
Inputs
urlstringrequired- Start URL: a public http(s) page, such as a listing or category page
depthstring- Link hops to follow from the start URL. 1 returns the start page's links; 2 also opens those. Omit for no depth limit: the crawl follows links until max_pages or max_items stops it.
discoverystring- How the crawl finds the URLs it follows on each page it walks. ['links'] follows the links in each page's HTML, and is what a crawl runs with when you omit this.
exclude_patternsstring- Drop URLs containing any of these substrings, even if they match include_patterns
idempotency_keystring- Sent as the Idempotency-Key header. Reusing a key returns the crawl it created; reusing it with a different body is CRAWL_INVALID_REQUEST.
include_patternsstring- Keep only URLs containing at least one of these substrings, e.g. ["/product/"]
max_itemsstring- Stop once this many URLs are kept (default 100)
max_pagesstring- Stop once this many pages are fetched, each billed as one scrape (default 100). With output_format, every kept URL's page counts too.
output_formatstring- 'html' or 'markdown' also stores each kept URL's page for crawl_content, as fetched or converted to Markdown. Omit for URLs only.
webhookstring- Where to post the crawl's signed events (crawl.started, then one of crawl.completed, crawl.stopped, crawl.failed). Each is signed with the account's webhook signing key, in the X-Signature header.
zenrowsmcp_crawl_downloadSave every result of a crawl to one local file, as JSON lines: url, content_status and, once fetched, content (the page).WriteCrawl Download
Save every result of a crawl to one local file, as JSON lines: url, content_status and, once fetched, content (the page). Returns the file's path and line count, not the results, so a crawl of any size costs one small reply. Read the file with your own tools. The file goes to path when given (a relative path inside ~/.zenrows/crawls; an absolute path or one that leaves that folder fails with INVALID_PATH), else ~/.zenrows/crawls/<crawl_id>.jsonl. An existing file is kept and the call fails with FILE_EXISTS unless overwrite is true. On a running crawl the file holds only what was kept so far: download again once crawl_wait says it ended. After crawl_stop, pages in flight can still add lines for up to 10 minutes: the reply says so with partial: true. On the hosted server no file is written: the reply gives the download URL and a command to run where your API key is set.
Inputs
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
overwriteboolean- Replace the file if it exists (default false)
pathstring- File to write, relative to ~/.zenrows/crawls (default <crawl_id>.jsonl)
zenrowsmcp_crawl_getGet a crawl and one page of the URLs it kept: crawl_id, status (running, completed, stopped, failed), the crawl (with coverage: pages_fetched, pages_failed, items_found), results and next_cursor.WriteCrawl Get
Get a crawl and one page of the URLs it kept: crawl_id, status (running, completed, stopped, failed), the crawl (with coverage: pages_fetched, pages_failed, items_found), results and next_cursor. completed with stop_reason max_items / max_pages means a limit ended it; stopped with stop_reason user means crawl_stop ended it; stopped with no stop_reason and error.code insufficient_credits or api_key_cap_reached means the account ran out of credits or the API key hit a credit cap (the URLs kept before that stay readable); completed with no results and no error means the crawl's pages held nothing new to follow; when include_patterns / exclude_patterns are set, check them against the URLs the start page links to. failed carries error.code and error.detail: seed_unreachable means the start URL could not be fetched or returned an empty page; no_items_found means the crawl read the start page but found no data it could use, so it had nothing to follow; start from a listing or product page. A failed crawl, and a stopped one with an error, answer ok: false: error.code is CRAWL_INSUFFICIENT_CREDITS or CRAWL_KEY_CAP_REACHED (the codes crawl_create gets on a 402) when credits ended it, failed or stopped, else CRAWL_FAILED; error.server_code is the crawl's error.code. Pass next_cursor as cursor for the next page; while the crawl runs, next_cursor is never null. To read many pages at once, use crawl_results.
Inputs
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
cursorstring- next_cursor from a previous crawl_get call, to continue from there
limitstring- Results in this page (default 100, max 10000)
zenrowsmcp_crawl_listList this account's crawls, newest first, with status and coverage (no results).WriteCrawl List
List this account's crawls, newest first, with status and coverage (no results). Pass next_cursor as cursor for the next page; next_cursor is absent on the last page.
Inputs
cursorstring- next_cursor from a previous crawl_list call
limitstring- Crawls per page (default 20, max 100)
zenrowsmcp_crawl_resultsList the URLs a crawl kept, in the order it kept them, following the API's pages up to limit.WriteCrawl Results
List the URLs a crawl kept, in the order it kept them, following the API's pages up to limit. Each result has url and, when the crawl has output_format, content_status (pending, fetched, failed) and, once fetched, content_url: pass it to crawl_content as content. While the crawl runs the list is partial (partial=true): call again later with the returned next_cursor to get only the URLs kept since. A stopped crawl can still add URLs from pages fetched before the stop for up to 10 minutes, so next_cursor stays set during that window: call again later. next_cursor is null once the crawl ended and every URL was read.
Inputs
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
cursorstring- next_cursor from a previous crawl_results call, to continue from there
limitstring- Max results to return in this call (default 100, max 10000)
zenrowsmcp_crawl_stopStop a running crawl.WriteCrawl Stop
Stop a running crawl. No page still waiting is fetched or billed; pages already in flight finish. The URLs kept so far stay readable with crawl_results. A stopped crawl cannot resume. Idempotent: a crawl that already ended answers with its final status. A 429, 502, 503 or 504 is retried up to 3 times, waiting at most 50 seconds in all; a 503 crawl_busy means the stop was not saved yet, and if it persists, CRAWL_BUSY says when to call again. Pages in flight still finish, so coverage and results can keep growing for up to 10 minutes after the stop; read them with crawl_get and crawl_results.
Inputs
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
zenrowsmcp_crawl_waitPoll a crawl until it ends (completed, stopped, or failed) and return its status, its counts and the first 20 URLs (first_urls).WriteCrawl Wait
Poll a crawl until it ends (completed, stopped, or failed) and return its status, its counts and the first 20 URLs (first_urls). For every result, call crawl_download (one file) or crawl_results (pages). A crawl that ends completed with no results and no error finished; it is not a failure (see crawl_get). If the wait runs out first, it returns the crawl with status running and a note: call crawl_wait again. A call that carries a progressToken gets a progress notification after each poll, with the status and counts.
Inputs
crawl_idstringrequired- Crawl id returned by crawl_create (c_…)
timeoutstring- Max wait in seconds (default 50). Many MCP clients cancel a call after 60 s.
zenrowsmcp_prepare_domainPrepare a domain so extract (mode=auto) works on it.WritePrepare Domain
Prepare a domain so extract (mode=auto) works on it. Use this when extract returns error REQS007 with reason domain_not_prepared. Send the domain (the host, e.g. shop.example.com; a leading www. is dropped, and each host is prepared separately) and 1 to 5 example URLs: real pages you want extracted, one per page kind (for example one product page and one listing page). It returns at once with status "preparing" and never waits; preparation takes a few minutes and costs no credits. Then call prepared_domain_status about every 30 seconds until status is "ready", and call extract again. Each new domain uses one slot of the account's monthly allowance (prepared_domain_status shows it). A domain already being prepared returns its current status; a domain already prepared returns "ready" at once with already_prepared: true and uses no slot. Do not call this for REQS007 with reason page_not_recognised: the domain is already prepared and preparing again does not change that answer.
Inputs
domainstringrequired- The host to prepare, e.g. shop.example.com (a URL is accepted; a leading www. is dropped)
example_urlsarrayrequired- 1 to 5 full URLs of real pages on this domain that you want to extract, one per page kind
idempotency_keystring- Optional. Resending the same key with the same body returns the original submission
zenrowsmcp_prepared_domain_statusCheck a domain submitted with prepare_domain, and the account's monthly allowance.WritePrepared Domain Status
Check a domain submitted with prepare_domain, and the account's monthly allowance. Returns status (preparing, ready or failed), state (the current step), roles (one per page kind), a failure code and detail when it failed, the allowance (used, limit, remaining) and "next": what to do now. Poll about every 30 seconds; preparation takes a few minutes. Call extract again once status is "ready". Costs no credits.
Inputs
domainstringrequired- The domain passed to prepare_domain, e.g. example.com
zenrowsmcp_batch_cancelStop an in-flight ZenRows Batch job run.DestructiveBatch Cancel
Stop an in-flight ZenRows Batch job run.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
zenrowsmcp_batch_deleteDelete a Batch job with all its runs and results, for good.DestructiveBatch Delete
Delete a Batch job with all its runs and results, for good. A run in flight stops picking up tasks at once, and the job frees its active-job slot. The job reads as not found right away; storage is cleaned up in the background. Idempotent. To keep the results, use batch_cancel instead.
Inputs
job_idstringrequired- Batch job id returned by batch_create or batch_list
No tools match.