Install
openclaw skills install mrscraperRun AI-powered, unblockable web scraping, data extraction with natural language via the MrScraper API
openclaw skills install mrscraperRun AI-powered, unblockable web scraping, data extraction with natural language via the MrScraper API
This skill supports:
This skill is API-only and does not depend on bundled local scripts.
https://api.mrscraper.comhttps://api.app.mrscraper.comUse query-param auth on unblocker endpoint:
token=<MRSCRAPER_API_TOKEN>Use header-based auth on platform endpoints:
x-api-token: <MRSCRAPER_API_TOKEN>
accept: application/json
content-type: application/json
MRSCRAPER_API_TOKEN?An API token lets your applications securely interact with MrScraper APIs and rerun scrapers created in the dashboard.
Follow these steps in the dashboard:
MRSCRAPER_API_TOKEN.x-api-token header.Security rule:
Notes from the auth docs:
sync.scraper.mrscraper.com.support@mrscraper.com.scripts/ are required.api.app.mrscraper.com and api.mrscraper.com.GEThttps://api.mrscraper.comtoken query parameterOpens a target URL through stealth browsing and IP rotation, then returns HTML. Use this when direct access is blocked by captcha or anti-bot protections.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
token | string | Yes | — | Unblocker token (MRSCRAPER_API_TOKEN) |
url | string | Yes | — | URL-encoded target URL |
timeout | number | No | 60 | Max wait in seconds (example 120) |
geoCode | string | No | None | Geographic routing code (example SG) |
blockResources | boolean | No | false | Block non-essential resources |
curl --location 'https://api.mrscraper.com?token=<MRSCRAPER_API_TOKEN>&timeout=120&geoCode=SG&url=https%3A%2F%2Fwww.lazada.sg%2Fproducts%2Fpdp-i111650098-s23209659764.html&blockResources=false'
<!doctype html>
<html>
<head>...</head>
<body>...</body>
</html>
geoCode and practical timeouts for repeatable behavior.POSThttps://api.app.mrscraper.com/api/v1/scrapers-aix-api-tokenCreate a new AI scraper run from natural-language instructions.
agent: general or agent: listing):| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Yes | — | Target URL |
message | string | Yes | — | Extraction instruction |
agent | string | No | general | The AI agent type to use for scraping: general, listing, or map |
proxyCountry | string | No | None | ISO country code for proxy-based scraping |
agent: map):| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Yes | — | Target URL |
agent | string | No | map | The AI agent type to use for scraping (for this case it is map) |
maxDepth | number | No | 2 | Maximum depth level for crawling links from the starting URL.<br>0 = only the starting URL, 1 = +direct links |
maxPages | number | No | 50 | Maximum number of pages to scrape during the crawling process. |
limit | number | No | 1000 | Maximum number of data records to extract across all pages. Scraping stops when this limit is reached. |
includePatterns | string | No | "" | Regex patterns to include (separate multiple with ||) |
excludePatterns | string | No | "" | Regex patterns to exclude (separate multiple with ||) |
curl -X POST "https://api.app.mrscraper.com/api/v1/scrapers-ai" \
-H "x-api-token: <MRSCRAPER_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"message": "Extract title, price, stocks, and rating",
"agent": "general"
}'
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"createdAt": "2019-08-24T14:15:22Z",
"createdById": "e13e432a-5323-4484-a91d-b5969bc564d9",
"updatedAt": "2019-08-24T14:15:22Z",
"updatedById": "d8bc6076-4141-4a88-80b9-0eb31643066f",
"deletedAt": "2019-08-24T14:15:22Z",
"deletedById": "8ef578ad-7f1e-4656-b48b-b1b4a9aaa1cb",
"userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"type": "AI",
"url": "http://example.com",
"status": "Finished",
"error": "string",
"tokenUsage": 0,
"runtime": 0,
"data": {}, // MAIN SCRAPED DATA
"htmlPath": "string",
"recordingPath": "string",
"screenshotPath": "string",
"dataPath": "string"
}
general for most standard web scraping tasks. The go to agent if the user doesn't specify or the connected LLM is not confident about the type of page. But mostly used for scraping product page, but handles any type of page very well as well. Use listing for scraping listing pages like product listings, job listings, etc. Choose this if the connected LLM can confidently identify whether the given URL is a listing page. Use map for crawling and getting all subdomain or subpages of a website. Choose this if the user specifies that the given URL is a website and not a specific page. For map agent type, there is a special args that can be used to configure the scraping process.map agent, you can use special arguments to control crawling:<br>maxDepth (lower values 1–2 for focused scraping, max 3 recommended),<br>maxPages (limits total pages regardless of depth),<br>limit (caps total records extracted),<br>and includePatterns/excludePatterns (regex patterns separated by || to specify which URLs to crawl or skip, e.g., */products/*||*/blog/* or */cart/*||*.pdf).<br>If includePatterns is an empty string, all URLs are included. If excludePatterns is an empty string, no URLs are excluded.POSThttps://api.app.mrscraper.com/api/v1/scrapers-ai-rerunx-api-tokenReruns an existing scraper configuration on a new URL.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
scraperId | string | Yes | — | Scraper ID retrieved from created AI scraper |
url | string | Yes | — | Target URL |
map agent:| Field | Type | Required | Default | Description |
|---|---|---|---|---|
maxDepth | number | No | 2 | Crawl depth |
maxPages | number | No | 50 | Maximum pages to crawl |
limit | number | No | 1000 | Result limit |
includePatterns | string | No | "" | Regex patterns to include (separate multiple with ||) |
excludePatterns | string | No | "" | Regex patterns to exclude (separate multiple with ||) |
curl -X POST "https://api.app.mrscraper.com/api/v1/scrapers-ai-rerun" \
-H "accept: application/json" \
-H "x-api-token: <MRSCRAPER_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"url": "https://shopee.sg/"
}'
{
"message": "Successful operation!",
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"createdAt": "2019-08-24T14:15:22Z",
"createdById": "e13e432a-5323-4484-a91d-b5969bc564d9",
"updatedAt": "2019-08-24T14:15:22Z",
"updatedById": "d8bc6076-4141-4a88-80b9-0eb31643066f",
"deletedAt": "2019-08-24T14:15:22Z",
"deletedById": "8ef578ad-7f1e-4656-b48b-b1b4a9aaa1cb",
"userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"type": "Rerun-AI",
"url": "http://example.com",
"status": "Finished",
"error": "string",
"tokenUsage": 0,
"runtime": 0,
"data": {}, // MAIN SCRAPED DATA
"htmlPath": "string",
"recordingPath": "string",
"screenshotPath": "string",
"dataPath": "string",
"htmlContent": "string"
}
}
POSThttps://api.app.mrscraper.com/api/v1/scrapers-ai-rerun/bulkx-api-tokenRuns one scraper configuration over multiple URLs.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
scraperId | string | Yes | — | Existing AI scraper configuration ID |
urls | array[string] | Yes | — | Target URLs to run |
curl -X POST "https://api.app.mrscraper.com/api/v1/scrapers-ai-rerun/bulk" \
-H "x-api-token: " \
-H "Content-Type: application/json" \
-d '{
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"urls": [
"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
"https://books.toscrape.com/catalogue/soumission_998/index.html"
]
}'
{
"message": "Bulk rerun started successfully",
"data": {
"bulkResultId": "f89f8f58-3c9a-42e5-a72e-59fa6c389f09",
"status": "Running",
"totalUrls": 3
}
}
POSThttps://api.app.mrscraper.com/api/v1/scrapers-manual-rerunx-api-tokenExecutes a rerun using a manual browser workflow.
Before calling the manual rerun endpoint, you need to create and save a manual scraper from the dashboard. Follow these steps:
MrScraper dashboard and go to Scraper.New Manual Scraper +.Input, Click, Delay, Extract, Inject JavaScript).Query Pagination, Directory Pagination, or Next Page Link).scraperId to use in API reruns.| Field | Type | Required | Default | Description |
|---|---|---|---|---|
scraperId | string | Yes | — | ID of the manual scraper to rerun. |
url | string | Yes | — | Target URL for the rerun. |
workflow | array<object> | No | None | Allows overriding the saved workflow steps. By default, uses the workflow saved during manual creation. |
curl -X POST "https://api.app.mrscraper.com/api/v1/scrapers-manual-rerun" \
-H "accept: application/json" \
-H "x-api-token: " \
-H "Content-Type: application/json" \
-d '{
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"url": "https://books.toscrape.com/",
"workflow": [
{
"type": "extract",
"data": {
"extraction_type": "text",
"attribute": null,
"name": "book",
"selector": "h3 a"
}
}
],
"record": false,
"paginator": {
"type": "query_pagination",
"max_page": 1,
"enabled": false
}
}'
{
"message": "Successful operation!",
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"createdAt": "2019-08-24T14:15:22Z",
"createdById": "e13e432a-5323-4484-a91d-b5969bc564d9",
"updatedAt": "2019-08-24T14:15:22Z",
"updatedById": "d8bc6076-4141-4a88-80b9-0eb31643066f",
"deletedAt": "2019-08-24T14:15:22Z",
"deletedById": "8ef578ad-7f1e-4656-b48b-b1b4a9aaa1cb",
"userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"type": "Rerun-AI",
"url": "http://example.com",
"status": "Finished",
"error": "string",
"tokenUsage": 0,
"runtime": 0,
"data": {}, // MAIN SCRAPED DATA
"htmlPath": "string",
"recordingPath": "string",
"screenshotPath": "string",
"dataPath": "string",
"htmlContent": "string"
}
}
POSThttps://api.app.mrscraper.com/api/v1/scrapers-manual-rerun/bulkx-api-tokenRuns one scraper configuration over multiple URLs.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
scraperId | string | Yes | — | Existing manual scraper configuration ID |
urls | array[string] | Yes | — | Target URLs to run |
curl -X POST "https://api.app.mrscraper.com/api/v1/scrapers-manual-rerun/bulk" \
-H "x-api-token: " \
-H "Content-Type: application/json" \
-d '{
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"urls": [
"https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html",
"https://books.toscrape.com/catalogue/tipping-the-velvet_999/index.html",
"https://books.toscrape.com/catalogue/soumission_998/index.html"
]
}'
{
"message": "Bulk rerun started successfully",
"data": {
"bulkResultId": "f89f8f58-3c9a-42e5-a72e-59fa6c389f09",
"status": "Running",
"totalUrls": 3
}
}
GEThttps://api.app.mrscraper.com/api/v1/resultsx-api-tokenReturns paginated scrape results.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
sortField | string | Yes | updatedAt | Sort column |
sortOrder | string | Yes | DESC | Sort direction |
page | number | Yes | 1 | Page number |
pageSize | number | Yes | 10 | Items per page |
search | string | No | None | Search keyword |
dateRangeColumn | string | No | createdAt | Date field to filter |
startAt | string | No | None | Date range start (ISO) |
endAt | string | No | None | Date range end (ISO) |
sortField options: createdAt, updatedAt, id, type, url, status, error, tokenUsage, runtimesortOrder options: ASC, DESCdateRangeColumn options: createdAt, updatedAtcurl -X GET "https://api.app.mrscraper.com/api/v1/results?sortField=updatedAt&sortOrder=DESC&pageSize=10&page=1" \
-H "accept: application/json" \
-H "x-api-token: <MRSCRAPER_API_TOKEN>"
{
"message": "Successful fetch",
"data": [
{
"createdAt": "2025-11-11T09:50:09.722Z",
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"type": "AI",
"url": "http://example.com",
"status": "Finished",
"error": "string",
"tokenUsage": 5,
"runtime": 0,
"data": "{ \"title\": \"Product A\", \"price\": \"$10\" }",
"htmlPath": "string",
"recordingPath": "string",
"screenshotPath": "string",
"dataPath": "string"
}
],
"meta": {
"page": 1,
"pageSize": 10,
"total": 1,
"totalPage": 1
}
}
GEThttps://api.app.mrscraper.com/api/v1/results/{id}x-api-tokenReturns one detailed result object for a specific result ID.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | Yes | — | Result ID |
curl -X GET "https://api.app.mrscraper.com/api/v1/results/497f6eca-6276-4993-bfeb-53cbbbba6f08" \
-H "accept: application/json" \
-H "x-api-token: <MRSCRAPER_API_TOKEN>"
{
"message": "Successful fetch",
"data": [
{
"createdAt": "2025-11-11T09:50:09.722Z",
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",
"scraperId": "6695bf87-aaa6-46b0-b1ee-88586b222b0b",
"type": "AI",
"url": "http://example.com",
"status": "Finished",
"error": "string",
"tokenUsage": 5,
"runtime": 0,
"data": "string",
"htmlPath": "string",
"recordingPath": "string",
"screenshotPath": "string",
"dataPath": "string"
}
]
}
Standard platform API errors:
| Status | Meaning |
|---|---|
400 | Invalid request payload |
401 | Missing or invalid API token |
404 | Scraper or result not found |
429 | Rate limit exceeded |
500 | Internal scraper error |
Error format:
{
"message": "string",
"error": "string",
"statusCode": "number"
}
429 with exponential backoff.