mcpField
S
subimpact data (Apify)

subimpact data (Apify)

Local
apify.comSearch0Updated 4d ago

About subimpact data (Apify)

@subimpact/data-mcp exposes a collection of public-data tools to AI agents through one MCP server, with data collection performed by Apify actors. It covers search, social, jobs, maps, commerce and other sources, while runs and charges use the operator’s Apify account.

Key features

  1. 01Search and Google AI results
  2. 02News, social and video data
  3. 03Maps, jobs and event listings
  4. 04Website extraction and SEO audits
  5. 05Tool selection and per-run charge caps
  6. 06Retrieve results from long-running jobs

Use cases

  1. 01Collect search and AI Overview results
  2. 02Monitor news and social mentions
  3. 03Gather job, event or map listings
  4. 04Extract web content for RAG pipelines

MCP support

The server launches Apify actors with the configured APIFY_TOKEN and returns dataset items to MCP clients. Long-running calls return a runId that can be queried using get_run_results.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"subimpact-data": {
"command": "npx",
"args": [
"-y",
"@subimpact/data-mcp"
],
"env": {
"APIFY_TOKEN": "<APIFY_TOKEN>"
}
}
}
}
Run commandnpx -y @subimpact/data-mcp
Environment variables to set
APIFY_TOKENSecretYour Apify API token. Runs are billed to your Apify account at each actor's Store price.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@subimpact/data-mcp1.1.0

Tools

23

Saved tool list · updated 3d ago

