Give it a URL, get structured rows. A model writes the parser once; replays are free.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your scrapewright API key. Free at https://scrapewright.app — 1,000 rows a month, no card.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Credits left and this month's usage for the key in use.
This tool takes no arguments.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Credits left and this month's usage for the key in use.
No arguments.
{
"type": "object",
"title": "accountArguments",
"properties": {}
}Walk a site and extract every item. Waits up to four minutes; a longer crawl returns a job_id to pass to crawl_status. `mode` picks how the items are found. "rows" (the default) reads every card on the listing itself and follows its pagination -- right for search results, categories and tables. "links" follows each card into its own page, for sites where an item has one. "like" starts from one example item page, given as `like_page`, and finds every other page shaped like it; pass `listing_url` as well when you know the stock or results page, because inferring it is the part that fails.
| Argument | Type | Description |
|---|---|---|
| js | boolean | |
| mode | string | |
| fields | any | |
| scroll | integer | |
| like_page | any | |
| max_items | integer | |
| listing_url* | string |
{
"type": "object",
"title": "crawl_siteArguments",
"required": [
"listing_url"
],
"properties": {
"js": {
"type": "boolean",
"title": "Js",
"default": false
},
"mode": {
"type": "string",
"title": "Mode",
"default": "rows"
},
"fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Fields",
"default": null
},
"scroll": {
"type": "integer",
"title": "Scroll",
"default": 0
},
"like_page": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Like Page",
"default": null
},
"max_items": {
"type": "integer",
"title": "Max Items",
"default": 25
},
"listing_url": {
"type": "string",
"title": "Listing Url"
}
}
}Fetch a crawl that outlived its call.
| Argument | Type | Description |
|---|---|---|
| job_id* | string |
{
"type": "object",
"title": "crawl_statusArguments",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string",
"title": "Job Id"
}
}
}Report what platform a site runs on and which strategy to use. Cheap; call it before a large job.
| Argument | Type | Description |
|---|---|---|
| url* | string |
{
"type": "object",
"title": "detect_siteArguments",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"title": "Url"
}
}
}Extract structured data from ONE page. ``fields`` declares your own schema, e.g. ["title", "salary:number", "tags:list"]; omit it for the product schema. First call on a new site compiles a recipe (300 credits); later calls replay it for 1 credit per row. A site nobody could read is remembered for a week and answered without calling the model, so re-reading a dead page costs nothing. `retry` asks anyway.
| Argument | Type | Description |
|---|---|---|
| js | boolean | |
| url* | string | |
| retry | boolean | |
| fields | any |
{
"type": "object",
"title": "extract_pageArguments",
"required": [
"url"
],
"properties": {
"js": {
"type": "boolean",
"title": "Js",
"default": false
},
"url": {
"type": "string",
"title": "Url"
},
"retry": {
"type": "boolean",
"title": "Retry",
"default": false
},
"fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Fields",
"default": null
}
}
}