Outscraper Mcp Server

by outscraper

400 downloads
Not rated
GitHub

About

Outscraper MCP Server provides MCP-compatible clients with access to Outscraper’s data extraction tools. It enables web, business, maps, reviews, and search-related data collection through the Outscraper API using a simple MCP server configuration.

Details

Author
outscraper
Downloads
400
Categories
Web Scraping, Other, Search, AI, Automation

- Connects AI assistants to the Outscraper API
- Works with any MCP-compatible client
- Installs easily through npx
- Supports API-key based authentication
- Useful for business data, search, and maps extraction

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Outscraper Mcp Server
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

Install by adding the server configuration to your MCP client. Use npx to run the server and set your Outscraper API key in the OUTSCRAPER_API_KEY environment variable.

ai_scraper

Extract structured information from a web page with Outscraper AI Scraper. Best for: - scraping one page and turning it into structured JSON - extracting company, people, product, or document metadata from a site - guiding extraction with both a prompt and a JSON-schema-like shape This tool is best for extracting structured data from a single page. How schema works: - schema describes the shape of the output you want back - use type="object" with properties for named fields - use type="array" with items when a field should be a list - add required when some fields must be present Example schema: { "type": "object", "required": [], "properties": { "company_name": { "type": "string" }, "company_description": { "type": "string" }, "people": { "type": "array", "items": { "type": "string" } } } } Execution notes: - execution_mode="sync" requests a direct response - execution_mode="async" returns a request id for polling with requests_get - if both prompt and schema are provided, prompt guides the extraction and schema shapes the output

businesses_search

Search Outscraper businesses using structured filters, a natural-language query, or both. Best for: - building lead lists from normalized business records - filtering by country, state, city, type, and other structured business fields - paginated browsing with cursor when you want repeatable result navigation Prefer this tool when: - you already know the geography, categories, or other business filters you want - you want the normalized /businesses dataset rather than raw Google Maps search behavior - you need stable field selection and cursor-based pagination Use this instead of google_maps_search when: - you want the normalized /businesses API - you need field selection, filters, or cursor pagination Note: - according to the current OpenAPI, /businesses is a synchronous endpoint in this MCP server - async-style execution controls are intentionally not exposed here - structured filters are the most reliable input mode - live Outscraper testing showed that free-form query parsing may fail with "Could not parse query into a valid request format."

businesses_get

Get one business by Outscraper business id. Best for: - loading the full detail payload for a business found via businesses_search - fetching a smaller field-selected payload for one known business id Use this after businesses_search when you already know the exact business id. Do not use this for discovery: - use businesses_search to find records first - then call businesses_get for the exact item you want to enrich or inspect

google_maps_search

Search Google Maps places through Outscraper. Best for: - ad hoc place discovery from one or more Google Maps queries - cases where the user thinks in Google Maps terms rather than /businesses filters - retrieving place results directly from the Google Maps search pipeline Prefer this tool when: - the user gives Google Maps-style queries such as "restaurants brooklyn usa" - you want place discovery without building structured business filters first - you want async submissions for larger query batches or enriched Google Maps searches Use businesses_search instead when: - you want normalized businesses filters or cursor pagination - you want to combine strict filters with natural-language business search Use execution_mode="auto" when: - there are multiple queries - the limit is high - enrichments are requested

google_maps_reviews

Fetch Google Maps reviews for place ids or place queries. Best for: - review analysis - recent-review monitoring - targeted review extraction for specific places Prefer this tool when: - the user needs review text, review counts, or review metadata - you already know the place or can identify it from a query - async polling is acceptable for heavier review jobs Use async mode when: - review volume is large - you query many places in one request - you want to poll progress later with requests_get Do not use this for basic place discovery: - use google_maps_search first - then use google_maps_reviews once you know the target place or query set

google_maps_photos

Fetch Google Maps photos with the documented /google-maps-photos endpoint. Best for: - place photo extraction - menu photo retrieval - owner photo and latest photo analysis

google_search

Search Google with the documented /google-search endpoint.

google_search_images