ParameterTypeRequiredDescription
glstringNoTwo-letter country code for Google results, e.g. us, my, uk, sg.
hlstringNoTwo-letter language code, e.g. en, ms, zh.
udm56booleanNoWhen true, appends &udm=56 to the search URL. Default FALSE after measurement (2026-09-07 A/B, 10 queries x 2 variants): udm=56 cut AIO coverage 8/10 to 4/10 and did not pin the classic surface (AI Mode share unchanged). Kept for control; leave off for Google's default routing.
mobilebooleanNoWhen true, fetches the SERP and the folsrch fragment with a mobile device header set (got-scraping header generator, devices: ['mobile']). Default FALSE. Measurement (2026-09-07 spike, 10 queries x 4 variants, gl=sg): mobile UA cut truncation 6/8 (75%) to 3/8 (37%), mean answer length 687 -> 852 chars, fetch success 15/20 -> 19/20. n=10, one market, one day — EnterRank's paired A/B (30 queries x 2, MY market) was inconclusive: zero of 29 queries were classic-with-an-overview in both arms (commercial prompt set routes to AI Mode). Do not flip the default until a classic-serving prompt set settles it.
queriesarrayYesList of search queries to run. Max 1000 per run.
locationstringNoGeo target for results, e.g. "New York, NY" or "Kuala Lumpur". Empty = Google uses proxy IP geolocation. Encoded server-side via Google uule (same as SerpAPI).
_maxItemsintegerNoHow many dataset items to return to the model (1-1000, default 50). Truncates the response only; it does not change what the Actor collects or charges for.
maxResultsintegerNoHow many organic results to return per query (1-10, default 10).
concurrencyintegerNoNumber of parallel queries (1-30, default 10). A/B measured: 20 queries at c5=34s, c10=35s, c20=65s — the SERP proxy pool is the bottleneck, so beyond ~10 workers latency balloons. 10 gives the same throughput as 5 with headroom for AI-Overview-heavy sets.
_maxChargeUsdnumberNoPer-run spending cap in USD (default 0.5). Passed to Apify as the run option maxTotalChargeUsd, so the run stops when it reaches this charge.
excludeAiModebooleanNoDefault TRUE. When Google serves the AI Mode surface instead of a classic AI Overview (after the optional retryAiModeForClassic re-fetch, if enabled), the row carries no ai_overview. search_metadata.ai_mode_detected and search_metadata.ai_mode_excluded are true. Organic results and People Also Ask are still delivered; the row is Success and charged, the same as a query Google shows no AI Overview for. Set to false to ship the AI Mode answer as before (flagged ai_mode_detected, Success, charged).
captureRawHtmlbooleanNoWhen true, saves the raw SERP HTML for every query to the key-value store (key: raw-<query>-<ts>.html). Used for building golden test corpora and debugging selector drift. Adds ~200-400KB per query to KV storage. Default false.
retryDeferredAIObooleanNoGoogle generates AI Overviews asynchronously — the first fetch sometimes returns only a placeholder shell. When true, the actor re-fetches (up to retryDeferredMaxFetches total) and keeps the richest response. Each retry costs one extra proxy request (~$0.0025) + compute on affected queries only. Set false to always use a single fetch per query.
resolveGotoTokensbooleanNoWhen true (default), AI Overview citations that still carry a raw /goto? token after the resolution chain are resolved by reading the Location header of google.com/goto?url=<token> (~90ms each, ~11.5% of citations). The original token is kept in goto_url as provenance; failures stay unresolved with unresolved_citations intact. Verified 93/93 by EnterRank + 6/6 by our probe. Set false to disable.
retryDeferredPollbooleanNoWhen true, re-fetches the SERP up to retryDeferredMaxFetches times when a deferred AI Overview shell is detected, keeping the richest response. Off by default: the folsrch recovery path resolves 90%+ of deferred AIOs, and the poll recovered 0/120 in the stress test while costing ~10s + extra proxy requests per shell query. Enable only if folsrch regresses.
retryThinOverviewbooleanNoWhen true, an AI Overview that came back partly rendered (ends in a dangling heading, or has under 600 characters of answer text) gets one fresh SERP fetch; the richer answer is kept, never a poorer one. Requires retryDeferredAIO and retryDeferredMaxFetches > 1. Costs one extra proxy request on affected rows only. Set false to ship thin answers as served.
retryPartialResultsbooleanNoGoogle intermittently serves a reduced page with other modules (People Also Ask, knowledge graph, top stories) but NO organic results. When true (default), the actor re-fetches to recover organics. Queries that stay organic-empty are marked status=Partial and NOT charged. Re-fetches are included in the price.
captureFlaggedFolsrchbooleanNoWhen true, and a query ends with truncation_detected true (AI Overview words missing: cut at an inline entity link, on an unclosed bracket, a trailing comma or a joining word), the answer's source HTML — the raw folsrch fragment when resolved_by is folsrch, else the shell — is saved to the default key-value store as folsrch-evidence-<query>-<ts>.html and search_metadata.folsrch_evidence points at the key. Diagnostic for studying exact cut points; best-effort, never fails a row. Adds one KV value per truncated row. Default false.
retryAiModeForClassicbooleanNoWhen true, an AI Mode serve triggers one re-fetch hoping for a classic AI Overview. Default FALSE after measurement (EnterRank, 2026-09-07, 101/101 answers across 4 runs): on a commercial query mix the re-fetch recovered ZERO classic serves — Google routes commercial queries to AI Mode today, so the re-fetch is a doubled SERP fetch with no recovery. Kept behind the input because routing moved once (2026-09-02: 2/2 re-fetches served classic) and can move back. When false (default), an AI Mode answer is not re-fetched: it is dropped (no ai_overview) when excludeAiMode is on (default), or shipped as-is (Success, ai_mode_detected: true, warning set, charged) when excludeAiMode is false.
retryPartialMaxFetchesintegerNoUpper bound on total fetches per query when organic results are missing (retryPartialResults=true). 1 = no re-fetch, 2 = one re-fetch, 3 = two re-fetches. Range 1-3.
retryDeferredMaxFetchesintegerNoUpper bound on total fetches per query when a deferred AI Overview shell is detected. 1 = single fetch (same as retryDeferredAIO=false). Higher = better recovery odds, more proxy usage on affected queries. Range 1-5.

Details

From the project README

@subimpact/data-mcp

Public-data tools for AI agents, in one MCP server. Point it at your own Apify account and your model can search Google (organic results, People Also Ask, knowledge graph and full AI Overviews), run Google AI Mode queries, watch news mentions across Southeast Asian publishers, collect Google Maps places, Google Jobs, Trends, website contacts, page-to-markdown, Ads Transparency data, YouTube, TikTok, Eventbrite, ATS career pages, Substack, Bluesky, Lazada products, JSON-LD entity graphs, SEO audits and Pinterest — all as JSON instead of browser tabs. Every tool wraps one actor from the subimpact Apify Store: the server starts the actor with your APIFY_TOKEN, waits for it, and returns the dataset items. Nothing is scraped locally and no credentials of ours are involved.

