Scrape any web page, search Google/Amazon/Walmart/YouTube and extract data via the ScrapingBee API.
com.scrapingbee/mcp (Model Context Protocol) Server
The com.scrapingbee/mcp MCP server provides capabilities to scrape web pages and to search major platforms—Google, Amazon, Walmart, and YouTube—then extract data using the ScrapingBee API. It is described as supporting both web scraping and platform-specific search with extraction.
🛠️ Key Features
Scrape any web page
Search Google, Amazon, Walmart, and YouTube
Extract data via the ScrapingBee API
🚀 Use Cases
Extract structured information from arbitrary web pages
Perform search-and-extract workflows across common shopping and video platforms
Collect data from Google, Amazon, Walmart, or YouTube results for downstream processing
⚡ Developer Benefits
Standardized access through an MCP server for scraping and extraction
Supports search + extraction flows for multiple target platforms using the same API
⚠️ Limitations
Only scraping and search/extraction via the ScrapingBee API are described
No additional tools, configuration details, or constraints are provided in the available data
Scrape Amazon search results using ScrapingBee.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters16
query
string
required
The search query to perform.
add_html
boolean
optional
Whether to return the HTML along with the search results.
category_id
string
optional
The category ID to use for the search.
country
string
optional
The country code for localization (e.g., us, uk, de).
Do not combine with a matching domain (e.g., country=fr&domain=fr).
currency
string
optional
The currency code (ISO 4217) to display results (e.g., USD, GBP, EUR).
domain
string
optional
The Amazon domain to use for the search (e.g., com, co.uk, de).
language
string
optional
The language code to display results (e.g., en, fr, de).
light_request
boolean
optional
Whether to use a light request or not.
merchant_id
string
optional
The merchant ID to use for the search.
pages
integer
optional
The number of pages to scrape.
sort_by
string
optional
The sort order to use for the search
(most_recent, price_low_to_high, price_high_to_low, featured,
average_review, bestsellers).
start_page
integer
optional
The page number to start scraping from.
zip_code
string
optional
The ZIP code to use for delivery localization.
autoselect_variant
boolean
optional
Automatically select the default/most-popular variant.
screenshot
boolean
optional
Force a browser screenshot (returns base64 image).
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query to perform."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the HTML along with the search results."
},
"category_id": {
"default": "",
"type": "string",
"description": "The category ID to use for the search."
},
"country": {
"default": "",
"type": "string",
"description": "The country code for localization (e.g., us, uk, de).\nDo not combine with a matching domain (e.g., country=fr&domain=fr)."
},
"currency": {
"default": "",
"type": "string",
"description": "The currency code (ISO 4217) to display results (e.g., USD, GBP, EUR)."
},
"domain": {
"default": "com",
"type": "string",
"description": "The Amazon domain to use for the search (e.g., com, co.uk, de)."
},
"language": {
"default": "",
"type": "string",
"description": "The language code to display results (e.g., en, fr, de)."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Whether to use a light request or not."
},
"merchant_id": {
"default": "",
"type": "string",
"description": "The merchant ID to use for the search."
},
"pages": {
"default": 1,
"type": "integer",
"description": "The number of pages to scrape."
},
"sort_by": {
"default": "",
"type": "string",
"description": "The sort order to use for the search\n(most_recent, price_low_to_high, price_high_to_low, featured,\naverage_review, bestsellers)."
},
"start_page": {
"default": 1,
"type": "integer",
"description": "The page number to start scraping from."
},
"zip_code": {
"default": "",
"type": "string",
"description": "The ZIP code to use for delivery localization."
},
"autoselect_variant": {
"default": false,
"type": "boolean",
"description": "Automatically select the default/most-popular variant."
},
"screenshot": {
"default": false,
"type": "boolean",
"description": "Force a browser screenshot (returns base64 image)."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"query"
],
"additionalProperties": false
}
get_amazon_product_details
Scrape Amazon product details using ScrapingBee.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters11
query
string
required
Search term (must be a valid 10-character ASIN code)
add_html
boolean
optional
Whether to return the HTML along with the product details.
autoselect_variant
boolean
optional
Whether to automatically select product variant if
applicable.
country
string
optional
The country code for localization (e.g., us, uk, de).
Do not combine with a matching domain (e.g., country=fr&domain=fr).
currency
string
optional
The currency code (ISO 4217) to display results (e.g., USD, GBP, EUR).
domain
string
optional
The Amazon domain to use for the search (e.g., com, co.uk, de).
language
string
optional
The language code to display results (e.g., en, fr, de).
light_request
boolean
optional
Whether to use a light request or not.
zip_code
string
optional
The zip code to use for delivery localization.
screenshot
boolean
optional
Force a browser screenshot (returns base64 image).
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (must be a valid 10-character ASIN code)"
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the HTML along with the product details."
},
"autoselect_variant": {
"default": false,
"type": "boolean",
"description": "Whether to automatically select product variant if\napplicable."
},
"country": {
"default": "",
"type": "string",
"description": "The country code for localization (e.g., us, uk, de).\nDo not combine with a matching domain (e.g., country=fr&domain=fr)."
},
"currency": {
"default": "",
"type": "string",
"description": "The currency code (ISO 4217) to display results (e.g., USD, GBP, EUR)."
},
"domain": {
"default": "",
"type": "string",
"description": "The Amazon domain to use for the search (e.g., com, co.uk, de)."
},
"language": {
"default": "",
"type": "string",
"description": "The language code to display results (e.g., en, fr, de)."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Whether to use a light request or not."
},
"zip_code": {
"default": "",
"type": "string",
"description": "The zip code to use for delivery localization."
},
"screenshot": {
"default": false,
"type": "boolean",
"description": "Force a browser screenshot (returns base64 image)."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"query"
],
"additionalProperties": false
}
get_amazon_pricing
Retrieve current Amazon product pricing and seller offers for a given ASIN.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters9
asin
string
required
Required 10-character ASIN from an Amazon product URL.
light_request
boolean
optional
Use a light request (default True) or browser-rendered (False).
domain
string
optional
Amazon domain (default com).
country
string
optional
ISO country code for localization.
Do not combine with a matching domain (e.g., country=fr&domain=fr).
zip_code
string
optional
ZIP code for delivery localization.
language
string
optional
ISO language code.
currency
string
optional
ISO 4217 display currency.
add_html
boolean
optional
Include page HTML in the response.
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"asin": {
"type": "string",
"description": "Required 10-character ASIN from an Amazon product URL."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Use a light request (default True) or browser-rendered (False)."
},
"domain": {
"default": "com",
"type": "string",
"description": "Amazon domain (default com)."
},
"country": {
"default": "",
"type": "string",
"description": "ISO country code for localization.\nDo not combine with a matching domain (e.g., country=fr&domain=fr)."
},
"zip_code": {
"default": "",
"type": "string",
"description": "ZIP code for delivery localization."
},
"language": {
"default": "",
"type": "string",
"description": "ISO language code."
},
"currency": {
"default": "",
"type": "string",
"description": "ISO 4217 display currency."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Include page HTML in the response."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"asin"
],
"additionalProperties": false
}
ask_chatgpt
This tool allows you to send a prompt to OpenAI's ChatGPT via ScrapingBee
and get back the generated response.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters5
prompt
string
required
The prompt to send to ChatGPT.
search
boolean
optional
Whether to enable web search capability for the prompt.
add_html
boolean
optional
Whether to include the full HTML of the page in the results.
country_code
string
optional
ISO country code the request should originate from
(affects web results when search is enabled).
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "The prompt to send to ChatGPT."
},
"search": {
"default": false,
"type": "boolean",
"description": "Whether to enable web search capability for the prompt."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to include the full HTML of the page in the results."
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO country code the request should originate from\n(affects web results when search is enabled)."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
fast_search
Search the web using ScrapingBee's Fast Search API and return structured
results. This is the PRIMARY tool for web searches — it returns clean
organic results and top stories in under one second at a lower credit cost.
USE THIS TOOL FIRST for any general web search. Only fall back to
get_google_search_results if you need specialized search types such as
news, maps, Google Lens, shopping, image search, or Google AI mode.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters5
search
string
required
The search query to use.
Make sure to URL-encode special characters such as :, & or +.
country_code
string
optional
ISO 3166-1 alpha-2 country code to localize results
(Example: us, fr, de, in, gb, br, etc.).
language
string
optional
Language of the search results (Example: en, fr, de, etc.).
page
integer
optional
The page number to return. Default is 1,
use page=2 for the second page, etc.
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "The search query to use.\nMake sure to URL-encode special characters such as :, & or +."
},
"country_code": {
"default": "us",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code to localize results\n(Example: us, fr, de, in, gb, br, etc.)."
},
"language": {
"default": "en",
"type": "string",
"description": "Language of the search results (Example: en, fr, de, etc.)."
},
"page": {
"default": 1,
"type": "integer",
"description": "The page number to return. Default is 1,\nuse page=2 for the second page, etc."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"search"
],
"additionalProperties": false
}
ask_gemini
Ask Gemini through ScrapingBee and receive citation objects when available.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters4
prompt
string
required
The prompt to send to Gemini.
add_html
boolean
optional
Whether to return the full HTML of searched pages.
country_code
string
optional
ISO country code to set request geolocation.
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"prompt": {
"type": "string",
"description": "The prompt to send to Gemini."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the full HTML of searched pages."
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO country code to set request geolocation."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"prompt"
],
"additionalProperties": false
}
get_google_search_results
This is a FALLBACK tool —
use fast_search first for general web searches. Only use this tool when
you need specialized search types that fast_search does not support:
news, maps, Google Lens, shopping, image search, or Google AI mode.
Scrape Google search results using ScrapingBee and return the results.
This tool can scrape normal results, news results, maps results, search
using google lens, shopping related results, image results, and get the result from
Google's AI mode.
It can even return the HTML along with the search results.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters19
search
string
required
The search query to use.
add_html
boolean
optional
Whether to return the HTML along with the search results.
country_code
string
optional
The country code to use for the search
(Example: us, fr, de, etc.).
device
string
optional
The device to use for the search (desktop, mobile).
extra_params
string
optional
Extra parameters to pass to the search (Example: tbs=qdr:d&udm=7).
language
string
optional
The language to use for the search (Example: en, fr, de, etc.).
light_request
boolean
optional
Whether to use a light request or not.
nfpr
boolean
optional
Whether to disable Google's autocorrection feature or not.
page
integer
optional
The page number to return.
pages
integer
optional
Number of pages to aggregate (max 10, default 1).
search_type
string
optional
The search type to use (classic: normal results,
news: news results [not available if device is mobile], maps: maps results,
lens: search using google lens [requires image url as search parameter],
shopping: shopping related results, images: image results,
ai_mode: get the result from Google's AI mode, ads: paid-ad results).
date_range
string
optional
Filter by date range: past_hour, past_day, past_week,
past_month, past_year. Only for classic, news, and images.
latitude
any
optional
Latitude in decimal degrees for geographic searches.
longitude
any
optional
Longitude in decimal degrees for geographic searches.
radius
any
optional
Radius in meters (requires latitude and longitude).
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "The search query to use."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the HTML along with the search results."
},
"country_code": {
"default": "us",
"type": "string",
"description": "The country code to use for the search\n(Example: us, fr, de, etc.)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "The device to use for the search (desktop, mobile)."
},
"extra_params": {
"default": "",
"type": "string",
"description": "Extra parameters to pass to the search (Example: tbs=qdr:d&udm=7)."
},
"language": {
"default": "en",
"type": "string",
"description": "The language to use for the search (Example: en, fr, de, etc.)."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Whether to use a light request or not."
},
"nfpr": {
"default": false,
"type": "boolean",
"description": "Whether to disable Google's autocorrection feature or not."
},
"page": {
"default": 1,
"type": "integer",
"description": "The page number to return."
},
"pages": {
"default": 1,
"type": "integer",
"description": "Number of pages to aggregate (max 10, default 1)."
},
"search_type": {
"default": "classic",
"type": "string",
"description": "The search type to use (classic: normal results,\nnews: news results [not available if device is mobile], maps: maps results,\nlens: search using google lens [requires image url as search parameter],\nshopping: shopping related results, images: image results,\nai_mode: get the result from Google's AI mode, ads: paid-ad results)."
},
"date_range": {
"default": "",
"type": "string",
"description": "Filter by date range: past_hour, past_day, past_week,\npast_month, past_year. Only for classic, news, and images."
},
"latitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Latitude in decimal degrees for geographic searches."
},
"longitude": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Longitude in decimal degrees for geographic searches."
},
"radius": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Radius in meters (requires latitude and longitude)."
},
"sort_by": {
"default": "",
"type": "string",
"description": "Shopping sort order: relevance, reviews, price_asc, price_desc."
},
"min_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Shopping minimum price filter."
},
"max_price": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Shopping maximum price filter."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"search"
],
"additionalProperties": false
}
get_page_text
Scrape a URL using ScrapingBee and return the page content in
Markdown or Text format.
Scope: one URL per call, with the result returned into the conversation.
For many URLs, a whole site, output written to a file or directory,
resumable jobs, or a scheduled re-run, use the ScrapingBee CLI instead —
`scrapingbee scrape --input-file urls.txt --output-dir results`,
`scrapingbee crawl URL --save-pattern ...`, `scrapingbee schedule --every`.
This server has no batch, crawl, file-output or scheduling equivalent.
Parameters23
url
string
required
The URL of the page to scrape.
return_page_markdown
boolean
optional
Whether to return the page content in Markdown format.
return_page_text
boolean
optional
Whether to return the page content in Text format.
auto_mode
boolean
optional
On by default — ScrapingBee automatically picks the cheapest
configuration that successfully fetches the page, escalating proxy
strength only as needed (you are charged only for the winning
config). To choose a configuration yourself instead, use one of:
auto_mode=False for the classic tier (no proxy, cheapest),
premium_proxy=True, or stealth_proxy=True — the two proxy flags
override auto_mode on their own, so auto_mode=False is only needed
for the classic tier. Setting render_js also switches to manual.
max_cost
integer
optional
Optional credit ceiling for auto_mode (integer >= 1). The request
will not escalate to a configuration costing more than this many credits.
0 means no ceiling. Ignored unless auto_mode is True.
premium_proxy
boolean
optional
Manual option: use a premium proxy (middle tier of
classic/premium/stealth). Setting this disables auto_mode.
stealth_proxy
boolean
optional
Manual option: use a stealth proxy (strongest tier of
classic/premium/stealth). Setting this disables auto_mode.
custom_google
boolean
optional
Set to True if the url is a google domain in the following
format: <subdomain>.google.<top-level-domain>
(Example: translate.google.com, mail.google.com, www.google.co.in etc)
country_code
string
optional
ISO 3166-1 alpha-2 country code (e.g. "fr", "us") to
route the request through an IP in that country. Only takes effect
when premium_proxy or stealth_proxy is True.
render_js
any
optional
Whether to use headless-browser rendering.
Omit to use the API default (true). Setting this explicitly
switches the request to manual configuration (disables auto_mode).
wait
integer
optional
Milliseconds to wait after page load (0–35000).
wait_for
string
optional
CSS or XPath selector to wait for before returning.
Integer 0–10000000 to reuse an IP for up to 5 minutes.
cookies
string
optional
Semicolon-separated cookies to send to the target.
timeout
integer
optional
Request timeout in milliseconds (1000–140000, default 140000).
device
string
optional
desktop (default) or mobile.
js_scenario
string
optional
Stringified JSON object of browser interaction instructions.
ai_query
string
optional
Natural-language question for AI extraction.
ai_selector
string
optional
CSS selector to focus AI extraction on part of the page.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the page to scrape."
},
"return_page_markdown": {
"default": true,
"type": "boolean",
"description": "Whether to return the page content in Markdown format."
},
"return_page_text": {
"default": false,
"type": "boolean",
"description": "Whether to return the page content in Text format."
},
"auto_mode": {
"default": true,
"type": "boolean",
"description": "On by default — ScrapingBee automatically picks the cheapest\nconfiguration that successfully fetches the page, escalating proxy\nstrength only as needed (you are charged only for the winning\nconfig). To choose a configuration yourself instead, use one of:\nauto_mode=False for the classic tier (no proxy, cheapest),\npremium_proxy=True, or stealth_proxy=True — the two proxy flags\noverride auto_mode on their own, so auto_mode=False is only needed\nfor the classic tier. Setting render_js also switches to manual."
},
"max_cost": {
"default": 0,
"type": "integer",
"description": "Optional credit ceiling for auto_mode (integer >= 1). The request\nwill not escalate to a configuration costing more than this many credits.\n0 means no ceiling. Ignored unless auto_mode is True."
},
"premium_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a premium proxy (middle tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"stealth_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a stealth proxy (strongest tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"custom_google": {
"default": false,
"type": "boolean",
"description": "Set to True if the url is a google domain in the following\nformat: <subdomain>.google.<top-level-domain>\n(Example: translate.google.com, mail.google.com, www.google.co.in etc)"
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. \"fr\", \"us\") to\nroute the request through an IP in that country. Only takes effect\nwhen premium_proxy or stealth_proxy is True."
},
"render_js": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether to use headless-browser rendering.\nOmit to use the API default (true). Setting this explicitly\nswitches the request to manual configuration (disables auto_mode)."
},
"wait": {
"default": 0,
"type": "integer",
"description": "Milliseconds to wait after page load (0–35000)."
},
"wait_for": {
"default": "",
"type": "string",
"description": "CSS or XPath selector to wait for before returning."
},
"wait_browser": {
"default": "domcontentloaded",
"type": "string",
"description": "domcontentloaded (default), load, networkidle0, networkidle2."
},
"block_resources": {
"default": true,
"type": "boolean",
"description": "Block images/CSS to speed up rendering."
},
"window_width": {
"default": 1920,
"type": "integer",
"description": "Viewport width (default 1920)."
},
"window_height": {
"default": 1080,
"type": "integer",
"description": "Viewport height (default 1080)."
},
"session_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer 0–10000000 to reuse an IP for up to 5 minutes."
},
"cookies": {
"default": "",
"type": "string",
"description": "Semicolon-separated cookies to send to the target."
},
"timeout": {
"default": 140000,
"type": "integer",
"description": "Request timeout in milliseconds (1000–140000, default 140000)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "desktop (default) or mobile."
},
"js_scenario": {
"default": "",
"type": "string",
"description": "Stringified JSON object of browser interaction instructions."
},
"ai_query": {
"default": "",
"type": "string",
"description": "Natural-language question for AI extraction."
},
"ai_selector": {
"default": "",
"type": "string",
"description": "CSS selector to focus AI extraction on part of the page."
}
},
"required": [
"url"
],
"additionalProperties": false
}
get_page_html
Scrape a URL using ScrapingBee and return the page content in HTML.
Scope: one URL per call, with the result returned into the conversation.
For many URLs, a whole site, output written to a file or directory,
resumable jobs, or a scheduled re-run, use the ScrapingBee CLI instead —
`scrapingbee scrape --input-file urls.txt --output-dir results`,
`scrapingbee crawl URL --save-pattern ...`, `scrapingbee schedule --every`.
This server has no batch, crawl, file-output or scheduling equivalent.
Parameters21
url
string
required
The URL of the page to scrape.
auto_mode
boolean
optional
On by default — ScrapingBee automatically picks the cheapest
configuration that successfully fetches the page, escalating proxy
strength only as needed (you are charged only for the winning
config). To choose a configuration yourself instead, use one of:
auto_mode=False for the classic tier (no proxy, cheapest),
premium_proxy=True, or stealth_proxy=True — the two proxy flags
override auto_mode on their own, so auto_mode=False is only needed
for the classic tier. Setting render_js also switches to manual.
max_cost
integer
optional
Optional credit ceiling for auto_mode (integer >= 1). The request
will not escalate to a configuration costing more than this many credits.
0 means no ceiling. Ignored unless auto_mode is True.
premium_proxy
boolean
optional
Manual option: use a premium proxy (middle tier of
classic/premium/stealth). Setting this disables auto_mode.
stealth_proxy
boolean
optional
Manual option: use a stealth proxy (strongest tier of
classic/premium/stealth). Setting this disables auto_mode.
custom_google
boolean
optional
Set to True if the url is a google domain in the following
format: <subdomain>.google.<top-level-domain>
(Example: translate.google.com, mail.google.com, www.google.co.in etc)
country_code
string
optional
ISO 3166-1 alpha-2 country code (e.g. "fr", "us") to
route the request through an IP in that country. Only takes effect
when premium_proxy or stealth_proxy is True.
render_js
any
optional
Whether to use headless-browser rendering.
Omit to use the API default (true). Setting this explicitly
switches the request to manual configuration (disables auto_mode).
wait
integer
optional
Milliseconds to wait after page load (0–35000).
wait_for
string
optional
CSS or XPath selector to wait for before returning.
Integer 0–10000000 to reuse an IP for up to 5 minutes.
cookies
string
optional
Semicolon-separated cookies to send to the target.
timeout
integer
optional
Request timeout in milliseconds (1000–140000, default 140000).
device
string
optional
desktop (default) or mobile.
js_scenario
string
optional
Stringified JSON object of browser interaction instructions.
ai_query
string
optional
Natural-language question for AI extraction.
ai_selector
string
optional
CSS selector to focus AI extraction on part of the page.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the page to scrape."
},
"auto_mode": {
"default": true,
"type": "boolean",
"description": "On by default — ScrapingBee automatically picks the cheapest\nconfiguration that successfully fetches the page, escalating proxy\nstrength only as needed (you are charged only for the winning\nconfig). To choose a configuration yourself instead, use one of:\nauto_mode=False for the classic tier (no proxy, cheapest),\npremium_proxy=True, or stealth_proxy=True — the two proxy flags\noverride auto_mode on their own, so auto_mode=False is only needed\nfor the classic tier. Setting render_js also switches to manual."
},
"max_cost": {
"default": 0,
"type": "integer",
"description": "Optional credit ceiling for auto_mode (integer >= 1). The request\nwill not escalate to a configuration costing more than this many credits.\n0 means no ceiling. Ignored unless auto_mode is True."
},
"premium_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a premium proxy (middle tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"stealth_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a stealth proxy (strongest tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"custom_google": {
"default": false,
"type": "boolean",
"description": "Set to True if the url is a google domain in the following\nformat: <subdomain>.google.<top-level-domain>\n(Example: translate.google.com, mail.google.com, www.google.co.in etc)"
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. \"fr\", \"us\") to\nroute the request through an IP in that country. Only takes effect\nwhen premium_proxy or stealth_proxy is True."
},
"render_js": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether to use headless-browser rendering.\nOmit to use the API default (true). Setting this explicitly\nswitches the request to manual configuration (disables auto_mode)."
},
"wait": {
"default": 0,
"type": "integer",
"description": "Milliseconds to wait after page load (0–35000)."
},
"wait_for": {
"default": "",
"type": "string",
"description": "CSS or XPath selector to wait for before returning."
},
"wait_browser": {
"default": "domcontentloaded",
"type": "string",
"description": "domcontentloaded (default), load, networkidle0, networkidle2."
},
"block_resources": {
"default": true,
"type": "boolean",
"description": "Block images/CSS to speed up rendering."
},
"window_width": {
"default": 1920,
"type": "integer",
"description": "Viewport width (default 1920)."
},
"window_height": {
"default": 1080,
"type": "integer",
"description": "Viewport height (default 1080)."
},
"session_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer 0–10000000 to reuse an IP for up to 5 minutes."
},
"cookies": {
"default": "",
"type": "string",
"description": "Semicolon-separated cookies to send to the target."
},
"timeout": {
"default": 140000,
"type": "integer",
"description": "Request timeout in milliseconds (1000–140000, default 140000)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "desktop (default) or mobile."
},
"js_scenario": {
"default": "",
"type": "string",
"description": "Stringified JSON object of browser interaction instructions."
},
"ai_query": {
"default": "",
"type": "string",
"description": "Natural-language question for AI extraction."
},
"ai_selector": {
"default": "",
"type": "string",
"description": "CSS selector to focus AI extraction on part of the page."
}
},
"required": [
"url"
],
"additionalProperties": false
}
extract_page_data
Scrape a URL using ScrapingBee and extract specific data using
CSS or XPath selectors.
Scope: one URL per call, with the result returned into the conversation.
For many URLs, a whole site, output written to a file or directory,
resumable jobs, or a scheduled re-run, use the ScrapingBee CLI instead —
`scrapingbee scrape --input-file urls.txt --output-dir results`,
`scrapingbee crawl URL --save-pattern ...`, `scrapingbee schedule --every`.
This server has no batch, crawl, file-output or scheduling equivalent.
Parameters23
url
string
required
The URL of the page to scrape.
extract_rules
string
required
A JSON string defining extraction rules.
SIMPLE SYNTAX:
Use {"key_name": "css_or_xpath_selector"} format.
- CSS selector example: {"title": "h1", "price": "span.price"}
- XPath selector example:
{"title": "//h1", "items": "//div[@class='item']"}
- Extract attribute value of an element using @<attribute>
or if you are using extended syntax <element>@<attribute>,
for example: {"image": "img@src"},
"link": {"selector": "a","output": "@href"}
Note: Selectors starting with "/" are treated as XPath,
otherwise CSS.
EXTENDED SYNTAX:
For more control, use a dict with these options:
- "selector": CSS or XPath selector string (required)
- "type": "item" (single element, default) or
"list" (multiple elements)
- "output": It is also possible to add extraction rules inside
the output option in order to create powerful extractors.
Extended example:
{
"title" : "h1",
"subtitle" : "#subtitle",
"articles": {
"selector": ".card",
"type": "list",
"output": {
"title": ".post-title",
"link": {
"selector": ".post-title",
"output": "@href"
},
"description": ".post-description"
}
}
}
auto_mode
boolean
optional
On by default — ScrapingBee automatically picks the cheapest
configuration that successfully fetches the page, escalating proxy
strength only as needed (you are charged only for the winning
config). To choose a configuration yourself instead, use one of:
auto_mode=False for the classic tier (no proxy, cheapest),
premium_proxy=True, or stealth_proxy=True — the two proxy flags
override auto_mode on their own, so auto_mode=False is only needed
for the classic tier. Setting render_js also switches to manual.
max_cost
integer
optional
Optional credit ceiling for auto_mode (integer >= 1). The request
will not escalate to a configuration costing more than this many credits.
0 means no ceiling. Ignored unless auto_mode is True.
premium_proxy
boolean
optional
Manual option: use a premium proxy (middle tier of
classic/premium/stealth). Setting this disables auto_mode.
stealth_proxy
boolean
optional
Manual option: use a stealth proxy (strongest tier of
classic/premium/stealth). Setting this disables auto_mode.
custom_google
boolean
optional
Set to True if the url is a google domain in the following
format: <subdomain>.google.<top-level-domain>
(Example: translate.google.com, mail.google.com, www.google.co.in etc)
country_code
string
optional
ISO 3166-1 alpha-2 country code (e.g. "fr", "us") to
route the request through an IP in that country. Only takes effect
when premium_proxy or stealth_proxy is True.
render_js
any
optional
Whether to use headless-browser rendering. Setting this
explicitly switches the request to manual configuration
(disables auto_mode).
wait
integer
optional
Milliseconds to wait after page load (0–35000).
wait_for
string
optional
CSS or XPath selector to wait for before returning.
Integer 0–10000000 to reuse an IP for up to 5 minutes.
cookies
string
optional
Semicolon-separated cookies to send to the target.
timeout
integer
optional
Request timeout in milliseconds (1000–140000, default 140000).
device
string
optional
desktop (default) or mobile.
js_scenario
string
optional
Stringified JSON object of browser interaction instructions.
ai_extract_rules
string
optional
JSON string of AI extraction rules.
ai_selector
string
optional
CSS selector to focus AI extraction on part of the page.
json_response
boolean
optional
Return the full JSON envelope instead of the raw body.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the page to scrape."
},
"extract_rules": {
"type": "string",
"description": "A JSON string defining extraction rules.\n\n SIMPLE SYNTAX:\n Use {\"key_name\": \"css_or_xpath_selector\"} format.\n - CSS selector example: {\"title\": \"h1\", \"price\": \"span.price\"}\n - XPath selector example:\n {\"title\": \"//h1\", \"items\": \"//div[@class='item']\"}\n - Extract attribute value of an element using @<attribute>\n or if you are using extended syntax <element>@<attribute>,\n for example: {\"image\": \"img@src\"},\n \"link\": {\"selector\": \"a\",\"output\": \"@href\"}\n\n Note: Selectors starting with \"/\" are treated as XPath,\n otherwise CSS.\n\n EXTENDED SYNTAX:\n For more control, use a dict with these options:\n - \"selector\": CSS or XPath selector string (required)\n - \"type\": \"item\" (single element, default) or\n \"list\" (multiple elements)\n - \"output\": It is also possible to add extraction rules inside\n the output option in order to create powerful extractors.\n\n Extended example:\n {\n \"title\" : \"h1\",\n \"subtitle\" : \"#subtitle\",\n \"articles\": {\n \"selector\": \".card\",\n \"type\": \"list\",\n \"output\": {\n \"title\": \".post-title\",\n \"link\": {\n \"selector\": \".post-title\",\n \"output\": \"@href\"\n },\n \"description\": \".post-description\"\n }\n }\n }"
},
"auto_mode": {
"default": true,
"type": "boolean",
"description": "On by default — ScrapingBee automatically picks the cheapest\nconfiguration that successfully fetches the page, escalating proxy\nstrength only as needed (you are charged only for the winning\nconfig). To choose a configuration yourself instead, use one of:\nauto_mode=False for the classic tier (no proxy, cheapest),\npremium_proxy=True, or stealth_proxy=True — the two proxy flags\noverride auto_mode on their own, so auto_mode=False is only needed\nfor the classic tier. Setting render_js also switches to manual."
},
"max_cost": {
"default": 0,
"type": "integer",
"description": "Optional credit ceiling for auto_mode (integer >= 1). The request\nwill not escalate to a configuration costing more than this many credits.\n0 means no ceiling. Ignored unless auto_mode is True."
},
"premium_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a premium proxy (middle tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"stealth_proxy": {
"default": false,
"type": "boolean",
"description": "Manual option: use a stealth proxy (strongest tier of\nclassic/premium/stealth). Setting this disables auto_mode."
},
"custom_google": {
"default": false,
"type": "boolean",
"description": "Set to True if the url is a google domain in the following\nformat: <subdomain>.google.<top-level-domain>\n(Example: translate.google.com, mail.google.com, www.google.co.in etc)"
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. \"fr\", \"us\") to\nroute the request through an IP in that country. Only takes effect\nwhen premium_proxy or stealth_proxy is True."
},
"render_js": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether to use headless-browser rendering. Setting this\nexplicitly switches the request to manual configuration\n(disables auto_mode)."
},
"wait": {
"default": 0,
"type": "integer",
"description": "Milliseconds to wait after page load (0–35000)."
},
"wait_for": {
"default": "",
"type": "string",
"description": "CSS or XPath selector to wait for before returning."
},
"wait_browser": {
"default": "domcontentloaded",
"type": "string",
"description": "domcontentloaded (default), load, networkidle0, networkidle2."
},
"block_resources": {
"default": true,
"type": "boolean",
"description": "Block images/CSS to speed up rendering."
},
"window_width": {
"default": 1920,
"type": "integer",
"description": "Viewport width (default 1920)."
},
"window_height": {
"default": 1080,
"type": "integer",
"description": "Viewport height (default 1080)."
},
"session_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer 0–10000000 to reuse an IP for up to 5 minutes."
},
"cookies": {
"default": "",
"type": "string",
"description": "Semicolon-separated cookies to send to the target."
},
"timeout": {
"default": 140000,
"type": "integer",
"description": "Request timeout in milliseconds (1000–140000, default 140000)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "desktop (default) or mobile."
},
"js_scenario": {
"default": "",
"type": "string",
"description": "Stringified JSON object of browser interaction instructions."
},
"ai_extract_rules": {
"default": "",
"type": "string",
"description": "JSON string of AI extraction rules."
},
"ai_selector": {
"default": "",
"type": "string",
"description": "CSS selector to focus AI extraction on part of the page."
},
"json_response": {
"default": false,
"type": "boolean",
"description": "Return the full JSON envelope instead of the raw body."
}
},
"required": [
"url",
"extract_rules"
],
"additionalProperties": false
}
get_screenshot
Scrape a URL using ScrapingBee and return it's screenshot.
Scope: one URL per call, with the result returned into the conversation.
For many URLs, a whole site, output written to a file or directory,
resumable jobs, or a scheduled re-run, use the ScrapingBee CLI instead —
`scrapingbee scrape --input-file urls.txt --output-dir results`,
`scrapingbee crawl URL --save-pattern ...`, `scrapingbee schedule --every`.
This server has no batch, crawl, file-output or scheduling equivalent.
Parameters20
url
string
required
The URL of the page to scrape.
screenshot_full_page
boolean
optional
Whether to take a screenshot of the full page
or just the viewport.
screenshot_selector
string
optional
A CSS selector to take a screenshot of a specific element.
premium_proxy
boolean
optional
Whether to use a premium proxy for the request.
Use it only if you are getting blocked by the website,
that is when you get a 500 status code.
stealth_proxy
boolean
optional
Whether to use a stealth proxy for the request.
Use it only if you are getting blocked by the website
while using premium_proxy, that is when you get a 500 status code.
custom_google
boolean
optional
Set to True if the url is a google domain in the following
format: <subdomain>.google.<top-level-domain>
(Example: translate.google.com, mail.google.com, www.google.co.in etc)
country_code
string
optional
ISO 3166-1 alpha-2 country code (e.g. "fr", "us") to
route the request through an IP in that country. Only takes effect
when premium_proxy or stealth_proxy is True.
render_js
any
optional
Whether to use headless-browser rendering.
wait
integer
optional
Milliseconds to wait after page load (0–35000).
wait_for
string
optional
CSS or XPath selector to wait for before returning.
Integer 0–10000000 to reuse an IP for up to 5 minutes.
cookies
string
optional
Semicolon-separated cookies to send to the target.
timeout
integer
optional
Request timeout in milliseconds (1000–140000, default 140000).
device
string
optional
desktop (default) or mobile.
js_scenario
string
optional
Stringified JSON object of browser interaction instructions.
json_response
boolean
optional
Deprecated, removed in Version 3. Return the full JSON
envelope (page content plus the base64 image under its
"screenshot" key) instead of the raw image.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the page to scrape."
},
"screenshot_full_page": {
"default": false,
"type": "boolean",
"description": "Whether to take a screenshot of the full page\nor just the viewport."
},
"screenshot_selector": {
"default": "",
"type": "string",
"description": "A CSS selector to take a screenshot of a specific element."
},
"premium_proxy": {
"default": false,
"type": "boolean",
"description": "Whether to use a premium proxy for the request.\nUse it only if you are getting blocked by the website,\nthat is when you get a 500 status code."
},
"stealth_proxy": {
"default": false,
"type": "boolean",
"description": "Whether to use a stealth proxy for the request.\nUse it only if you are getting blocked by the website\nwhile using premium_proxy, that is when you get a 500 status code."
},
"custom_google": {
"default": false,
"type": "boolean",
"description": "Set to True if the url is a google domain in the following\nformat: <subdomain>.google.<top-level-domain>\n(Example: translate.google.com, mail.google.com, www.google.co.in etc)"
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. \"fr\", \"us\") to\nroute the request through an IP in that country. Only takes effect\nwhen premium_proxy or stealth_proxy is True."
},
"render_js": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether to use headless-browser rendering."
},
"wait": {
"default": 0,
"type": "integer",
"description": "Milliseconds to wait after page load (0–35000)."
},
"wait_for": {
"default": "",
"type": "string",
"description": "CSS or XPath selector to wait for before returning."
},
"wait_browser": {
"default": "domcontentloaded",
"type": "string",
"description": "domcontentloaded (default), load, networkidle0, networkidle2."
},
"block_resources": {
"default": false,
"type": "boolean",
"description": "Block images/CSS to speed up rendering."
},
"window_width": {
"default": 1920,
"type": "integer",
"description": "Viewport width (default 1920)."
},
"window_height": {
"default": 1080,
"type": "integer",
"description": "Viewport height (default 1080)."
},
"session_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer 0–10000000 to reuse an IP for up to 5 minutes."
},
"cookies": {
"default": "",
"type": "string",
"description": "Semicolon-separated cookies to send to the target."
},
"timeout": {
"default": 140000,
"type": "integer",
"description": "Request timeout in milliseconds (1000–140000, default 140000)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "desktop (default) or mobile."
},
"js_scenario": {
"default": "",
"type": "string",
"description": "Stringified JSON object of browser interaction instructions."
},
"json_response": {
"default": false,
"type": "boolean",
"description": "Deprecated, removed in Version 3. Return the full JSON\nenvelope (page content plus the base64 image under its\n\"screenshot\" key) instead of the raw image."
}
},
"required": [
"url"
],
"additionalProperties": false
}
get_file
Fetches a file from a URL and returns it in a format suitable for FastMcP.
This tool can be used to fetch any file type, including images, PDFs, etc.
The framework will handle the encoding and packaging of the file.
Scope: one URL per call, with the result returned into the conversation.
For many URLs, a whole site, output written to a file or directory,
resumable jobs, or a scheduled re-run, use the ScrapingBee CLI instead —
`scrapingbee scrape --input-file urls.txt --output-dir results`,
`scrapingbee crawl URL --save-pattern ...`, `scrapingbee schedule --every`.
This server has no batch, crawl, file-output or scheduling equivalent.
Parameters9
url
string
required
The URL of the file to fetch.
premium_proxy
boolean
optional
Whether to use a premium proxy for the request.
Use it only if you are getting blocked by the website.
custom_google
boolean
optional
Set to True if the url is a google domain in the following
format: <subdomain>.google.<top-level-domain>
(Example: translate.google.com, mail.google.com, www.google.co.in etc)
country_code
string
optional
ISO 3166-1 alpha-2 country code (e.g. "fr", "us") to
route the request through an IP in that country. Only takes effect
when premium_proxy is True.
render_js
boolean
optional
Whether to use headless-browser rendering (default False).
session_id
any
optional
Integer 0–10000000 to reuse an IP for up to 5 minutes.
cookies
string
optional
Semicolon-separated cookies to send to the target.
timeout
integer
optional
Request timeout in milliseconds (1000–140000, default 140000).
device
string
optional
desktop (default) or mobile.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL of the file to fetch."
},
"premium_proxy": {
"default": false,
"type": "boolean",
"description": "Whether to use a premium proxy for the request.\nUse it only if you are getting blocked by the website."
},
"custom_google": {
"default": false,
"type": "boolean",
"description": "Set to True if the url is a google domain in the following\nformat: <subdomain>.google.<top-level-domain>\n(Example: translate.google.com, mail.google.com, www.google.co.in etc)"
},
"country_code": {
"default": "",
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (e.g. \"fr\", \"us\") to\nroute the request through an IP in that country. Only takes effect\nwhen premium_proxy is True."
},
"render_js": {
"default": false,
"type": "boolean",
"description": "Whether to use headless-browser rendering (default False)."
},
"session_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Integer 0–10000000 to reuse an IP for up to 5 minutes."
},
"cookies": {
"default": "",
"type": "string",
"description": "Semicolon-separated cookies to send to the target."
},
"timeout": {
"default": 140000,
"type": "integer",
"description": "Request timeout in milliseconds (1000–140000, default 140000)."
},
"device": {
"default": "desktop",
"type": "string",
"description": "desktop (default) or mobile."
}
},
"required": [
"url"
],
"additionalProperties": false
}
get_scrapingbee_usage
Read real-time credit and concurrency usage for the authenticated
ScrapingBee account.
Note: This endpoint is rate-limited to 6 calls per minute and does not
count against the account's concurrency limit.
Returns:
max_api_credit, used_api_credit, max_concurrency, current_concurrency,
renewal_subscription_date.
Scrape Walmart search results using ScrapingBee.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters15
query
string
required
The search query to perform.
add_html
boolean
optional
Whether to return the HTML along with the search results.
delivery_zip
string
optional
The zip code to use for delivery localization.
device
string
optional
The device to use for the search (desktop, mobile, tablet).
domain
string
optional
The domain to use for the search
(Example: com, ca, com.mx, etc.) for localization.
fulfillment_speed
string
optional
The fulfillment speed to use for the search
(today, tomorrow, 2_days, anytime).
fulfillment_type
string
optional
The fulfillment type to use for the search (in_store).
light_request
boolean
optional
Whether to use a light request or not.
max_price
any
optional
The maximum price to use for the search.
min_price
any
optional
The minimum price to use for the search.
sort_by
string
optional
The sort order to use for the search
(best_match, price_low, price_high, best_seller).
store_id
string
optional
Specific Walmart store ID for localization.
start_page
integer
optional
The page number to return (default 1).
screenshot
boolean
optional
Force a browser screenshot (returns base64 image).
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query to perform."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the HTML along with the search results."
},
"delivery_zip": {
"default": "",
"type": "string",
"description": "The zip code to use for delivery localization."
},
"device": {
"default": "desktop",
"type": "string",
"description": "The device to use for the search (desktop, mobile, tablet)."
},
"domain": {
"default": "",
"type": "string",
"description": "The domain to use for the search\n(Example: com, ca, com.mx, etc.) for localization."
},
"fulfillment_speed": {
"default": "",
"type": "string",
"description": "The fulfillment speed to use for the search\n(today, tomorrow, 2_days, anytime)."
},
"fulfillment_type": {
"default": "",
"type": "string",
"description": "The fulfillment type to use for the search (in_store)."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Whether to use a light request or not."
},
"max_price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The maximum price to use for the search."
},
"min_price": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "The minimum price to use for the search."
},
"sort_by": {
"default": "best_match",
"type": "string",
"description": "The sort order to use for the search\n(best_match, price_low, price_high, best_seller)."
},
"store_id": {
"default": "",
"type": "string",
"description": "Specific Walmart store ID for localization."
},
"start_page": {
"default": 1,
"type": "integer",
"description": "The page number to return (default 1)."
},
"screenshot": {
"default": false,
"type": "boolean",
"description": "Force a browser screenshot (returns base64 image)."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"query"
],
"additionalProperties": false
}
get_walmart_product_details
Scrape Walmart product details using ScrapingBee.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters9
product_id
string
required
The unique identifier for the Walmart product.
add_html
boolean
optional
Whether to return the HTML along with the product details.
delivery_zip
string
optional
The zip code to use for delivery localization.
device
string
optional
The device to use for the request (desktop, mobile, tablet).
domain
string
optional
The domain to use for the search
(Example: com, ca, com.mx, etc.) for localization.
light_request
boolean
optional
Whether to use a light request or not.
store_id
string
optional
Specific Walmart store ID for localization.
screenshot
boolean
optional
Force a browser screenshot (returns base64 image).
tag
string
optional
Response-header label only.
Raw schema
{
"type": "object",
"properties": {
"product_id": {
"type": "string",
"description": "The unique identifier for the Walmart product."
},
"add_html": {
"default": false,
"type": "boolean",
"description": "Whether to return the HTML along with the product details."
},
"delivery_zip": {
"default": "",
"type": "string",
"description": "The zip code to use for delivery localization."
},
"device": {
"default": "desktop",
"type": "string",
"description": "The device to use for the request (desktop, mobile, tablet)."
},
"domain": {
"default": "",
"type": "string",
"description": "The domain to use for the search\n(Example: com, ca, com.mx, etc.) for localization."
},
"light_request": {
"default": true,
"type": "boolean",
"description": "Whether to use a light request or not."
},
"store_id": {
"default": "",
"type": "string",
"description": "Specific Walmart store ID for localization."
},
"screenshot": {
"default": false,
"type": "boolean",
"description": "Force a browser screenshot (returns base64 image)."
},
"tag": {
"default": "",
"type": "string",
"description": "Response-header label only."
}
},
"required": [
"product_id"
],
"additionalProperties": false
}
get_youtube_search_results
Search YouTube and return structured results.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters17
search
string
required
The search query.
upload_date
string
optional
Filter by date:
'today', 'last_hour', 'this_week', 'this_month', 'this_year'.
result_type
string
optional
Filter by type: 'video', 'channel', 'playlist', 'movie'.
duration
string
optional
Filter by duration: '<4' (short), '4-20' (medium), '>20' (long).
Fetch structured metadata for a YouTube video including title, description,
views, likes, channel info, and technical details.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters1
video_id
string
required
The unique YouTube video ID (e.g., 'rfscVS0vtbw').
Raw schema
{
"type": "object",
"properties": {
"video_id": {
"type": "string",
"description": "The unique YouTube video ID (e.g., 'rfscVS0vtbw')."
}
},
"required": [
"video_id"
],
"additionalProperties": false
}
get_youtube_video_subtitles
Retrieve subtitles for one YouTube video.
Scope: one query per call. To run many queries in one pass, or to write
results to disk instead of into the conversation, use the ScrapingBee CLI —
`scrapingbee <command> --input-file queries.txt --output-dir results`.
Parameters4
video_id
string
required
The unique YouTube video ID.
language
string
optional
Language code (e.g., 'en', 'es', 'fr'). Default is 'en'.
subtitle_origin
string
optional
'auto_generated' (default) or 'uploader_provided'.
A production-ready Model Context Protocol (MCP) server that enables AI agents to access structured web data using ScrapingBee as a tool.
This project demonstrates how to transform ScrapingBee into an AI-native data layer. Instead of embedding scraping logic directly inside prompts, AI agents register ScrapingBee as a tool and request structured web data on demand.
If you are building:
• AI agents that require live web access
• Autonomous research systems
• Ecommerce intelligence bots
• Market monitoring agents
• LLM workflows with tool execution
• AI-powered web scraping infrastructure
This repository provides a complete MCP integration blueprint.
Quick start
The server is hosted by ScrapingBee at https://mcp.scrapingbee.com/mcp (Streamable HTTP) —
there is nothing to install. You need a ScrapingBee API key
(get one here; trial credits included),
sent as the header Authorization: Bearer <key>. Registry name: com.scrapingbee/mcp.
Fetch a URL and return its content as text or markdown (JavaScript rendered, blocks handled)
get_page_html
Fetch a URL and return the rendered HTML
get_screenshot
Fetch a URL and return a screenshot
get_file
Download a file (PDF, image, …) from a URL
extract_page_data
Fetch a URL and extract specific data with CSS or XPath selectors
fast_search
Fast web search returning clean organic results and top stories — the first choice for general searches
get_google_search_results
Google SERP as JSON for specialised searches: news, maps, Lens, shopping, images, AI mode
get_amazon_search_results
Amazon search results as JSON
get_amazon_product_details
Amazon product details by ASIN
get_amazon_pricing
Current Amazon price and seller offers by ASIN
get_walmart_search_results
Walmart search results as JSON
get_walmart_product_details
Walmart product details by ID
get_youtube_search_results
YouTube search results
get_youtube_video_metadata
Title, description, stats and more for a video
get_youtube_video_subtitles
Subtitles / transcript for a video
ask_chatgpt
Send a prompt to ChatGPT, optionally with web search
ask_gemini
Send a prompt to Gemini, with citations when available
get_scrapingbee_usage
Remaining credits and concurrency for your account
Each call consumes API credits exactly as the equivalent ScrapingBee API request would
(see pricing and the
API documentation). The server handles one page or
query per call; for hundreds of URLs, crawling a site, writing results to files or scheduling
recurring jobs, use the ScrapingBee CLI.
Relevant keywords:
scrapingbee mcp
model context protocol server
mcp scraping
ai agent web scraping
mcp web scraping tool
What Is Model Context Protocol (MCP)?
Model Context Protocol (MCP) defines how AI systems interact with external tools in a structured way.
Instead of letting a language model guess how to scrape or browse the web, MCP allows it to:
Discover available tools
Call a tool using structured parameters
Receive normalized JSON responses
Inject results back into the reasoning loop
The ScrapingBee MCP server exposes web scraping capabilities as a formally registered tool that AI systems can use safely and predictably.
The MCP server acts as a bridge between your AI agent and ScrapingBee’s managed scraping infrastructure.
This enables true AI agent web scraping without fragile prompt-based hacks.
Architecture Overview
AI Agent
→ MCP Client
→ ScrapingBee MCP Server
→ ScrapingBee API
→ Target Website
→ Structured JSON Response
→ Injected Back Into Agent Context
The AI agent never scrapes directly.
It calls tools.
The MCP server executes them.
Installation
There is nothing to install or run: the server is operated by ScrapingBee at
https://mcp.scrapingbee.com/mcp. The only setup is your API key, which every client below
sends as a Authorization: Bearer header:
bash
export SCRAPINGBEE_API_KEY=your_api_key
Connecting to the ScrapingBee MCP Server
You can connect in two ways:
Via Claude Desktop (remote MCP)
Via a custom Python MCP client
Option 1: Connect to Claude Desktop
Add the ScrapingBee MCP server to your claude_desktop_config.json file:
asyncdefmain():
mcp_client = MCPClient(MCP_SERVER_URL, SCRAPINGBEE_API_KEY)
tools_response = await mcp_client.initialize()
genai.configure(api_key=GEMINI_API_KEY)
gemini_tools = format_tools_for_gemini(tools_response["result"]["tools"])
model = genai.GenerativeModel(
model_name="gemini-2.5-pro",
tools=gemini_tools
)
user_prompt = input("Ask the AI to perform a task:\n> ")
response = model.generate_content(user_prompt)
function_call = response.candidates[0].content.parts[0].function_call
tool_name = function_call.name
tool_args = dict(function_call.args)
result = await mcp_client.call_tool(tool_name, tool_args)
print(json.dumps(result, indent=2))
What This Enables
With this architecture you can:
• Build AI agents that reason about available tools
• Allow LLMs to dynamically choose scraping actions
• Execute structured web data extraction
• Inject real-world data into model context
• Create scalable AI-native web scraping systems
Conclusion
The ScrapingBee MCP Server transforms web scraping into a structured, tool-driven data layer for AI systems.
Instead of brittle prompt scraping, you get:
• Model Context Protocol compliance
• JSON-RPC structured execution
• AI agent web scraping
• Scalable tool orchestration
This is AI-native web data access.
To start building AI-powered agents today, Get your free API key and connect to the ScrapingBee MCP server in minutes.