Skip to main content
Glama
ScrapeUnblocker MCP Server

ScrapeUnblocker MCP Server

Official

ScrapeUnblocker MCP server

A Model Context Protocol server that lets Claude (and any other MCP client) fetch any web page's HTML - or run one of 100+ ready-made site plugins that return structured JSON - through the ScrapeUnblocker scraping API, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape).

You bring your own API key. Nothing is shared or proxied through us.

Tools

Tool

What it does

fetch_html

Fetch the fully rendered HTML of a URL.

browse_page

Run interactive browser steps on a page (click, type, select, scroll, wait), then return the resulting HTML. Not read-only: it acts on the website.

list_elements

List a page's notable elements with a ready-to-use selector for each (selector discovery).

fetch_parsed

Fetch a page and return AI-parsed structured JSON.

google_search

Run a Google search and return the results page as JSON: organic results with real URLs, favicons, sitelinks and ratings, ads, AI Overview, People also ask, related searches with links, knowledge panel, news, videos, local and shopping results. Set full_urls: true to get every result's exact page URL: Google gives out the last links up to about 40 seconds after the search, so the call takes that much longer (billed the same). Without it, a result whose link has not come yet has the site's home page as its url.

fetch_markdown

Fetch a page and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Usually 2-25% the size of the HTML, so it is the cheap way for a model to read a page.

search_and_read

Search Google and read the top results in one call: Google's AI Overview (when there is one), the first 1-5 result pages as Markdown, and the other results as title, URL and snippet. Billed as one search plus one request per page read.

list_plugins

List the ready-made site plugins (100+: Amazon, Walmart, Zillow, Booking.com, Indeed, Google Trends, YouTube, App Store, Ahrefs, ...) with their parameters. Free - it calls nothing.

run_plugin

Run one site plugin and return its structured JSON.

amazon_search, amazon_product, amazon_reviews, walmart_search, ebay_search, google_shopping, google_local, maps_place_details, google_images, youtube_search, youtube_transcript, zillow_search, indeed_jobs, trustpilot_reviews, booking_hotels

The most-used site plugins as tools of their own, each with its parameters in the tool schema - one call, no list_plugins lookup. Same JSON as run_plugin.

Site plugins (structured JSON for known sites)

For many popular sites there is a plugin that returns the data already parsed - a Target search, a Zillow listing search, an app's App Store reviews, Google Trends for a few keywords. The model calls list_plugins (optionally with search: "zillow" or a category) to find the plugin and its parameters, then run_plugin with name and params (the most-used plugins, listed in the table above, can also be called directly as their own tools):

{ "name": "target_search", "params": { "query": "coffee maker", "max_results": 20 } }

Every plugin and parameter is documented on the plugin pages. Each run is billed like an API request.

Browser steps (interact, then capture)

Some pages only reveal what you need after you interact with them - accept a cookie banner, click a tab, type into a search box and submit, or scroll to trigger lazy loading. Pass a steps array to browse_page and those actions run in a real browser, in order, after the page loads; the resulting HTML is then returned.

Available actions:

Action

Fields

wait_for

selector, selector_type? (css/xPath/className/tagName), timeout_ms?

wait_for_text

value, timeout_ms?

wait

value (ms)

click

selector, selector_type?, timeout_ms?

type

selector, selector_type?, value, clear?, timeout_ms? (typed human-like)

select

selector, selector_type?, value, timeout_ms?

press_key

value (Enter, Tab, Escape, Backspace, Delete, Space, Arrow*, Home, End, PageUp, PageDown)

scroll

value ("bottom" or a pixel offset)

Steps are not idempotent - they run once per call - and they act on the website, so browse_page is the one tool not marked read-only. If a step fails, browse_page returns which step failed, why, and the page HTML at that moment so you can fix the selector and retry.

List elements (discover selectors first)

list_elements loads a page and returns a JSON list of its notable elements (links, inputs, buttons, selects, ...), each with a ready-to-use selector plus tag, text and useful attributes (name, id, type, placeholder, aria_label, href, ...):