Search Google Images with the documented /google-search-images endpoint.

yellowpages_search

Search Yellowpages with the documented /yellowpages-search endpoint.

indeed_search

Search Indeed with the documented /indeed-search endpoint.

tripadvisor_search

Search Tripadvisor with the documented /tripadvisor-search endpoint.

booking_reviews

Fetch Booking reviews with the documented /booking-reviews endpoint.

yelp_reviews

Fetch Yelp reviews with the documented /yelp-reviews endpoint.

tripadvisor_reviews

Fetch Tripadvisor reviews with the documented /tripadvisor-reviews endpoint.

tp_data

Legacy alias for trustpilot_data. Prefer trustpilot_data for new integrations.

trustpilot_data

Fetch Trustpilot business data with the documented /trustpilot endpoint.

tp_reviews

Legacy alias for trustpilot_reviews. Prefer trustpilot_reviews for new integrations.

trustpilot_reviews

Fetch Trustpilot reviews with the documented /trustpilot-reviews endpoint.

emails_validator

Validate email addresses with the documented /email-validator endpoint. Best for: - deliverability checks - validating outbound lead lists - filtering invalid email inputs before enrichment or outreach

phones_enricher

Enrich phone numbers using the documented /phones-enricher endpoint. Best for: - carrier lookup - phone validation - message deliverability checks Note: this endpoint is synchronous only and does not support async execution or webhooks.

chain_info

Detect chain membership using the documented ai_chain_info enrichment. This tool uses the documented enrichment on top of the Google Maps search pipeline. Use it when you want to know whether a business is part of a chain.

company_insights

Get structured company-level insight data from Outscraper. Best for: - enriching known companies or domains - pulling structured company metadata instead of raw search results - larger async enrichment jobs that can be tracked later with requests_get Prefer this tool when: - the user already has domains or company URLs - the goal is firmographics, company profile data, size, revenue, industry, or founding details - you want structured company enrichment rather than contact extraction Use async mode when: - you send many companies at once - the endpoint is expected to do expensive enrichment work Use emails_and_contacts instead when: - the user mainly wants emails, phones, socials, or people/contact data - company profile enrichment is secondary to lead/contact discovery Returns: - direct response payload in sync mode - async request metadata in async mode

emails_and_contacts

Find emails, phones, and social/contact data from one or more company domains. Best for: - domain-based lead enrichment - finding reachable company contacts from a known website - quick contact discovery before running heavier enrichment flows Prefer this tool when: - the user already knows the company website or domain - the main goal is contact discovery rather than company metadata - you want emails, phones, socials, and website-derived contact details Use async mode when: - you send many domains at once - you expect the crawl/enrichment to take longer - you want to track progress later with requests_get Use company_insights instead when: - the user wants firmographics, company profile, revenue, size, or founding details - contact data is not the main objective

ping

Check whether the Outscraper MCP server is running and return basic server metadata. Best for: - validating local or container startup - confirming the MCP server is reachable before making live API calls - lightweight health checks in demos, IDE setups, or registry validation

balance_get

Fetch the current Outscraper account balance and billing summary for the active API key. Best for: - checking whether the key is attached to a funded account - confirming account status before running larger jobs - reading upcoming invoice and usage billing details Use this when: - you want a quick health check for the current API key/account - you need to confirm available balance before large async jobs - you are debugging whether billing or account status might explain API behavior

requests_get

Check the status of an asynchronous Outscraper request. Use this after calling any tool with execution_mode="async" or after an auto-selected async submission. Typical flow: 1. call google_maps_reviews, company_insights, emails_and_contacts, or google_maps_search with execution_mode="async" 2. capture the returned request id 3. poll requests_get until the job is completed or failed Use this tool when: - a previous tool returned an async request id - you want to know whether the request is Pending, Success, or Failure - you need the completed data from a previously submitted async job

requests_list

List recent Outscraper requests by bucket. Best for: - debugging async flows - seeing running, completed, or failed jobs - checking what was recently submitted through the current API key Use this when: - you lost a request id and want to find recent jobs - you want a quick view of recent running or finished requests - you are debugging async submissions across tools

