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 43 tools.
- Tools
- 43
- What they doRead · write · destructive
- 18 · 24 · 118 read24 write1 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.
statusstring- Filter results by status (default: all).one of
successfulfailedall
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.
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.
timeout_msinteger- Max wait time in milliseconds (default 600000).
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. Required by all browser_* tools.
landscapeboolean- Render PDF in landscape orientation (default false).
print_backgroundboolean- Include CSS background graphics in the PDF (default false).
scalenumber- Page scale factor for PDF rendering, 0.1–2 (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 data from.
css_extractorstring- Required when mode=css. JSON map of field to selector, e.g. {"title":"h1","price":".price"}.
fallback_autoparseboolean- When mode=auto and the domain is not in the Extract open beta, retry once with autoparse.default
true js_renderboolean- Enable headless JavaScript rendering for SPAs and dynamically loaded content.
modestring- Extraction mode: 'auto' (default, site-tailored Extract), 'autoparse' (general-purpose JSON), or 'css' (requires css_extractor).one of
autoautoparsecssdefaultauto mode_autoboolean- Enable Adaptive Stealth Mode (mode=auto) for tougher, anti-bot-protected sites.
premium_proxyboolean- Use premium residential proxies to bypass anti-bot protection. Higher credit cost.
proxy_countrystring- ISO 3166-1 alpha-2 country code for geo-targeted proxy. Requires premium_proxy or mode_auto.
waitinteger- Milliseconds to wait after page load before extracting. Max 30000. Requires js_render.
wait_forstring- CSS selector to wait for before extracting. Requires js_render.
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- Full URL to navigate to or scrape (must include scheme, e.g. https://).
autoparseboolean- Automatically extract structured data from the page into JSON. Best for product pages, articles, and listings.
css_extractorstring- CSS selector map for targeted extraction, e.g. {"title":"h1","price":".price-tag"}. Returns JSON instead of full page content.
js_instructionsstring- JSON array of browser interactions before scraping, e.g. [{"click":"#load-more"},{"wait":1000}]. Requires js_render=true.
js_renderboolean- Enable headless JavaScript rendering. Required for SPAs (React, Vue, Angular) and dynamically loaded content.default
false outputsstring- Comma-separated data types to extract as structured JSON: emails, headings, links, menus, images, videos, audios. Use * for all.
premium_proxyboolean- Use premium residential proxies to bypass heavy anti-bot protection. Higher credit cost.default
false proxy_countrystring- ISO 3166-1 alpha-2 country code for geo-targeted proxy, e.g. US, GB, DE.
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.one of
markdownplaintextpdfhtmldefaultmarkdown screenshotboolean- Capture an above-the-fold screenshot instead of text content.
screenshot_fullpageboolean- Capture a full-page screenshot including content below the fold.
screenshot_selectorstring- Capture a screenshot of a specific element by CSS selector instead of the full page.
waitinteger- Milliseconds to wait after page load before capturing. Max 30000. Requires js_render=true.
wait_forstring- CSS selector to wait for before capturing. Requires js_render=true.
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
js_renderboolean- Job-level js_render applied to all tasks.
premium_proxyboolean- Job-level premium_proxy applied to all tasks.
proxy_countrystring- Job-level ISO 3166-1 alpha-2 country code. Requires premium_proxy or mode=auto.
response_typestring- Job-level response_type applied to all tasks.one of
markdownplaintexthtmlpdf tasksarray- List of tasks, each needing a url. Prefer this over urls when you need per-task params.
urlsarray- Shorthand list of URLs, converted to tasks. Ignored when tasks is provided.
waitboolean- If true, poll until the job reaches a terminal state before returning.
wait_timeout_msinteger- Max wait time in milliseconds when wait=true (default 600000).
zenrows_paramsobject- Additional job-level zenrows_params merged with the flags above.
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_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_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_local_storageRead, write, or clear localStorage in the current page context.WriteBrowser Local Storage
Read, write, or clear localStorage in the current page context.
Inputs
actionstringrequired- Operation: get a value, set a value, or clear allone of
getsetclear session_idstringrequired- Session ID returned by browser_navigate. Required by all browser_* tools.
keystring- localStorage key to read or write.
valuestring- Text value to set (fill) or option value to select.
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. Required by all browser_* tools.
urlstring- Full URL to navigate to or scrape (must include scheme, e.g. https://).
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. Required by all browser_* tools.
distanceinteger- 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_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_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 to stop.
No tools match.