{ "url": "https://example.com", "count": 42, "elements": [ { "tag": "input", "selector": "#search", "type": "text", "placeholder": "Search", "aria_label": "Search" } ] }

The natural workflow is discover, then act: call list_elements to find the selectors you need, then pass matching steps to browse_page to click/type/ select and capture the resulting HTML.

Related MCP server: SteadyFetch

Get an API key

Sign up and grab your key at app.scrapeunblocker.com. The server reads it from the SCRAPEUNBLOCKER_KEY environment variable.

Install

Claude Code

The easiest route is the official plugin, which installs this server for you, prompts for your API key (stored in your OS keychain rather than an environment variable), and adds a /scrape-url command plus reference skills:

/plugin marketplace add ScrapeUnblocker/claude-code-plugin
/plugin install scrapeunblocker@scrapeunblocker

See ScrapeUnblocker/claude-code-plugin.

To add the bare server instead:

claude mcp add scrapeunblocker \
  --env SCRAPEUNBLOCKER_KEY=your_api_key_here \
  -- npx -y scrapeunblocker-mcp

Claude Desktop

Add this to your claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "scrapeunblocker": {
      "command": "npx",
      "args": ["-y", "scrapeunblocker-mcp"],
      "env": {
        "SCRAPEUNBLOCKER_KEY": "your_api_key_here"
      }
    }
  }
}

Restart Claude Desktop and the ScrapeUnblocker tools appear.

Any other MCP client

Run the server over stdio:

SCRAPEUNBLOCKER_KEY=your_api_key_here npx -y scrapeunblocker-mcp

Example prompts

  • "Fetch the HTML of https://www.example-shop.com/product/123 and list the price."

  • "This page keeps blocking me: . Use fetch_html to get it."

  • "List the elements on , then use browse_page to type 'laptop' into the search box, press Enter, wait for the results, and give me the HTML."

  • "Search Google for 'best running shoes 2026' and give me the top 5 links."

  • "Read https://en.wikipedia.org/wiki/Web_scraping as Markdown and summarise it in five bullets."

  • "Search the web for the current population of Vilnius and cite the pages you read."

  • "Find coffee makers on Target under $50 and compare them with Walmart's."

  • "Show Google Trends for 'coffee' vs 'tea' in the US over the last year."

  • "What are the newest App Store reviews of WhatsApp saying?"

Development

npm install
npm run build      # bundles to dist/ with tsup
npm run typecheck
npm test           # builds, then runs the tools against a local stand-in API
SCRAPEUNBLOCKER_KEY=... node dist/index.js   # run the server

License

MIT

Available Tools

24 tools
amazon_productScrape an Amazon product pageA
Read-only

Fetches a single Amazon product and returns it as JSON: title, brand and brandStoreUrl, parentAsin, manufacturer, modelNumber, partNumber, productCodes (UPC, EAN, GTIN, ISBN), condition, the amazonsChoice, bestSellerBadge, deal and coupon markers, price + currency, listPrice, savingsPercent and savingsAmount, unitPrice, subscribeAndSavePrice, shippingPrice, recentSales, availability (+ a boolean inStock), maxOrderQuantity, rating, reviewCount, ratingDistribution (percent per star), reviewSummary, seller, sellerUrl, sellerId, shipsFrom, fulfilledByAmazon, prime, delivery, returnPolicy, offersCount and offersFromPrice, bestSellersRank, features (bullet points), categories (breadcrumb), description, fromTheManufacturer and fromTheBrand (text and images), importantInformation, ingredients, whatsInTheBox, documents, warrantyAndSupport, productDetails, productOverview, dimensions, weight, dateFirstAvailable, variantDimensions and variants (each with its own ASIN and options), sustainability, protectionPlans, newerModel, sponsoredProducts, relatedProducts, images (the whole gallery) and videos. A field the page does not show is null or empty. Identify the product with either asin (plus marketplace) or a full product url. Other sellers' full offers are not on the product page: only their count and lowest price are returned here, /marketplace/amazon-offers lists them. prime and delivery are what a visitor who is not signed in sees. Amazon prices each page in the currency of the delivery location it infers from the visitor's IP address, so proxy_country defaults to the marketplace's home country (amazon.com -> US) and the call is routed through proxies in that country. The country of the proxy that served the request is reported as exitCountry. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: url, asin, marketplace, proxy_country.