requests_delete

Delete or terminate an asynchronous Outscraper request by request id. Best for: - cleaning up queued or no-longer-needed async jobs - stopping work you no longer want to keep polling - testing the full async request lifecycle from MCP Use this carefully: - it is intended for cleanup or cancellation - only use it when you are sure the request is no longer needed - after deletion, the original async request should not be expected to complete normally

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "outscraper mcp server": {
            "outscraper": {
                "command": "npx",
                "args": [
                    "-y",
                    "outscraper-mcp"
                ],
                "env": {
                    "OUTSCRAPER_API_KEY": "YOUR_API_KEY"
                }
            }
        }
    }
}

McpServers

{
    "outscraper": {
        "command": "npx",
        "args": [
            "-y",
            "outscraper-mcp"
        ],
        "env": {
            "OUTSCRAPER_API_KEY": "YOUR_API_KEY"
        }
    }
}

Access Google Maps data, reviews, AI-structured insights, and business leads through the Outscraper MCP server, designed for seamless integration with AI agents and automation workflows.

Connect AI agents to Outscraper for business discovery, Google Maps intelligence, company and contact enrichment, review analysis, search, and structured web extraction.

- local business prospecting and lead generation
- Google Maps place, photo, and review intelligence
- company and contact enrichment from known domains
- async data collection workflows with polling
- extracting structured information from a single page

- browser automation or multi-step UI interaction
- generic OAuth-based SaaS integrations
- arbitrary document search outside the Outscraper data surface
- website crawling sessions that require a persistent browser

- find businesses withbusinesses_search, then enrich a chosen record withbusinesses_get
- search Google Maps places, then fetch reviews or photos for reputation analysis
- enrich a company domain, validate emails, and check contact coverage
- submit async jobs, then poll them withrequests_get
- extract structured data from a page withai_scraper

It exposes production-ready MCP tools for:

- business discovery and enrichment
- Google Maps places, reviews, photos, and chain detection
- company insights, emails, email validation, and phone enrichment
- Google Search and Google Images search
- Yellow Pages, Booking, Yelp, Tripadvisor, Trustpilot, and Indeed data
- account balance checks and async request lifecycle management

The server supports stdio and HTTP transports, npm-based installation, hosted header or URL auth, and a normalizedstructuredContentresult shape for MCP clients and agents.

This MCP server exposes Outscraper data sources and enrichment workflows to MCP-compatible clients.

- business and place discovery
- Google Maps review and photo retrieval
- contact and company enrichment
- AI-assisted structured extraction from a single page withai_scraper
- async request submission and polling throughrequests_get

In practice, the server acts as a thin MCP layer over the Outscraper API:

- MCP clients call tools on this server
- the server authenticates with an Outscraper API key
- requests are forwarded to Outscraper endpoints
- results are returned in a normalized MCP tool envelope

set OUTSCRAPER_API_KEY=YOUR_API_KEY npx -y outscraper-mcp

- command:npx
- args:["-y", "outscraper-mcp"]
- env:OUTSCRAPER_API_KEY=YOUR_API_KEY

For task-oriented workflows, copy-paste examples, and example agent skills, see theexamplesfolder.

- ping
- businesses_search
- businesses_get
- ai_scraper
- google_maps_search
- google_maps_reviews
- company_insights
- emails_and_contacts
- emails_validator
- google_maps_photos
- chain_info
- yellowpages_search
- booking_reviews
- phones_enricher
- tp_data(legacy alias fortrustpilot_data)
- trustpilot_data
- tp_reviews(legacy alias fortrustpilot_reviews)
- trustpilot_reviews
- yelp_reviews
- tripadvisor_search
- tripadvisor_reviews
- google_search
- google_search_images
- indeed_search
- balance_get
- requests_get
- requests_list
- requests_delete

These tools are aligned to the current documented Outscraper API shapes, including:

- POST /businesses
- POST /ai-scraper
- GET /businesses/{business_id}
- GET /google-maps-search
- GET /google-maps-photos
- GET /google-search
- GET /google-search-images
- GET /yellowpages-search
- GET /booking-reviews
- GET /phones-enricher
- GET /trustpilot
- GET /trustpilot-reviews
- GET /yelp-reviews
- GET /tripadvisor-search
- GET /tripadvisor-reviews
- GET /indeed-search
- GET /google-maps-reviews
- GET /company-insights
- GET /emails-and-contacts
- GET /email-validator
- documentedai_chain_infoenrichment viagoogle-maps-search
- GET /profile/balance
- GET /requests/{requestId}
- DELETE /requests/{requestId}
- GET /requests

Every tool now returns the same structured envelope:

{ "data": {}, "meta": { "service": "company_insights", "operation": "get" }, "async": { "id": "request-id", "status": "Pending", "results_location": "https://api.outscraper.com/requests/request-id", "is_async_submission": true, "next_step": "Call requests_get with request_id=\"request-id\" to check progress." } }

asyncis present when the response is an async submission or exposes async request metadata.

{ "execution_mode": "auto" }

- auto: let the MCP server choose sync or async
- sync: force direct response mode
- async: force async submission mode

The old booleanasyncis still accepted for compatibility, butexecution_modenow has priority.

The recommended way to use this MCP server is from npm.

ProvideOUTSCRAPER_API_KEYthrough your MCP client config or shell environment.

The server auto-loads.envon startup viadotenv.

On Windows, if a client cannot findnpx, use the full Node.js path instead, for example:

{ "command": "C:\\Program Files\\nodejs\\npx.cmd", "args": ["-y", "outscraper-mcp"] }

Security-sensitive issues should be reported according toSECURITY.md.

The server currently supports these connection patterns:

- Claude Desktop
- Claude Code
- Cursor
- VS Code
- Windsurf
- local MCP development

- hosted MCP endpoints
- n8n
- reverse proxy or domain-based deployment
- containerized remote usage

- X-OUTSCRAPER-API-KEY
- X-API-KEY
- Authorization: Bearer <api-key>
- /v1/mcp/<api-key>path auth

- HTTPPOST /mcp
- HTTPPOST /v1/mcp/<api-key>

- session-based MCP usage
- clients that rely on stateful HTTP transport semantics

- the same header or URL-based auth options as stateless HTTP

- POST /mcp
- GET /mcp
- DELETE /mcp
- and the same/v1/mcp/<api-key>route pattern

- stateful mode stores sessions in process memory, so it is better suited to a single instance or sticky-session deployment than horizontal scaling

If you want to connect this server to ChatGPT as a remote MCP connector, the simplest hosted form is:

https://your-domain.example/v1/mcp/YOUR_API_KEY

- Deploy the server over HTTPS behind a real domain or reverse proxy.
- Enable hosted mode withCLOUD_SERVICE=true.
- Use the URL-auth route if the connector cannot attach custom auth headers.
- Prefer header auth for server-to-server clients when custom headers are available.

- Name:Outscraper MCP
- Description:Business discovery, Google Maps data, enrichment, search, and AI scraping
- MCP Server URL:https://your-domain.example/v1/mcp/YOUR_API_KEY
- Authentication:None

- URL-auth is the most convenient option for connector-style setup, but it is less private than header auth because URLs are more likely to appear in logs.
- Avoid temporary tunnels that inject browser warning pages unless your connector can bypass them cleanly.

Then the HTTP caller can send the Outscraper API key in one of these headers:

- Authorization: Bearer <api-key>
- X-API-KEY: <api-key>
- X-OUTSCRAPER-API-KEY: <api-key>

InCLOUD_SERVICE=trueHTTP mode, request headers are used as the API key source. In local stdio mode,OUTSCRAPER_API_KEYis still required. HTTP requests without one of these auth forms are rejected before MCP processing begins.

For ChatGPT-style connectors or other hosted setups that cannot send custom headers, you can also pass the API key in the path:

http://localhost:3000/v1/mcp/YOUR_API_KEY