Install

You need an Apify API token: console.apify.com → Settings → Integrations. Runs are billed to that Apify account at each actor's Store price (pay per event).

Claude Code
claude mcp add subimpact-data -e APIFY_TOKEN=... -- npx -y @subimpact/data-mcp
Claude Desktop

Add this to claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):

{
  "mcpServers": {
    "subimpact-data": {
      "command": "npx",
      "args": ["-y", "@subimpact/data-mcp"],
      "env": {
        "APIFY_TOKEN": "apify_api_your_token"
      }
    }
  }
}
Cursor

Add the same block to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "subimpact-data": {
      "command": "npx",
      "args": ["-y", "@subimpact/data-mcp"],
      "env": {
        "APIFY_TOKEN": "apify_api_your_token"
      }
    }
  }
}

Want a smaller tool list? Add "--tools", "google_search,news_mentions" to args, or set SUBIMPACT_TOOLS=google_search,news_mentions in env. get_run_results is always available.

Tools

ToolWhat it doesPrice
google_searchGoogle search as JSON: full AI Overview answers (lists, citations, sources) plus organic results, People Also Ask, knowledge graph, top stories and local results in one…Google SERP: $0.003
google_ai_modeReal Google AI Mode answers (udm=50 tab) rendered in Android Chrome, for any country and language: full answer, structured blocks, resolved source URLs and per-paragraph…AI Mode search completed: $0.003 + platform usage
news_mentionsSearch a curated index of publisher news feeds by keyword and get clean article rows: title, snippet, publisher URL, source, region, topic, language and publish time.…Article: $0.001 + platform usage
google_maps_placesExtract Google Maps places: title, address, coords, phone, website, rating, reviews count, opening hours, popular times, images, price level, menu, place ID. Search by…Place scraped: $0.001; Review scraped: $0.0005; Actor start: $0.00005 + platform usage
google_jobsScrape Google Jobs listings by query and country: title, company, location, source (LinkedIn, Indeed...), posted date, salary, job type, description and apply links. No…Job: $0.001 + platform usage
website_contactsExtract emails, phone numbers and social profile links (Facebook, Instagram, LinkedIn, X, TikTok, YouTube, WhatsApp, Telegram) from any list of websites. Plain HTTP, no…Page scanned: $0.0008 + platform usage
google_trendsScrape Google Trends interest-over-time, related queries/topics, and per-region interest for keywords. No API key, no browser, no captcha. Up to 5 keywords compared per…Keyword trends bundle: $0.0025 + platform usage
web_page_markdownWeb search and fetch tool for AI agents and RAG pipelines. Queries Google Search, scrapes the top N pages over raw HTTP, and returns clean Markdown. $0.001 per page plus…Page extracted: $0.001 + platform usage
google_ads_transparencyScrape Google Ads Transparency Center: find advertisers by name or ID and export their ads with format, first and last shown dates, preview and ad links, filtered by…Ad: $0.0008; Advertiser: $0.0005 + platform usage
youtubeFast YouTube scraper with no browser and no API key: keyword search with filters, channel videos and Shorts, channel About data, playlists, video details (exact likes,…Result: $0.001 + platform usage
tiktok_hashtagHigh-speed TikTok hashtag scraper. Extract videos, views, likes, comments, shares, audio details, and creator profiles by hashtag at an ultra-competitive price.Video: $0.001
eventbrite_eventsScrape Eventbrite events with venue + organizer data by default. $0.002/event, usage paid by buyer. Search by city/query/category, URL mode, organizer mode, dryRun.Event: $0.002 + platform usage
company_career_jobsGet live job postings straight from company career pages — Greenhouse, Lever, Ashby, Workday, SmartRecruiters — normalized into one schema, with new-job monitoring for…Job scraped: $0.001; Company monitored: $0.02 + platform usage
substackSubstack Intel API — Posts, Archives & Publication StatsRun started: $0.00005; Post or publication row: $0.001 + platform usage
blueskyScrape Bluesky posts, profiles, threads, and follower graphs by keyword, hashtag, or handle. No login required. Fast AT Protocol API, JSON/CSV export, pay only per…Post scraped: $0.001; Profile scraped: $0.002 + platform usage
lazada_productsScrape Lazada search results and category pages across 6 SEA markets (MY/SG/TH/ID/PH/VN) with a real browser session via Apify residential proxy. Monitor price drops,…Product scraped: $0.00099; Product checked: $0.003; Alert created: $0.01 + platform usage
jsonld_entitiesExtract deeply nested JSON-LD, validate against Schema.org (979 types, 1,633 properties), and resolve disconnected blocks into one unified knowledge graph with typed…Actor start: $0.00005; Page processed: $0.0015 + platform usage
seo_page_auditPort of the SEO Minion extension as an API: full on-page audits per URL (meta tags, headings, images, links, structured data, hreflang) plus Google SERP snippet previews…page audit: $0.001; SERP preview: $0.001 + platform usage
pinterestScrape Pinterest pins from keyword search, boards and profiles. Full-res originals, video variants, board/pinner metadata, repin counts. Pure HTTP - no browser, no…Pin scraped: $0.00199; Media downloaded: $0.005 + platform usage

Every tool also accepts two optional control parameters:

  • _maxItems (integer, default 50, max 1000) — how many dataset items come back to the model. It truncates the response only; the actor still collects (and charges for) what its input asks for.
  • _maxChargeUsd (number, default 0.5) — per-run spending cap in USD, sent to Apify as the run option maxTotalChargeUsd. The run stops when it reaches the cap, so an accidental large batch cannot cost more than this.

The extra get_run_results tool (runId, _maxItems, offset) fetches the status and items of a run that was still running when its tool call returned. Long jobs return a runId instead of blocking forever; call it later to collect the results.

Cost control

Every call is a real Apify run on your account, priced per event by the actor (for example google_search at $0.003 per SERP, news_mentions at $0.001 per article). There is no subscription and this server never charges you: Apify bills your account directly.

  • Start with the default _maxChargeUsd of $0.50; it is passed to Apify and enforced by the platform.
  • Use _maxItems to keep model context (and token spend on the model side) small.
  • Narrow the actor input instead of raising the cap when you need fewer, more targeted results.
  • Each response includes itemCount (total items in the dataset) and returned (items sent to the model), so you can see when a result was truncated.

A single tool call waits up to SUBIMPACT_TIMEOUT_SECS (default 240 seconds). If the run is still going, you get its runId and can collect the results with get_run_results.

Configuration

VariableRequiredDescription
APIFY_TOKENyes (for calls)Your Apify API token. tools/list works without it so directories can introspect the server.
SUBIMPACT_TOOLSnoComma-separated subset of tool names to expose, e.g. google_search,news_mentions.
SUBIMPACT_TIMEOUT_SECSnoPer-call wait budget in seconds (default 240).
SUBIMPACT_API_BASEnoOverride the Apify API base URL (default https://api.apify.com/v2); meant for testing against a mock.

CLI flags: --tools a,b,c, --help, --version.

What it is not

  • Not a local scraper. It does not fetch pages or parse HTML itself; it runs Apify actors, which do the scraping on Apify's infrastructure.
  • Not a credential holder of ours. The only token it uses is the APIFY_TOKEN you set. The server ships with no secrets and calls no private backend.
  • Not free. Every tool call is an Apify run billed to your Apify account at the actor's Store price. The _maxChargeUsd cap limits a single run, not your monthly Apify spend.
  • Not an official Apify product, and not affiliated with Google, TikTok, Meta, Lazada or the other platforms whose public data the actors read.
  • Not a guarantee of data. Public sites change; review each actor's Store page for current coverage, pricing and limitations.

Development

npm install
npm run build       # tsc + copy src/tools.json into dist/
npm test            # offline tests: mocked fetch + a stdio round trip
npm run typecheck
npm run gen:readme  # regenerate the tool table above from src/tools.json
node dist/index.js  # run the stdio server

src/tools.json is a verbatim snapshot of public Apify Store actor metadata: tool names, descriptions, pay-per-event pricing and input schemas. The MCP tool definitions, descriptions and this README's tool table are generated from it.

License

MIT © 2026 subimpact network

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.