amazon_reviewsScrape the reviews on an Amazon product pageA
Read-only

Returns the review data an Amazon product page shows to a signed-out visitor, as JSON: the overall rating, total reviewCount (global ratings), the 5..1-star histogram (percent per star), the AI customersSay summary (overall text plus per-aspect sentiment, mentions, positive, negative, summary and the quoted review excerpts Amazon shows for the aspect) and the top reviews (each with id, url, author, rating, title, body, date, country, fromOtherCountry, verified, helpfulVotes, variant and images). Identify the product with asin (plus marketplace) or a product url. Scope: Amazon only shows its full review list to signed-in customers, so this endpoint returns the public slice on the product page - typically 5 to 13 top reviews, local ones first and then reviews from other countries - not a complete review export. When Amazon hides the top reviews behind a sign-in prompt (common on amazon.com), reviewsGated is true and reviews is empty; the rating, histogram and customers-say data, including its review excerpts, are still returned. Every field is always present and is null when the page does not show it. proxy_country defaults to the marketplace's home country; the country of the proxy that served the request is reported as exitCountry. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: url, asin, marketplace, proxy_country.

booking_hotelsScrape Booking.com hotelsA
Read-only

Searches Booking.com for location and returns the properties as JSON: name, price (with checkin/checkout), reviewScore, address, coordinates, image and a hotel url. Set adults, children, rooms and currency, and collect up to max_results across pages. Prices only appear when check-in/check-out dates are given. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: location (required), rooms, adults, checkin, +5 more.

browse_pageInteract with a page, then capture itA
Destructive

Load a web page in a real browser through ScrapeUnblocker, run an ordered list of browser actions on it (accept a cookie banner, click a tab, type into a search box, choose an option, press a key, scroll to trigger lazy loading, wait), then return the resulting HTML. Workflow: first call the list_elements tool to discover the real selectors on the page, then build steps against them. Steps act on the website and are NOT idempotent - they run once per call; never use them to buy, post, delete or change anything unless the user asked for exactly that. If a step fails, this tool returns which step failed, why, and the page HTML at that moment so you can fix the selector and retry. Billed as one request.

Inputs: url (required), steps (required), wait_value, wait_method, +3 more.

fetch_htmlFetch page HTMLA
Read-only

Fetch the fully rendered HTML of any web page through ScrapeUnblocker, bypassing anti-bot protection (Cloudflare, DataDome, PerimeterX, Akamai, Shape). Use this when a normal fetch is blocked (403/429, captcha, 'access denied') or when the page needs a real browser to render. Returns the raw HTML as text. To read or summarise a page, fetch_markdown is much smaller. To click, type or scroll before capturing, use browse_page.

Inputs: url (required), wait_value, wait_method, proxy_country, +2 more.

fetch_markdownFetch page as MarkdownA
Read-only

