{"name":"com.hasdata/web-scraping","slug":"hasdata-web-scraping","title":"HasData Web Scraping","description":"Fetch any public web page through managed proxies, with optional JS rendering and extraction rules.","url":"https://mcp.market/server/hasdata-web-scraping","rating":null,"grade":"A","score":100,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":44,"stars":11,"forks":0,"downloads_week":130,"last_push_at":"2026-09-24T14:16:30.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T03:51:10.141Z","last_ok_at":"2026-11-04T03:51:10.141Z","latency_ms":149},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/HasData/web-scraping-mcp","website":"https://hasdata.com/web-scraping-api","version":"1.0.2","remotes":[{"type":"streamable-http","url":"https://mcp.hasdata.com/mcp?apis=web_scraping","headers":[{"description":"HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.","isRequired":true,"isSecret":true,"name":"x-api-key"}]}],"packages":[{"registryType":"npm","identifier":"@hasdata/web-scraping-mcp","version":"1.0.2","transport":{"type":"stdio"},"environmentVariables":[{"description":"HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.","isRequired":true,"isSecret":true,"name":"HASDATA_API_KEY"}]},{"registryType":"pypi","identifier":"hasdata-web-scraping-mcp","version":"1.0.2","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"HasData API key, created at app.hasdata.com. 1,000 free credits every month, no card.","isRequired":true,"isSecret":true,"name":"HASDATA_API_KEY"}]}],"tools":[{"name":"hasdata_web_scraping_web_scraping_scrapeWebPage","description":"Scrape Web Page\n\nUniversal web scraper that fetches any public URL through managed proxies (datacenter or residential, geo-targeted) with optional JS rendering, custom headers, wait conditions, jsScenario actions (click, scroll, fill, waitFor), screenshots, resource/ad/URL blocking (these require JS rendering), and extractRules/aiExtractRules for LLM-driven structured extraction. Returns HTML, text, markdown, and/or JSON along with status code, extracted emails and links, CSS-selector extractions, and AI-structured fields per schema. Use as a fallback/universal fetcher for sites without a dedicated API, for scraping JS-heavy SPAs, capturing screenshots, or producing clean markdown/structured JSON to feed downstream parsers, RAG pipelines, or data warehouses.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"url":{"type":"string","description":"The URL of the web page to scrape."},"headers":{"type":"object","additionalProperties":{},"description":"Optional custom headers to send with the request."},"proxyType":{"type":"string","enum":["datacenter","residential"],"description":"Type of proxy to use."},"proxyCountry":{"type":"string","enum":["US","UK","DE","IE","FR","IT","SE","BR","CA","JP","SG","IN","ID"],"description":"Optional proxy country code."},"blockResources":{"type":"boolean","description":"Whether to block loading of resources like images and stylesheets."},"blockAds":{"type":"boolean","description":"Whether to block ads."},"blockUrls":{"type":"array","items":{"type":"string"},"description":"List of URLs to block."},"wait":{"type":"number","description":"Time in milliseconds to wait after the page load."},"waitFor":{"type":"string","description":"CSS selector to wait for before scraping."},"jsScenario":{"type":"array","items":{"type":"object","additionalProperties":{}},"description":"Enables custom JavaScript interactions on the target webpage during scraping. It's an array where each object defines a specific action or step. These actions can include clicking elements, waiting for elements, executing custom scripts, and more. Key actions within this field include:\n\n- `evaluate`: Run custom JavaScript code on the page.\n- `click`: Click on an element specified by a CSS selector.\n- `wait`: Pause for a set duration (in milliseconds).\n- `waitFor`: Delay until a specific element appears.\n- `waitForAndClick`: Combine waiting for an element and then clicking it.\n- `scrollX`, `scrollY`: Scroll to specified positions on the page.\n- `fill`: Enter values into input fields identified by CSS selectors.\n\nActions are executed sequentially.\n"},"extractRules":{"type":"object","additionalProperties":{},"description":"Rules for extracting specific data from the page. For example: `{ \"title\": \"h1\", \"link_href\": \"a#link @href\", \"page_text\": \"body\" }`\n"},"screenshot":{"type":"boolean","description":"Whether to take a screenshot of the page."},"jsRendering":{"type":"boolean","description":"Enable JavaScript rendering."},"autoMode":{"type":"boolean","description":"Use the cheapest proxy type and JS rendering that load the page, overriding `jsRendering` and `proxyType`. The chosen values are returned in `requestMetadata` and billed."},"extractEmails":{"type":"boolean","description":"Extract emails from the page."},"extractLinks":{"type":"boolean","description":"Extract links from the page."},"includeOnlyTags":{"type":"array","items":{"type":"string"},"description":"The `includeOnlyTags` parameter accepts an array of valid CSS selectors.\nWhen specified, only the elements matching these selectors will be included in the response content.\nEach value must be a valid `querySelectorAll` selector. Useful for extracting specific parts of the document.\n"},"excludeTags":{"type":"array","items":{"type":"string"},"description":"The `excludeTags` parameter accepts an array of valid CSS selectors.\nElements matching these selectors will be removed from the final output.\nEach value must be a valid `querySelectorAll` selector. This can be used to remove ads, scripts, or\nother unwanted sections.\n"},"removeBase64Images":{"type":"boolean","description":"If set to `true`, any images embedded as base64-encoded strings will be removed from the output.\nUseful for reducing response size or when base64 images are not needed.\n"},"outputFormat":{"type":"array","items":{"type":"string","enum":["html","text","markdown","json"]},"minItems":1,"description":"The outputFormat parameter specifies the desired response format: `html`, `text`, `markdown`, or `json`. If only one of `html`, `text`, or `markdown` is provided, the API returns the response in that format. If multiple formats are specified, the API returns a JSON response with keys for each requested format. If `json` is included with any other format, the API returns a JSON response with keys for the other specified formats.\n"},"aiExtractRules":{"type":"object","additionalProperties":{},"description":"Defines custom rules for AI-based data extraction using LLMs. This enables the system to extract structured data directly from the HTML of the page. Each key in the object represents a desired output field name, and the value specifies its type and optional description to guide the AI.\n\nSupported types:\n- `string`: plain text value\n- `number`: numeric value\n- `boolean`: true/false\n- `list`: an array of values\n- `item`: a nested object with its own structure defined under `output`\n"}},"required":["url"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":100,"grade":"A","scanned_at":"2026-10-03T16:50:21.193Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-03T16:50:21.169Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned","9 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 417ms (auth required)"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (endpoint requires auth); not counted"]},"auth":{"score":15,"max":15,"notes":["OAuth resource metadata advertised on 401"]},"maintenance":{"score":15,"max":15,"notes":["last push 9 days ago"]},"identity":{"score":10,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year","website matches verified namespace"]}},"findings":[],"inputs":{"probes":[{"url":"https://mcp.hasdata.com/mcp?apis=web_scraping","reachable":true,"authRequired":true,"latencyMs":417,"authScheme":"oauth"}],"packages":[{"registryType":"npm","identifier":"@hasdata/web-scraping-mcp","version":"1.0.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-24T11:37:36.388Z","repositoryUrl":"git+https://github.com/HasData/web-scraping-mcp.git","weeklyDownloads":96},{"registryType":"pypi","identifier":"hasdata-web-scraping-mcp","version":"1.0.2","found":true,"weeklyDownloads":34,"license":"MIT","dependencyCount":2,"publishedAt":"2026-09-24T11:35:50.539398Z","repositoryUrl":"https://github.com/HasData/web-scraping-mcp"}],"repo":{"found":true,"owner":"HasData","repo":"web-scraping-mcp","archived":false,"pushedAt":"2026-09-24T14:16:30Z","stars":11,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/104488373?v=4","ownerCreatedAt":"2022-04-27T07:07:45Z","license":"MIT"},"icon":{"url":"https://hasdata.com/favicon.svg","source":"registry"},"presence":{"stars":11,"forks":0,"downloadsWeek":130,"license":"MIT","lastPushAt":"2026-09-24T14:16:30.000Z","score":44}}}},"grade_history":[],"reviews":[]}