This route supports the same MCP behavior as/mcp, but authenticates from the URL path whenCLOUD_SERVICE=true. For server-to-server integrations, header auth is still preferred because URL-based API keys are more likely to appear in logs.

set HTTP_STREAMABLE_SERVER=true set HOST=localhost set PORT=3000 npx -y outscraper-mcp
http://localhost:3000/v1/mcp/YOUR_API_KEY

This repository also includes adocker-compose.ymlfor hosted/container deployments:

- binds3000:3000
- enablesCLOUD_SERVICE=true
- enables stateless Streamable HTTP
- listens on0.0.0.0
- useshttps://api.outscraper.comas the upstream API base URL

http://localhost:3000/mcp http://localhost:3000/v1/mcp/YOUR_API_KEY http://localhost:3000/health

- this compose file is intended for hosted remote access, not local stdio clients
- by default it expects callers to authenticate per request, not through a single server-wide API key
- if you put the service behind a domain or reverse proxy, prefer header auth for server-to-server usage
- URL auth is available mainly for connector flows that cannot attach custom headers

This mode uses local session management:

set SSE_LOCAL=true set HOST=localhost set PORT=3000 npx -y outscraper-mcp
set HTTP_STATEFUL_SERVER=true set HOST=localhost set PORT=3000 npx -y outscraper-mcp

- POST /mcpfor initialize and subsequent requests
- GET /mcpfor the session stream
- DELETE /mcpfor session termination

The session is tracked through themcp-session-idheader.

Hosted URL auth also works in stateful mode through:

http://localhost:3000/v1/mcp/YOUR_API_KEY

Add this to your Claude Desktop MCP config:

{ "mcpServers": { "outscraper": { "command": "npx", "args": ["-y", "outscraper-mcp"], "env": { "OUTSCRAPER_API_KEY": "YOUR_API_KEY" } } } }

Add the server with the Claude Code CLI:

claude mcp add outscraper -e OUTSCRAPER_API_KEY=YOUR_API_KEY -- npx -y outscraper-mcp

Add this to your global MCP configuration:

{ "mcpServers": { "outscraper": { "command": "npx", "args": ["-y", "outscraper-mcp"], "env": { "OUTSCRAPER_API_KEY": "YOUR_API_KEY" } } } }
{ "mcpServers": { "outscraper": { "command": "npx", "args": ["-y", "outscraper-mcp"], "env": { "OUTSCRAPER_API_KEY": "YOUR_API_KEY" } } } }
{ "mcp": { "inputs": [ { "type": "promptString", "id": "outscraperApiKey", "description": "Outscraper API Key", "password": true } ], "servers": { "outscraper": { "command": "npx", "args": ["-y", "outscraper-mcp"], "env": { "OUTSCRAPER_API_KEY": "${input:outscraperApiKey}" } } } } }
{ "mcpServers": { "outscraper": { "command": "npx", "args": ["-y", "outscraper-mcp"], "env": { "OUTSCRAPER_API_KEY": "YOUR_API_KEY" } } } }

For n8n or other HTTP MCP clients, run the server in Streamable HTTP mode:

set HTTP_STREAMABLE_SERVER=true set HOST=localhost set PORT=3000 set OUTSCRAPER_API_KEY=YOUR_API_KEY npx -y outscraper-mcp

Search businesses with structured filters

{ "filters": { "country_code": "US", "states": ["NY"], "cities": ["New York"], "types": ["restaurant", "cafe"] }, "fields": ["name", "phone", "website", "address", "rating", "reviews"], "limit": 25 }

Natural-languagequerysupport on/businessescurrently depends on Outscraper's own parser behavior. In live testing, structuredfilterswere reliable while free-formqueryvalues often returnedCould not parse query into a valid request format.

{ "query": "https://outscraper.com", "prompt": "Extract company name, company description, and people mentioned on the page.", "schema": { "type": "object", "required": [], "properties": { "company_name": { "type": "string" }, "company_description": { "type": "string" }, "people": { "type": "array", "items": { "type": "string" } } } }, "execution_mode": "sync" }

Useexecution_mode: "async"if you want a request id and plan to poll later withrequests_get.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.