Fetch a web page in a real browser through the ScrapeUnblocker API (https://docs.scrapeunblocker.com) and return it as clean Markdown: the main content with absolute links, without scripts, styles, navigation or footer. Use it to read, quote or summarise a page; it is usually 2-25% the size of the HTML. Works on JavaScript-rendered pages and on pages that refuse ordinary fetches (403/429, captcha). Use fetch_html instead when you need the markup, selectors or browser steps. Billed as one request.

Inputs: url (required), wait_value, wait_method, proxy_country, +2 more.

fetch_parsedFetch AI-parsed page dataA
Read-only

Fetch a web page through ScrapeUnblocker and return AI-parsed structured JSON instead of raw HTML (e.g. product details, article content). Best for extracting fields from product, listing or article pages without writing your own HTML parsing. If the page holds no structured data, the result says so and returns the rendered HTML instead (billed like fetch_html).

Inputs: url (required), rules_hint, proxy_country.

google_imagesScrape Google Images resultsA
Read-only

Runs the Google Images vertical (udm=2) for q and returns the image results as JSON. Every result carries imageUrl (the full-resolution origin image, not a Google thumbnail; for an image found inside a document such as a PDF, which has no URL of its own, it is Google's thumbnail and sourcePageUrl is the document), sourceDomain and googleImagesUrl (the Google Images viewer link, i.e. the /imgres?... URL a browser copies from the result tile), plus sourcePageUrl, title, sourceName, thumbnailUrl, width, height and fileSize where available. Set proxy_country to target a market: the Google market (gl) follows it automatically, and gl is only an optional override. pages fetches up to 5 result pages of ~100 each; every page fetched is billed as one request. time_range (past hour/day/week/month/year) or date_from/date_to limit the results to images Google found in that period, so a repeated scan returns only what is new. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: q (required), gl, pages, date_to, +4 more.

google_localScrape Google Local business listingsA
Read-only

Runs a Google Local (tbm=lcl) search for keyword and returns up to ~20 businesses as JSON: name, rating, reviews, price, category, address, phone, website, hours, and a top review_snippet. phone and website are null when Google does not render them for that result - service businesses (plumbers, contractors) almost always carry both. Local results are location-sensitive - set proxy_country (and optionally gl/hl) to target a market. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: keyword (required), gl, hl, proxy_country.

google_shoppingScrape Google Shopping product listingsA
Read-only

Runs the Google Shopping vertical (udm=28) for q and returns the product cards as JSON: title, price, currency, currencyCode, originalPrice, discount, merchant, delivery, rating, reviewCount, image and Google's own ids for the product (productId, catalogId, offerId - stable across searches, for tracking one product). Set proxy_country/gl to target a market (prices/merchants are region-specific) and min_price/max_price to filter. One render returns the first page of products (v1). Note: Google Shopping exposes no per-product URL, so url is omitted. image is the product's thumbnail URL. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: q (required), gl, max_price, min_price, +2 more.

indeed_jobsScrape Indeed job listingsA
Read-only

Searches Indeed for query in location and returns the job listings as JSON: title, company, location, salary (with parsed min/max), jobTypes, companyRating, a snippet, datePosted (YYYY-MM-DD), sponsored (Indeed's paid placement) and a clean job url. Filter with country, job_type, days (posting age), remote, sort with sort (date returns the collected jobs newest first, sponsored ones included), and collect up to max_results across pages. Indeed sits behind Cloudflare + PerimeterX - handled for you. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: query (required), days, sort, start, +7 more.

list_elementsList page elements (selector discovery)A
Read-only

Load a page through ScrapeUnblocker and return a JSON list of its notable elements (links, inputs, buttons, selects, etc.) with a ready-to-use selector for each, plus tag, text and useful attributes (name, id, type, placeholder, aria_label, href, ...). Read-only and does not interact with the page. This is the discovery half of interactive scraping: call list_elements to find the selectors you need, then pass matching steps to browse_page to click/type/select and capture the resulting HTML.

Inputs: url (required), proxy_country.

list_pluginsList site pluginsA
Read-only

List ScrapeUnblocker's ready-made site plugins: scrapers for specific sites that return clean structured JSON (Amazon, Walmart, Target, eBay, Zillow, Redfin, Booking.com, Airbnb, Indeed, Glassdoor, Google Trends / Shopping / Maps, YouTube, Spotify, App Store, Google Play, Trustpilot, Yelp, Ahrefs, Semrush and 100+ more). Check here before scraping a known site with fetch_html - a plugin returns the data already parsed. Without arguments it lists every plugin with its parameters (* = required); category or search narrow the list; name returns one plugin's full parameter docs. Free - it calls nothing.

Inputs: name, search, category.

maps_place_detailsScrape Google Maps place detailsA
Read-only

Returns the full data for one Google Maps place as JSON: name, address (+ addressLines), phone, website, rating, categories, latitude/longitude, plusCode, hours + openNow, description, photo, cid, featureId, googleMapsUrl and relatedPlaces. Identify the place with place_id (ChIJ...), a Maps url, or a raw feature_id (0xHEX:0xHEX). Location-neutral - the feature id resolves the place directly; proxy_country defaults to a US proxy to clear Google's consent wall. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: gl, hl, raw, url, +3 more.

run_pluginRun a site pluginA
Read-only

Run one ScrapeUnblocker site plugin and return its JSON - e.g. a Target or Walmart search, a Zillow listing search, Google Trends for some keywords, an app's App Store reviews. Find the plugin and its parameters with list_plugins first. params uses the parameter names list_plugins shows (snake_case); a list value is fine where a parameter takes several. Each run is billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: name (required), params.

search_and_readSearch Google and read the top resultsA
Read-only

Search Google through the ScrapeUnblocker API (https://docs.scrapeunblocker.com) and read the top results in one call: returns Google's AI Overview when there is one, each of the first results pages (default 3, max 5) as Markdown, and the other organic results as title, URL and snippet. Use it to answer a question from the live web. Billed as one request for the search plus one per page read.

Inputs: keyword (required), results, proxy_country.

trustpilot_reviewsScrape Trustpilot company reviewsA
Read-only

Returns a company's Trustpilot profile and reviews as JSON. company is the reviewed domain (e.g. www.nike.com). The response has a company summary (trustScore, totalReviews, ratingDistribution 1-5, categories, contact) and a reviews array - each with url, rating, title, text, verified, verificationLevel, verificationSource, source, pending, merged, author (name, country, review count, id, image, profileUrl, reviewsOfThisCompany), reply (the company's response, with dates) and date / experiencedDate / updatedDate. Page with page/pages (20 reviews per page), and filter with stars, sort (recency/relevancy), language, date, search, verified or replies. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: company (required), date, page, sort, +7 more.

youtube_transcriptGet a YouTube video transcriptA
Read-only

Returns a YouTube video's captions as JSON: timestamped segments (start, dur, text) and a joined text, plus availableLanguages, the picked language, isAutoGenerated, and the video's title, author and lengthSeconds. Pass a video id or any YouTube video URL; choose a caption language with lang. Ideal for LLM/RAG pipelines, subtitles and content analysis. Returns JSON. Billed like an API request; listing plugins bill one unit per result page they fetch, so keep max_results modest.

Inputs: video (required), lang, format, proxy_country.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 24 tools

    Disambiguation3/5

    Most verticals are clearly separated, and the generic fetch family (fetch_html, fetch_markdown, fetch_parsed) is well differentiated by output type. However, there is real overlap: list_plugins/run_plugin can run the same Amazon, Walmart, Zillow and Trustpilot scrapers that are also exposed as dedicated tools, and search_and_read overlaps google_search plus fetch_markdown. An agent must decide between two valid paths for many tasks.

    Naming Consistency4/5

    Everything is snake_case, so there is no casing chaos. The patterns vary only mildly: verb_noun for generic utilities (fetch_html, browse_page, list_plugins), site_action for verticals (amazon_search, google_images, zillow_search), and a few noun_noun/entity_action forms (trustpilot_reviews, maps_place_details, youtube_transcript). Readable and predictable enough to guess a tool's name.

    Tool Count3/5

    24 tools is heavy for a single server, though partly justified by covering many distinct scraping verticals. The dedicated platform tools duplicate what list_plugins/run_plugin already provide, so several tools do not strictly earn their place. Trimming the per-site tools in favor of the plugin mechanism would bring this into a healthier 10-15 range.

    Completeness4/5

    The surface is broad: generic fetch, markdown, parsed, interactive browsing with selector discovery, search-and-read, plus deep verticals for Amazon, Walmart, eBay, Google Search/Shopping/Images/Local, Maps, YouTube, Trustpilot, Zillow, Indeed and Booking. Gaps are minor and mostly recoverable through run_plugin (e.g. no dedicated product-detail tool for eBay/Target/Walmart beyond search).

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to fetch bot-protected web pages, run structured Google searches, and check domain authority through UnblockingAPI's anti-detection engine and residential proxies.
      3
      350 npm
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to fetch any web page (including those behind Cloudflare or CAPTCHAs), extract clean markdown, structured data, crawl sites, and map URLs via BypassAPI.
      MIT