Skip to main content
Glama
subimpact

subimpact-data-mcp

Official

@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.

Related MCP server: honestkit-mcp

Tools

Tool

What it does

Price

google_search

Google 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_mode

Real 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_mentions

Search 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_places

Extract 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_jobs

Scrape 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_contacts

Extract 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_trends

Scrape 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_markdown

Web 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_transparency

Scrape 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

youtube

Fast 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_hashtag

High-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_events

Scrape 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_jobs

Get 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

substack

Substack Intel API — Posts, Archives & Publication Stats

Run started: $0.00005; Post or publication row: $0.001 + platform usage

bluesky

Scrape 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_products

Scrape 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_entities

Extract 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_audit

Port 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

pinterest

Scrape 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

Variable

Required

Description

APIFY_TOKEN

yes (for calls)

Your Apify API token. tools/list works without it so directories can introspect the server.

SUBIMPACT_TOOLS

no

Comma-separated subset of tool names to expose, e.g. google_search,news_mentions.

SUBIMPACT_TIMEOUT_SECS

no

Per-call wait budget in seconds (default 240).

SUBIMPACT_API_BASE

no

Override 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

Available Tools

20 tools
blueskyA

Bluesky Scraper API — Posts, Profiles, Threads & Followers

Scrape 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 result.

Pricing (pay per event, billed to your Apify account): Post scraped: $0.001; Profile scraped: $0.002; platform usage billed to your account.

Runs on Apify as subimpact/bluesky-scraper-api.

NameRequiredDescriptionDefault
modeYesWhat to scrape: search (posts by keyword/hashtag), author_feed (recent posts by a handle), thread (full thread with nested replies), profile (profile metadata), followers (follower graph), follows (following list).search
sortNoSort order for search mode: 'latest' (chronological) or 'top' (highest engagement).latest
queryNoKeyword, hashtag, or query string (e.g. 'artificial intelligence', '#bluesky', 'startup'). Required in 'search' mode.artificial intelligence
handleNoBluesky handle (e.g. 'bsky.app', 'jay.bsky.team') or DID ('did:plc:...'). Required in author_feed, profile, followers, follows modes.
postUriNoFull AT-URI ('at://did:plc:.../app.bsky.feed.post/...') or web URL ('https://bsky.app/profile/.../post/...'). Required in 'thread' mode.
maxItemsNoMaximum number of posts or profiles to scrape. Pay-per-event charges only for items successfully extracted.
_maxItemsNoHow 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.
_maxChargeUsdNoPer-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.
includeRepliesNoWhen in 'thread' mode, whether to recursively traverse and extract nested reply posts.
proxyConfigurationNoSelect Apify Proxy (RESIDENTIAL recommended for high-volume author feeds or searches to avoid rate limits).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses 'No login required', that it runs on Apify as subimpact/bluesky-scraper-api, and an explicit pay-per-event cost model ($0.001/post, $0.002/profile plus platform usage). What's missing is behavior on failure/rate limits (only hinted at in the proxyConfiguration schema field) and what the response looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the capability statement, then a compact pricing/mode block. The pricing lines earn their place because cost is behaviorally important, though the 'Posts, Profiles, Threads & Followers' heading slightly duplicates the body sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema and no annotations, the description covers cost, auth, and platform but never says what a scraped item contains (post text, engagement counts, author fields, etc.) or how results are paginated. An agent can invoke it, but cannot predict the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's only added semantic value is tying per-item pricing to what gets scraped, which helps an agent reason about maxItems, but it adds nothing about the mode/handle/postUri relationships beyond what the schema already spells out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource statement: 'Scrape Bluesky posts, profiles, threads, and follower graphs by keyword, hashtag, or handle.' The mode enum and description map cleanly onto those resources, so an agent knows exactly what the tool retrieves and for which platform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use/when-not guidance relative to the sibling tools (google_search, youtube, tiktok_hashtag, etc.), even though those are clearly adjacent social/search scrapers. Usage context is only implied by the mode list ('search', 'author_feed', 'thread'), which lives in the schema rather than the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

company_career_jobsB

Company Career Page Monitor & ATS Jobs API

Get live job postings straight from company career pages — Greenhouse, Lever, Ashby, Workday, SmartRecruiters — normalized into one schema, with new-job monitoring for HR-tech, VCs, and AI agents.

Pricing (pay per event, billed to your Apify account): Job scraped: $0.001; Company monitored: $0.02; platform usage billed to your account.

Runs on Apify as subimpact/ats-jobs-api.

NameRequiredDescriptionDefault
_maxItemsNoHow 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.
companiesYesCareers page or ATS board URLs to scrape, e.g. https://boards.greenhouse.io/anthropic, https://jobs.ashbyhq.com/OpenAI, https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite, https://recruiting.ultipro.com/{tenant}/JobBoard/{boardId}, https://{company}.jobs.personio.de
onlyNewJobsNoOutput only jobs not seen in previous runs (state persists across runs). Ideal for scheduled runs with a webhook to Slack/CRM.
maxTotalJobsNoGlobal cap on jobs delivered across ALL companies in one run. Defaults to 200 to prevent bill shock — raise it once you know what you need, or set 0 for no limit. Monitoring state is tracked for every scraped job regardless of this cap.
_maxChargeUsdNoPer-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.
includeDetailsNoFetch each job's detail page for richer fields (Workday: location, employment type, description). Adds one request per job.
stateStoreNameNoNamed key-value store used to remember previously seen jobs.ats-jobs-state
maxJobsPerCompanyNoCap the number of jobs collected per company. 0 = no limit.
includeDescriptionNoFetch full description text/HTML for each job. Slower and uses more requests, especially on Workday and Ashby.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the pay-per-event pricing model, Apify billing, and that it runs as an Apify Actor, but it does not describe auth requirements, rate limits, persistence of monitoring state across runs, or other operational constraints beyond cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is reasonably short and front-loads the core capability before pricing and platform provenance. Some marketing language such as 'for HR-tech, VCs, and AI agents' is not essential, but the overall structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter tool with no output schema, the description explains the source coverage and cost model but does not describe what the returned dataset looks like beyond saying it is normalized. It is adequate for invocation but leaves return-shape expectations partly inferred.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all nine parameters thoroughly. The description adds no parameter-specific meaning beyond repeating that monitoring exists and that results are normalized; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: get live job postings from company career pages/ATS boards, normalized into one schema. It names supported platforms and mentions monitoring, so the core purpose is clear. It does not explicitly distinguish itself from sibling tools like google_jobs or google_maps_places.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for company career page monitoring and notes it is for HR-tech, VCs, and AI agents, but it does not explicitly say when to choose this over google_jobs or other job-related siblings. The monitoring angle is present, but alternatives and exclusions are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventbrite_eventsA

Eventbrite Scraper

Scrape 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.

Pricing (pay per event, billed to your Apify account): Event: $0.002; platform usage billed to your account.

Runs on Apify as subimpact/eventbrite-scraper.

NameRequiredDescriptionDefault
cityNoTheir city slug or name, e.g. 'kuala-lumpur' or 'Kuala Lumpur'. Used as a single place when places is empty. Has no effect when places is set.
sortNodate = by start date (default); distance = by distance from place center (requires radius).date
priceNofree = free events only; paid = paid events only; blank or omitted for both. Empty strings from aitorsm inputs are ignored.
queryNoFree-text search term (e.g. 'tech', 'yoga'). Optional — omit for all events in the place.
dryRunNoCount only, no charge. Still bills platform usage.
placesNoONE city name (e.g. 'London') or raw place ID. v1 supports a single place. When set, radius is required (default 50 km).
radiusNoSearch radius in km. REQUIRED when places is set. Default 50, max 50.
countryNoFilters place resolution by country (e.g. 'United States'). Accepts aitorsm's lower-case slug ('malaysia', 'united-kingdom'). No-op without places.
endDateNoISO date (YYYY-MM-DD). Optional; defaults to +1 year from startDate.
keywordNoTheir keyword field. It is used as our query only when category is 'custom'; with a standard or blank category it is ignored, exactly like their actor. Has no effect when query is set.
categoryNoEventbrite category. Accepts our ID labels (e.g. '103: Music'), aitorsm's display labels (e.g. 'Music') or 'custom' (keyword search). Optional; blank is ignored. IDs verified against observed EventbriteCategory/* tags in probe fixtures (Probe-8/9/12).
_maxItemsNoHow 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.
eventUrlsNoList of Eventbrite event URLs to scrape directly. Series URLs return a parent stub (not charged).
maxEventsNoMaximum number of events to process (counts processed rows incl. duplicates). Default 1000 (above measured depth ~892 for London r50). Cap 10000.
startDateNoISO date (YYYY-MM-DD). Optional; defaults to today.
maxResultsNoTheir maxResults field. Maps to maxEvents when maxEvents is absent or still at its default of 1000. Has no effect on an explicit non-default maxEvents.
onlineOnlyNoPost-filter for online events. Mutually exclusive with places (place-scoped search returns no online events).
organizerIdNoScrape all events by this organizer (e.g. '120990958363').
_maxChargeUsdNoPer-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.
includeDetailsNoFetch full event details (venue address, organizer, description, status). Default true.
enrichOrganizersNoTheir organizer-enrichment switch. false means no extra organizer calls. Our actor already includes organizer name/url/website/facebook/twitter from event details; true does not add their quality signals or extra social links.
enrichDestinationNoAdd ticket price range, sales status/window, saved flags, public collections and image renditions per event (one extra lightweight API call per event). On by default.
maxTotalChargeUsdNoBill-shock guard: stop charging once total charges reach this amount. Default 20.01 (just above 10,000 events at $0.002 — avoids the floating-point knife edge where a full-size run stops one batch early).

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the most consequential trait for a paid scraper: pay-per-event pricing ($0.002/event), that platform usage is billed separately to the buyer's Apify account, and that the tool runs as an Apify actor. It omits auth/token prerequisites, failure behavior on bad place IDs, and runtime characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the mode list, then pricing, then execution context — a sensible ordering. It loses a point for restating the $0.002/event cost twice in adjacent sentences, which is redundant rather than harmful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter tool with no annotations and no output schema, the description covers what the tool does, the main usage modes, and the cost model, and it hints at return content ('venue + organizer data by default'). What it lacks is any statement about the response shape or that results are truncated by _maxItems; given the exhaustive schema, this gap is modest rather than crippling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds a mode taxonomy (location search vs URL mode vs organizer mode vs dryRun) that groups the 23 flat parameters into mutually exclusive operating shapes — a distinction not obvious from the schema alone. Individual parameter semantics are left entirely to the thorough schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Scrape Eventbrite events') and enumerates the operating modes (city/query/category search, URL mode, organizer mode, dryRun), which lets an agent tell it apart from the sibling scrapers (tiktok_hashtag, lazada_products, pinterest). It never names a sibling alternative explicitly, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mode list ('Search by city/query/category, URL mode, organizer mode, dryRun') implicitly tells the agent which parameter family to reach for based on intent. It stops short of stating when not to use it or where the modes conflict (e.g. onlineOnly vs places, places requires radius), leaving that to the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_run_resultsA

Fetch the status and dataset items of an Actor run started by one of the data tools, for example a run that was still running when its tool call returned.

Returns the run status, the total dataset item count and the items themselves (offset by offset, capped by _maxItems). Running runs are long-polled for up to 60 seconds; if still running, call again with the same runId.

Apify run results are billed to your Apify account like any other run.

NameRequiredDescriptionDefault
runIdYesThe Apify run ID returned by a data tool call.
offsetNoNumber of dataset items to skip (default 0).
_maxItemsNoHow many dataset items to return (1-1000, default 50).
_maxChargeUsdNoPresent for interface uniformity with the data tools (default 0.5). Retrieving results does not start a new run, so this has no effect on cost.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description steps up well: it discloses the 60-second long-poll window, the retry loop, the dataset item cap, and the billing implication ('billed to your Apify account like any other run'). It never addresses failure modes for an invalid or expired runId, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight paragraphs, front-loaded with the primary purpose, followed by return shape and the retry/billing caveats. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description carries the burden and does describe the return (status, total item count, items). Only the error/invalid-run path is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in structured data. The description adds only marginal semantics by referencing the offset and _maxItems cap; it does not explain runId format or behavior beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) plus the exact resource (status and dataset items of an Actor run) and ties it to runs started by the data tools, which cleanly separates it from the sibling tools that initiate runs. An agent knows immediately this is the follow-up retrieval call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the triggering scenario explicitly ('for example a run that was still running when its tool call returned') and the retry protocol ('if still running, call again with the same runId'). It does not name a when-not-to-use condition, but the context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_ai_modeA

Google AI Mode Scraper

Real 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 citations. From $0.0018 per answer ($0.003 on Free/Starter). Uncited answers are flagged; failed and empty queries are free.

Pricing (pay per event, billed to your Apify account): AI Mode search completed: $0.003; platform usage billed to your account.

Runs on Apify as subimpact/google-ai-mode-scraper.

NameRequiredDescriptionDefault
glNoTwo-letter country code for the market whose AI Mode answers you want, e.g. ae (UAE), my (Malaysia), sg (Singapore), id (Indonesia), au (Australia), us. Works on both backends.us
hlNoLanguage code for Google's interface and answer, e.g. en, ar, ms, id, zh-CN. Write your queries in the same language. In markets where English is not the main search language (e.g. id, th) use the local language: English queries there often get generic/US answers.en
udm50No[legacy http backend only] Appends udm=50. NOTE: the forced shell currently returns no answer browserlessly (Google requires a real browser for the folwr stream) — defaults OFF.
backendNoandroid (default) = real AI Mode tab (udm=50) rendered in Android Chrome: full answer, structured blocks, resolved source URLs. http = legacy browserless SERP fetch (only returns AI answers Google embeds in the classic results page; uses gl/hl/location/udm50/retry options below).android
queriesYesQueries to get Google AI Mode answers for. Each query is run on the real AI Mode tab (udm=50) in a real Android Chrome browser.
locationNoGoogle canonical location name, e.g. 'Dubai,Dubai,United Arab Emirates' or 'Kuala Lumpur,Federal Territory of Kuala Lumpur,Malaysia'. Leave empty to use the main city of the chosen country (Dubai, Kuala Lumpur, Singapore, Jakarta, Sydney, ...). Type none to send no location.
_maxItemsNoHow 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.
skipCacheNoBy default, a question that was answered for the same country, language and location in the last hour may be served from our cache (marked cached: true, with cached_at). Turn this on to always fetch a fresh answer from Google, for example when tracking how answers change. Fresh answers take longer under heavy load.
concurrencyNoParallel queries (1-30). On the android backend this is capped automatically to the size of the browser pool.
_maxChargeUsdNoPer-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.
retryDeferredNo[legacy http backend only] When the answer is deferred, re-fetch through the folsrch async endpoint. ON by default (recovery rate ~90%).
captureRawHtmlNo[legacy http backend only] Save raw SERP HTML to the key-value store for every query (for corpus/debugging). Adds storage cost.
retryDeferredMaxFetchesNo[legacy http backend only] Upper bound on recovery fetches per query (1-5).

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose useful traits: pay-per-event pricing, billing to the Apify account, free failed and empty queries, uncited answers flagged, and real Android Chrome rendering. It does not cover authentication requirements or broader rate-limit behavior outside the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with what the tool returns and is mostly efficient. However, pricing is repeated twice ('From $0.0018 per answer...' and 'AI Mode search completed: $0.003'), and the 'Runs on Apify as...' line adds little for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 13 parameters, no annotations, and no output schema, the description covers the output shape (answer, structured blocks, citations), billing model, and key behavioral caveats like uncited flagging. It lacks explicit use-case routing versus siblings and auth details, but the rich schema compensates for most parameter gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 13 parameters are already documented in the schema, including caching, concurrency caps, and spending limits. The description adds only high-level pricing context and no parameter-specific meaning beyond what the schema provides; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and output: real Google AI Mode answers from the udm=50 tab, including full answer, structured blocks, resolved source URLs, and per-paragraph citations. It clearly distinguishes itself from a generic search result, though it does not explicitly name or differentiate from sibling google_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'for any country and language' and the emphasis on AI Mode-specific answers, but there is no explicit when-to-use guidance versus google_search or other siblings, nor any stated exclusions. The agent must infer that this is for AI Mode answers specifically.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_jobsA

Google Jobs Scraper (Cheap, No Browser)

Scrape Google Jobs listings by query and country: title, company, location, source (LinkedIn, Indeed...), posted date, salary, job type, description and apply links. No browser. $1.00 per 1,000 jobs plus Google SERP proxy usage.

Pricing (pay per event, billed to your Apify account): Job: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/google-jobs-scraper.

NameRequiredDescriptionDefault
queriesNoOne or more Google Jobs searches, e.g. `software engineer jobs kuala lumpur` or `barista jobs singapore`. Each query returns Google's first Jobs page (about 10 listings). Add more queries to cover more jobs. Maximum 100 queries per run.
locationNoFree text appended to every query, e.g. `Kuala Lumpur` or `remote`. Leave empty to search the query exactly as written. The country code still controls the Google country setting.
maxItemsNoGlobal cost ceiling: the run stops after this many job rows, across all queries. At $0.001 per job, 100 rows cost $0.10 plus proxy usage. The default single query returns about 10 jobs, so a default run costs about $0.01 plus proxy usage. Hard cap 1,000.
_maxItemsNoHow 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.
concurrencyNoHow many queries are fetched in parallel. Higher is faster but uses more proxy sessions at once. Default 5.
countryCodeNoTwo-letter country code used for the Google country setting. Examples: us, my, sg, gb, au, ca, in. `uk` is accepted and mapped to gb.us
languageCodeNoGoogle interface language. Use a two-letter code like en, ms, de, or a regional code like en-MY.en
_maxChargeUsdNoPer-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.
maxJobsPerQueryNoGoogle shows about 10 jobs per search and has no working page 2 (verified October 2026). To collect more, add more specific queries (role + city, or different locations).

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and usefully discloses that the tool runs without a browser, runs on Apify, bills per job and for proxy usage, and lists the fields returned. It does not cover authentication details, rate limits, or reliability characteristics, but the cost and execution model disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is generally front-loaded and appropriately sized, starting with the purpose and output fields. The pricing is stated twice in slightly different forms, which is redundant, but the overall structure remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description appropriately lists the fields returned, and it also explains the no-browser execution and billing model. Given the fully documented input schema, the main remaining gap is the absence of guidance on alternatives or operational constraints like rate limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already provides detailed parameter semantics. The description only implies query and country inputs and adds no parameter-level meaning beyond what the schema documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: scrape Google Jobs listings by query and country, and it lists the returned fields. It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools such as company_career_jobs or google_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but gives no explicit guidance on when to use it instead of alternatives like company_career_jobs or google_search. Usage is only implied by the purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

google_maps_placesA

Google Maps Scraper

Extract Google Maps places: title, address, coords, phone, website, rating, reviews count, opening hours, popular times, images, price level, menu, place ID. Search by keyword + location or place IDs. Plain-HTTP internal API, no browser, fast and cheap. $1.00 per 1,000 places.

Pricing (pay per event, billed to your Apify account): Place scraped: $0.001; Review scraped: $0.0005; Actor start: $0.00005; platform usage billed to your account.

Runs on Apify as subimpact/google-maps-scraper-plainhttp.

NameRequiredDescriptionDefault
latNoOptional. Center latitude of the search viewport. Leave empty (with longitude) to let Google resolve the location from each search string.
lngNoOptional. Center longitude of the search viewport. Only used together with latitude; empty = resolve from the search string.
zoomNoMap zoom for the search viewport. Higher = smaller area, fewer but denser results.
languageNoResults language.en
placeIdsNoDirect place detail scrape by ChIJ place ID.
_maxItemsNoHow 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.
startUrlsNoDirect place detail scrape by maps.google.com place URL.
maxReviewsNoNumber of reviews to extract per place. 0 = none. Each review = review-scraped charge.
_maxChargeUsdNoPer-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.
proxyConfigurationNoOptional. Residential proxies recommended for large runs from datacenter IPs.
searchStringsArrayNoWhat to search on Google Maps. Each term = one search. A term can be a business name plus its full address (compass-style exact lookup) - Google resolves the location from the string, no coordinates needed.
scrapePlaceDetailPageNoOpen each place's detail payload (phone, hours, popular times, images, price). Off = search-level records only.
maxCrawledPlacesPerSearchNoMax places per search term (compass semantics). Each search string can return up to this many places; a run with N terms returns up to N x this. Detail records are charged per place.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the whole burden and does substantial work: it discloses the plain-HTTP/no-browser approach, per-event pricing ($0.001/place, $0.0005/review), the spending-cap mechanism, and that _maxItems truncates only the response, not collection or charges. It omits auth requirements, expected run duration, and failure/rate-limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the extraction capability and fields, followed by pricing and hosting details. The pricing paragraph is somewhat verbose and partly duplicates schema-level cost notes, but every block is separated and scannable; nothing is buried mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, no-output-schema tool the description compensates well by enumerating returned fields and disclosing cost behavior. Remaining gaps are the response shape (dataset item structure), run latency, and how the three input modes (search strings, placeIds, startUrls) relate when combined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the description adds value by tying cost semantics to parameters ('$1.00 per 1,000 places', per-review charges), which clarifies the financial impact of maxReviews and maxCrawledPlacesPerSearch beyond their schema text. It does not explain the interaction between lat/lng and searchStringsArray, which the schema does cover.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (extract Google Maps places) and enumerates the returned fields (title, address, phone, rating, hours, place ID, etc.). It also distinguishes the two input modes: keyword+location search versus direct place-ID lookup, so an agent can tell it apart from sibling tools like google_search or website_contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage via 'Search by keyword + location or place IDs' and the schema notes hint at exact-lookup vs discovery, but it never explicitly says when to prefer this over siblings such as google_search, nor when not to use it. Guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

jsonld_entitiesA

JSON-LD Entity Graph Resolver — Schema.org to Knowledge Graph

Extract deeply nested JSON-LD, validate against Schema.org (979 types, 1,633 properties), and resolve disconnected blocks into one unified knowledge graph with typed edges. No browser, no API keys, no LLM. First 3 pages free.

Pricing (pay per event, billed to your Apify account): Actor start: $0.00005; Page processed: $0.0015; platform usage billed to your account.

Runs on Apify as subimpact/jsonld-entity-graph-resolver.

NameRequiredDescriptionDefault
maxPagesNoHard limit on how many URLs this run may request. Leave empty for no limit.
_maxItemsNoHow 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.
startUrlsYesList of pages to extract JSON-LD from. Each entry: {"url": "https://..."}
estimateOnlyNoRun the full extraction and report what it would cost, without charging anything.
maxChargeUsdNoHard ceiling on what this run may charge. Once reached, no further events are billed.
resolveGraphNoResolve @id references across all blocks on the page and emit a unified graph: nodes (id, types, properties) + edges (subject, predicate, object). Disconnected schemas become one graph.
_maxChargeUsdNoPer-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.
validateSchemaNoCheck every @type and property against the bundled Schema.org ontology (979 types, 1,633 properties). Reports unknown types and invalid properties per page.
includeRawBlocksNoAlso store the parsed JSON-LD blocks verbatim in each row (useful for debugging or downstream processing).
proxyConfigurationNoApify proxy for IP rotation. Leave default for automatic proxy.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose useful traits: no browser/API keys/LLM, Apify execution, free first pages, and per-event pricing. It still omits return shape, rate/error behavior, and account/auth prerequisites beyond the implication that billing is tied to an Apify account.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core capability, followed by differentiators, pricing, and Actor identity. It is fairly tight for a complex tool, though the pricing and platform lines add some length that is only marginally useful to selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It conveys the main function, validation scope, graph-resolution behavior, and cost model. But for a ten-parameter tool with no output schema and no annotations, it should explain the dataset-item/result structure and validation-report shape more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all ten parameters in detail. The main description does not map or add syntax for parameters like resolveGraph, validateSchema, estimateOnly, or maxChargeUsd, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It uses specific verbs and resources: extract JSON-LD, validate against Schema.org, and resolve blocks into a unified knowledge graph. The JSON-LD entity-graph focus distinguishes it from generic page scrapers and SEO audit siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the extraction/validation/graph-resolution purpose and the note that no browser, API keys, or LLM are needed. However, there is no explicit when-to-use, when-not-to-use, or comparison to alternatives such as web_page_markdown or seo_page_audit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lazada_productsA

Lazada Scraper + Price Monitor — SEA Search & Price Alerts

Scrape 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, stock flips and sold counts with scheduled runs and webhook alerts. $0.005 start + $0.00099/product + $0.003/check + $0.01/alert.

Pricing (pay per event, billed to your Apify account): Product scraped: $0.00099; Product checked: $0.003; Alert created: $0.01; platform usage billed to your account.

Runs on Apify as subimpact/lazada-scraper.

NameRequiredDescriptionDefault
modeNosearch = keyword search (use queries). category = browse a category page (use categoryUrls).search
sortNoResult sort order. Popularity = Lazada's default ranking.popularity
countryNoLazada market to scrape. Each country uses its own domain (my → lazada.com.my, sg → lazada.sg, etc.).my
monitorNoCompare current prices/stock with the previous run's snapshot. Generates alerts for price changes, stock flips and sold-count deltas. Schedule this Actor to run regularly to get ongoing alerts.
queriesNoKeywords to search for. One keyword per line. Example: ["iphone 15", "samsung galaxy"]. Required when mode=search. Max 20 entries (extra entries are dropped).
maxPriceNoOptional. Keep only products with price ≤ this value (in local currency units).
minPriceNoOptional. Keep only products with price ≥ this value (in local currency units).
_maxItemsNoHow 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.
webhookUrlNoOptional. When price/stock alerts fire, POST the alert payload (JSON) to this URL.
categoryUrlsNoLazada category browse URLs. Example: https://www.lazada.com.my/shop-mobiles/ Required when mode=category. Max 20 entries (extra entries are dropped).
_maxChargeUsdNoPer-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.
monitorWatchListNoSpecific products to monitor. Each entry: { "itemId": "123", "targetPrice": 99 } or { "itemUrl": "//www.lazada.com.my/products/pdp-i123.html" }. Leave empty to monitor all products from your queries.
maxResultsPerQueryNoMaximum products to collect per keyword or category URL. This is your cost ceiling: products scraped × $0.00099. Hard cap: 5000.
proxyConfigurationNoApify Proxy settings. A residential proxy is required: Lazada blocks datacenter IPs, so the Actor fetches through a real browser session on a residential IP. The proxy country is matched to the selected Lazada market automatically unless you set apifyProxyCountry yourself.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and does meaningful work: it requires a residential proxy because Lazada blocks datacenter IPs, states billing is a pay-per-event model charged to the Apify account, and names concrete event prices. It stops short of describing failure modes, anti-bot blocking behavior, or what a run returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead sentence is well front-loaded, but pricing is stated twice — once in the summary line and again as a standalone 'Pricing (pay per event...)' paragraph that largely repeats the same figures. That redundancy and the marketing tagline consume space without adding information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should say something about what a run yields (product fields, alert payload shape), but it only says alerts POST 'JSON' to a webhook. Cost, proxy, and market coverage are covered adequately, leaving the return-value gap as the notable hole for a 14-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 14 parameters are already documented with defaults, enums, and constraints in the schema. The description adds no parameter-level guidance beyond restating the pricing that maps to maxResultsPerQuery. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource: scrape Lazada search results and category pages across six SEA markets, plus price/stock monitoring. It is unambiguous what the tool does, though the sibling list contains no other Lazada tool, so no explicit differentiation is needed or provided.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description frames the tool as scraping plus monitoring but never says when to enable `monitor` versus a one-off scrape, nor when to prefer scheduled runs over a single call. Usage conditions are only implied through the schema's per-parameter descriptions, not the tool description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

news_mentionsA

News Mentions API: Brand & Keyword Monitoring

Search 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. Built for brand/PR monitoring, competitor tracking and market news in Malaysia, Southeast Asia and worldwide. Pay only per article.

Pricing (pay per event, billed to your Apify account): Article: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/news-mentions-api.

NameRequiredDescriptionDefault
dateToNoOnly articles published on/before this date (inclusive; a bare date covers the whole day). ISO format: 2026-10-24 or 2026-10-24T18:00:00Z.
topicsNoPublisher sections to search. Leave empty for all topics.
domainsNoRestrict results to these publisher domains (subdomains included): thestar.com.my also matches biz.thestar.com.my. Leave empty for any publisher.
onlyNewNoFor scheduled monitoring: remembers how far the index it has been read (in the named key-value store news-mentions-state) and returns only articles added since. The first run returns the lookback window. Do not mix delta and full runs in the same task.
regionsNoPublisher regions to search. Leave empty for all regions. MY = Malaysia, SG = Singapore, ID = Indonesia, PH = Philippines, TH = Thailand, VN = Vietnam, GLOBAL = international outlets.
dateFromNoOnly articles published on/after this date. ISO format: 2026-10-01 or 2026-10-01T09:00:00Z.
keywordsYes1–100 search queries. Defaults to a demo query when omitted. Query syntax: words are ANDed by default (petronas profit = both words); "exact phrase" in double quotes; OR between terms (uppercase); -term or -"phrase" excludes. Example: Petronas OR "Petronas Dagangan" -sponsored.
stateKeyNoOnly for onlyNew. Name of the stored cursor. Leave empty to derive it from the query (keywords + filters), so different searches keep separate cursors in the same task.
_maxItemsNoHow 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.
languagesNoISO language codes of the publisher feed, e.g. en, ms, id, th, vi. Leave empty for all languages.
lookbackDaysNoHow many days back to search, counted from now (1–180). The index keeps up to 180 days of history. Ignored when dateFrom is set, and on scheduled delta runs (onlyNew) after the first run.
_maxChargeUsdNoPer-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.
excludeDomainsNoDrop results from these publisher domains (subdomains included).
excludeKeywordsNoAppended to every query as -term, so you can filter noise once instead of in each keyword. Multi-word terms are quoted automatically: "press release" becomes -"press release".
maxItemsPerKeywordNoUpper limit of articles fetched for each keyword (1–5000). You are charged only for the articles actually returned.
dedupeAcrossKeywordsNoOn (default): an article matching several keywords appears once, with every matching keyword in matchedKeywords. Off: one row per keyword match, pushed as soon as it is fetched.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a decent job: it discloses the paid, per-article billing model (Article: $0.001 plus platform usage) and describes the response shape (title, snippet, publisher URL, source, region, topic, language, publish time). It does not cover authentication/setup (Apify account/token) or whether results come back synchronously versus requiring a run/poll workflow, which is a notable gap for an actor-based tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and return shape, then cost, then platform. The pricing sentence is slightly marketing-flavored but is legitimately useful cost transparency. Four short paragraphs with little waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, no-annotation, no-output-schema tool, the description covers purpose, output fields, and cost model, which is most of what an agent needs. What is missing is operational context—whether the call returns dataset rows directly or triggers an Apify run that must be retrieved via get_run_results—which matters given that sibling tool exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 16 parameters is already documented in detail (query syntax, delta mode, state keys, lookback, spending cap). The description adds only a high-level mention of keyword searching and returned fields, so per the coverage rule the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (search) and resource (a curated index of publisher news feeds), and enumerates the returned fields and target use cases (brand/PR monitoring, competitor tracking). That is far more than a restatement of the name. It stops short of explicitly distinguishing itself from general-search siblings like google_search or google_ai_mode, leaving the agent to infer that this tool is news-index-specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: 'Built for brand/PR monitoring, competitor tracking and market news in Malaysia, Southeast Asia and worldwide,' which signals when the tool is a fit. It does not name alternatives or state exclusions (e.g., when to prefer google_search over this index), so it is a solid 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pinterestA

Pinterest Scraper — Search, Boards & Profiles

Scrape Pinterest pins from keyword search, boards and profiles. Full-res originals, video variants, board/pinner metadata, repin counts. Pure HTTP - no browser, no login, no API key, no proxy.

Pricing (pay per event, billed to your Apify account): Pin scraped: $0.00199; Media downloaded: $0.005; platform usage billed to your account.

Runs on Apify as subimpact/pinterest-scraper.

NameRequiredDescriptionDefault
modeYessearch = keyword search (use queries). board = every pin on a board (use boardUrls or boardIds). profile = every pin a user has published (use usernames).search
queriesNoComma-separated search keywords, e.g. `ai wallpaper, minimal interior`. Required when mode=search — leave empty to use the default query `ai wallpaper`. NOTE: Pinterest's search payload contains images only — no title, description, board or pinner. Turn on "Enrich pin details" if you need those fields.ai wallpaper
boardIdsNoComma-separated numeric board ids, e.g. `286612032474627954`. Faster than boardUrls (skips the id-resolution request). Used when mode=board.
_maxItemsNoHow 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.
boardUrlsNoComma-separated board URLs or paths, e.g. `https://www.pinterest.com/les_bons_details/interior-design/` or `/les_bons_details/interior-design/`. The numeric board id is resolved automatically from the board page. Used when mode=board.
imageSizeNoWhich image variant to put in `imageUrl` (and to download when media download is on). `orig` is the full-resolution original.orig
usernamesNoComma-separated Pinterest usernames, e.g. `ohuhu, nasa`. A leading @ and full profile URLs are accepted. Required when mode=profile.
includeRawNoKeep the untouched Pinterest pin object in the `raw` column. Turn off for smaller datasets.
maxPinsTotalNoOptional global cap across EVERY query / board / profile in the run, on top of max pins per source. Leave empty for no global cap (unlimited). Use this to keep long multi-source runs inside the 1-hour platform timeout.
_maxChargeUsdNoPer-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.
downloadMediaNoDownload each pin's image (or MP4 for video pins) into the run's key-value store and link it from the dataset row. Billed per file downloaded. Off by default — the image URLs in the dataset are directly usable.
enrichDetailsNoFetch each pin's detail endpoint for extra fields. Costs one extra HTTP request per pin, so runs take noticeably longer. Worth it in search mode; usually redundant in board/profile mode, where pins already arrive with full metadata. Without a login, the detail endpoint returns a reduced field set (SEO title/description, creator) — not the complete pin record.
maxPinsPerSourceNoMaximum pins to collect per query / board / profile. This is your cost ceiling: pins scraped × the per-pin price. Hard cap: 5000.
proxyConfigurationNoNot required — Pinterest's resource API responds normally to datacenter IPs. Kept as an escape hatch in case an exit IP gets throttled.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses the HTTP-only/no-login/no-proxy access model, output content such as full-res images, video variants, board/pinner metadata and repin counts, and per-event pricing. It does not cover rate limiting, failure modes, or full dataset structure, but the core operational traits are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with what the tool does, then layers in key operational traits and pricing without padding. Every sentence contributes useful selection or cost information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 14-parameter scraper with no annotations and no output schema, the description supplies the essential context: access model, billing, and the kinds of data returned. Detailed parameter behavior is covered by the very rich schema, though the description stops short of fully describing the output dataset shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 14 parameters in detail. The description adds high-level context about the supported modes and billing model but does not add parameter-level meaning beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — scraping Pinterest pins — and names the three supported modes: keyword search, boards, and profiles. The Pinterest focus clearly distinguishes it from the other social/scraping siblings such as tiktok_hashtag or youtube.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for Pinterest pin scraping across search, boards, and profiles, but it does not explicitly say when to choose this over alternatives or when not to use it. Mode selection guidance lives in the schema rather than the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

seo_page_auditA

SEO Helper (on-page audit + SERP preview)

Port 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 with truncation flags. No API keys needed.

Pricing (pay per event, billed to your Apify account): page audit: $0.001; SERP preview: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/seo-helper.

NameRequiredDescriptionDefault
modeNoonpage = audit URLs; serp_preview = Google snippet preview with truncation flagsonpage
maxUrlsNoOptional cap on how many URLs are processed per run. Leave empty for no limit.
pageUrlsNoURLs to audit (onpage mode) or preview (serp_preview mode). Leave empty for a one-URL demo run.
proxyUrlNoOptional HTTP(S) proxy for page fetches
_maxItemsNoHow 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.
useLivePageNoserp_preview: pull title/description from the live page before applying overrides
includeLinksNoonpage: include the full link list + image lists in the audit record
_maxChargeUsdNoPer-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.
serpOverridesNoOptional title/description overrides per URL for serp_preview mode (used instead of the live page)
fetchTimeoutSecNoPer-page fetch timeout in seconds

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does so well on cost/behavior: per-event pricing ($0.001 for each mode), no API keys required, Apify-hosted run, platform usage billed. It stops short of describing failure modes, rate limits, or what the audit record contains, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the capability in the first paragraph before pricing and hosting details. All sentences are relevant, though the pricing/platform paragraph is slightly verbose and could be compressed. No wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no annotations and no output schema, the description covers purpose, cost, and modes but never describes the shape of the returned audit record or SERP preview result (beyond 'truncation flags'). An agent knows how to call it but not fully what to expect back, leaving a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented (mode enum, pageUrls, _maxItems vs collection distinction, _maxChargeUsd cap). The description adds little parameter-level meaning beyond the pricing context that clarifies the charge cap. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'full on-page audits per URL (meta tags, headings, images, links, structured data, hreflang) plus Google SERP snippet previews.' The two modes and concrete data captured are named explicitly, so an agent knows exactly what it produces. Siblings like web_page_markdown or jsonld_entities overlap thematically, but the description's 'audit + SERP preview' framing is distinctive enough to differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The two modes are described in the schema ('onpage = audit URLs; serp_preview = Google snippet preview'), which implies when each applies, but the description itself gives no explicit when-to-use/when-not guidance or routing to overlapping siblings (jsonld_entities for structured data, web_page_markdown for raw content). Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

substackC

Substack Intel API — Posts, Archives & Publication Stats

Pricing (pay per event, billed to your Apify account): Run started: $0.00005; Post or publication row: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/substack-intel-api.

NameRequiredDescriptionDefault
modeNoWhat to fetch: archive (recent posts list), post (full post by slug), publication (publication profile + stats).
maxItemsNoMax posts to return in archive mode (0 = uncapped, safely limited to 5000).
postSlugNoPost slug for post mode (e.g. 'investing-in-gimlet').
_maxItemsNoHow 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.
publicationYesSubstack slug (e.g. 'a16z') or custom domain (e.g. 'stratechery.com'). For custom domains, the substack slug is preferred when known.a16z
_maxChargeUsdNoPer-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.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden; it does disclose the cost model (per-run, per-row, billed to the Apify account), which is genuinely useful behavioral context that the schema only partly complements via the _maxChargeUsd cap. However, nothing is said about authentication, rate limits, failure behavior, or what a 'row' contains — significant omissions for a paid scraping actor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short and front-loaded with a label, but the majority of the body is Apify billing and hosting detail rather than functional description. Nothing is padded word-by-word, yet the allocation of space is skewed away from what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a rich 6-parameter schema with full coverage, a mode enum, and explicit cost caps, plus no output schema, the description is close to sufficient — the pricing disclosure is the one piece of information an agent genuinely cannot get from structured fields. What remains missing is a one-line statement of what a run returns, which is a modest gap for a scraper tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with an enum explaining the three modes and clear descriptions for postSlug, maxItems, _maxItems, and _maxChargeUsd, so the baseline of 3 applies. The description adds no parameter-level meaning beyond hinting at chargeable events ('Post or publication row'), which only loosely maps to maxItems.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a heading — "Posts, Archives & Publication Stats" — plus pricing boilerplate; it names the resource domain but never states a verb or that the tool scrapes/fetches Substack data for a given publication slug. An agent can infer retrieval from the schema's mode enum, not from the description itself. No sibling is a Substack tool, so differentiation pressure is low, but the purpose statement is still too implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no mention that the publication slug or custom domain is the entry point, and no explanation of when to pick archive vs. post vs. publication mode — that routing lives entirely in the schema. Nothing in the description tells the agent the conditions that select this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tiktok_hashtagA

TikTok Hashtag Scraper — Fast Video, Creator & Metrics

High-speed TikTok hashtag scraper. Extract videos, views, likes, comments, shares, audio details, and creator profiles by hashtag at an ultra-competitive price.

Pricing (pay per event, billed to your Apify account): Video: $0.001.

Runs on Apify as subimpact/tiktok-hashtag-scraper.

NameRequiredDescriptionDefault
dryRunNoValidates hashtag parameters without extracting video data or triggering billing charges.
hashtagsYesAdd TikTok hashtags to collect information about videos, views, likes, shares, comments, and creators. If not provided, the default hashtag is used.
_maxItemsNoHow 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.
_maxChargeUsdNoPer-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.
resultsPerPageNoMaximum number of posts that will be scraped for each hashtag (1–500). Values outside this range are clamped.
proxyConfigurationNoSelect Apify Proxy to ensure high reliability and bypass anti-scraping blocks.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and usefully discloses pricing ($0.001 per video), pay-per-event billing to the Apify account, and that it runs on Apify. It does not cover authentication needs, rate limits, or data freshness, so it falls short of full transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose and includes cost information early. It contains some marketing phrasing such as “ultra-competitive price” and a redundant title-like opening, but remains compact and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter scraper with full schema descriptions and no output schema, the description supplies enough context about what data is extracted and the billing model. It does not mention validation mode or spending caps, but those are already documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already explains all six parameters in detail. The description adds only the high-level idea of hashtag extraction and does not supplement parameter meaning beyond the schema, matching the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it scrapes TikTok hashtag data and extracts videos, views, likes, comments, shares, audio details, and creator profiles. It clearly identifies the platform and hashtag-based scope, though it does not explicitly differentiate from any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by “extract videos... by hashtag,” making it clear this tool is for TikTok hashtag research. However, the description does not say when to use it versus alternatives, nor does it provide prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_page_markdownA

RAG Web Browser Lite — Cheap Markdown for AI Agents

Web 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 small platform usage (raw HTTP, no browser).

Pricing (pay per event, billed to your Apify account): Page extracted: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/rag-web-browser-lite.

NameRequiredDescriptionDefault
glNoTwo-letter country code for Google Search, e.g. us, my, uk, sg.us
hlNoTwo-letter language code for Google Search, e.g. en, ms, zh.en
queryNoEnter Google Search keywords or a URL of a specific web page. Examples: - <code>san francisco weather</code> - <code>https://www.cnn.com</code> - <code>function calling site:openai.com</code>https://example.com
_maxItemsNoHow 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.
maxResultsNoThe maximum number of top organic Google Search results whose web pages will be extracted. If `query` is a URL, this field is ignored and the Actor only fetches the specific web page.
_maxChargeUsdNoPer-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.
outputFormatsNoSelect one or more formats to which the target web pages will be extracted and saved in the resulting dataset.
serpMaxRetriesNoThe maximum number of times the Actor will retry fetching the Google Search results on error.
serpProxyGroupNoApify Proxy group used for fetching Google Search results.GOOGLE_SERP
proxyConfigurationNoApify Proxy configuration used for scraping the target web pages.
removeElementsCssSelectorNoA CSS selector matching HTML elements that will be removed from the DOM before converting to text, Markdown, or saving as HTML. Set to a non-existent selector like `dummy_keep_everything` to disable removal.nav, footer, script, style, noscript, svg, img[src^='data:'], [role="alert"], [role="banner"], [role="dialog"], [role="alertdialog"], [role="region"][aria-label*="skip" i], [aria-modal="true"]

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantial work: it discloses the per-page cost ($0.001), that billing goes to the Apify account, and critically that extraction is raw HTTP with no browser, which tells the agent JS-rendered pages may fail. It stops short of describing return structure, failure/blocking behavior, or how run outcomes are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first two sentences, but pricing is stated twice (prose and a separate 'Pricing' block) and the closing 'Runs on Apify as subimpact/rag-web-browser-lite' is packaging rather than decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, zero-annotation tool with no output schema, the description covers the cost model and the no-browser constraint but never explains what a returned item looks like (SERP metadata plus page content per outputFormats) or what happens on partial failures. That leaves the agent guessing about result shape despite the cost-based, per-page billing model.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 11 parameters in detail, including maxResults being ignored when query is a URL. The description adds no parameter-level meaning beyond what the schema states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair and resource: it queries Google Search, scrapes the top N pages, and returns Markdown. This corrects an uninformative tool name (web_page_markdown) by revealing that search is part of the operation. It does not, however, explicitly contrast itself with the google_search or seo_page_audit siblings, so an agent must infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'for AI agents and RAG pipelines' plus the query field taking either keywords or a URL hints at search-then-fetch use cases. There is no explicit when-to-use/when-not guidance and no mention of when to prefer the plain google_search sibling instead of paying for page extraction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

website_contactsA

Website Contact & Social Extractor (Emails, Phones, Socials)

Extract emails, phone numbers and social profile links (Facebook, Instagram, LinkedIn, X, TikTok, YouTube, WhatsApp, Telegram) from any list of websites. Plain HTTP, no browser, respects robots.txt. $0.80 per 1,000 pages scanned, no per-lead fee.

Pricing (pay per event, billed to your Apify account): Page scanned: $0.0008; platform usage billed to your account.

Runs on Apify as subimpact/website-contact-extractor.

NameRequiredDescriptionDefault
maxItemsNoGlobal cap on website rows delivered in one run. The default of 10 keeps a default run under $0.05 at 5 pages per site. Raise it for larger lists. Optional per-page rows are not counted against this cap and are not charged separately.
_maxItemsNoHow 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.
startUrlsNoOne entry per website. Full URLs and bare domains are accepted, for example https://apify.com or hartamas.com. The first URL per domain is used as the start page. Duplicate domains are collapsed.
concurrencyNoHow many websites are processed at the same time. Pages within one site are fetched one at a time. Lower this if target sites rate-limit you.
_maxChargeUsdNoPer-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.
outputPerPageNoAdds one dataset row per successfully fetched page with that page's own contacts. These page rows are not charged separately. Billing is still per page scanned, charged once after each site row.
maxPagesPerSiteNoPages fetched and scanned per website, including the start page. Links whose URL or anchor text mentions contact, about, team, support, legal, impressum, kontakt or hubungi are fetched first. Higher values find more contacts and cost more page-scanned events.
respectRobotsTxtNoCheck each site's robots.txt before fetching pages and skip disallowed URLs. Keep this on unless you own the sites or have permission to crawl them.
proxyConfigurationNoDirect requests are the default and were measured to work for the example sites. Enable Apify datacenter or residential proxy only if target sites block the Apify IP ranges. A proxy failure fails the request and never falls back to a direct request.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well by disclosing plain HTTP/no browser operation, robots.txt compliance, per-page pricing, no per-lead fee, and Apify billing behavior. It could say more about rate limiting or output structure, but the core behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded, with purpose and extraction targets stated first, followed by technical and pricing details. It is appropriately sized, though the title-like first line and Apify actor attribution are slightly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a nine-parameter scraping tool with no output schema and no annotations, the description covers the essential purpose, safety constraint, and billing model. It stops short of describing the output row structure, but the schema compensates for most input semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description adds cost context such as '$0.80 per 1,000 pages scanned' and 'no per-lead fee,' but it does not add parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific extraction verb and concrete resources: emails, phone numbers, and social profile links from a list of websites. It is clear what the tool does, though it does not explicitly differentiate itself from sibling scraping tools such as web_page_markdown or seo_page_audit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'from any list of websites' and the robots.txt note, but the description gives no explicit when-to-use, when-not-to-use, or alternative-tool guidance. An agent can infer its role, but the routing guidance is thin.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

youtubeA

YouTube Scraper: Videos, Shorts, Channels & Comments

Fast 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, date, description) and comments with replies. $1.00 per 1,000 results.

Pricing (pay per event, billed to your Apify account): Result: $0.001; platform usage billed to your account.

Runs on Apify as subimpact/youtube-scraper.

NameRequiredDescriptionDefault
countryNoTwo-letter country code (gl), e.g. 'US'.US
languageNoInterface language code (hl), e.g. 'en'.en
_maxItemsNoHow 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.
startUrlsNoYouTube URLs: videos (/watch?v=, youtu.be), Shorts (/shorts/), channels (@handle, /channel/, /c/, /user/) or playlists (?list=).
searchSortByNoSort order for search results.relevance
_maxChargeUsdNoPer-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.
searchQueriesNoKeyword searches to run. Each query yields up to 'maxResultsPerQuery' results.
channelContentNoWhich tab to scrape for channel URLs ('videos', 'shorts' or 'both'). A /@handle/shorts URL always forces Shorts.videos
commentsSortByNoComment order: 'top' (most upvoted) or 'newest'.top
includeRepliesNoAlso scrape replies to comments.
maxConcurrencyNoHow many inputs are processed in parallel. Pagination inside one input is sequential.
scrapeCommentsNoAlso scrape comments for each video (adds 'comment' rows to the dataset).
maxTotalResultsNoGlobal cap on total rows across all inputs. Hard stop: no rows past this number.
searchUploadDateNoUpload-date filter for search results.any
enrichVideoDetailsNoFetch the video page for every result for exact like counts, exact publish date, full description and comment count. One extra request per video.
includeChannelInfoNoFor every channel URL, also deliver one 'channel' row with subscriber counts, About-panel info and links.
maxResultsPerQueryNoMaximum rows per search query.
proxyConfigurationNoOptional. Proxies are usually not needed: the scrape works over plain HTTPS from datacenter IPs. Enable Apify Proxy only for high volumes.
maxCommentsPerVideoNoMaximum TOP-LEVEL comment rows per video. Replies are capped separately by Max Replies Per Comment and do not count toward this limit.
maxVideosPerChannelNoMaximum video/short rows per channel or playlist URL.
searchIncludeShortsNoAlso extract Shorts rows from search result shelves.
maxRepliesPerCommentNoMaximum reply rows per comment thread. Reply rows do not count toward Max Comments Per Video.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the cost model ($1.00 per 1,000 results, per-event billing to the Apify account) and the no-browser/no-API-key execution profile — genuinely useful behavioral context. It does not describe the dataset/row output shape, run latency, or failure modes, leaving meaningful gaps for a 22-parameter scraping run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Capability statement comes first and is dense and useful. Minor waste: pricing is stated twice ('$1.00 per 1,000 results' and 'Result: $0.001'), and 'Fast … no browser and no API key' is marketing framing rather than decision-relevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 22-parameter, nested-object, no-output-schema tool, the description covers input modes and cost but says nothing about the returned dataset structure beyond scattered mentions of 'comment' and 'channel' rows, and nothing about the Apify account/token prerequisite. Adequate to start a run, not complete enough to predict results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with per-parameter descriptions, defaults and enums, so the baseline is a 3. The description lifts it slightly by naming the output modes the parameters switch between — exact likes/date/description via enrichment, comments with replies, channel About rows — giving the agent a reason to flip those flags rather than just their syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource set (videos, Shorts, channels, comments, playlists, channel About data) and the supported access modes (keyword search with filters, channel URLs, playlist URLs). The platform name alone separates it from siblings such as tiktok_hashtag or pinterest, so an agent can route to it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the description lists the capabilities (search, channel, playlist, comments), from which an agent must infer that it should supply searchQueries or startUrls. There is no explicit statement of when to prefer this over google_search or web_page_markdown, and no exclusions or prerequisites beyond 'runs on Apify'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

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

  1. 20 tool updatesv1.0.0
    • First observedbluesky
    • First observedcompany_career_jobs
    • First observedeventbrite_events
    • First observedget_run_results
    • First observedgoogle_ads_transparency
    • First observedgoogle_ai_mode
    • First observedgoogle_jobs
    • First observedgoogle_maps_places
    • First observedgoogle_search
    • First observedgoogle_trends
    • First observedjsonld_entities
    • First observedlazada_products
    • First observednews_mentions
    • First observedpinterest
    • First observedseo_page_audit
    • First observedsubstack
    • First observedtiktok_hashtag
    • First observedweb_page_markdown
    • First observedwebsite_contacts
    • First observedyoutube

TDQS

A3.5/5.0

Scored across 20 tools

Disambiguation4/5

Each tool targets a distinct platform or data source (TikTok, Eventbrite, YouTube, Google Maps, etc.), so most are easy to tell apart. There is some overlap between google_search, google_ai_mode and web_page_markdown (all involve Google search + content), and between google_jobs and company_career_jobs, which could occasionally confuse selection.

Naming Consistency3/5

All names are snake_case, which is good, but conventions are mixed: some are bare platform names (substack, pinterest, youtube, bluesky) while others are descriptive action/resource names (google_search, news_mentions, get_run_results). The bare platform names lack an action verb, creating an inconsistent pattern across the set.

Tool Count4/5

20 tools is on the heavy side of the 3-15 ideal, but this is a multi-scraper aggregator where each tool serves a genuinely different data source, so most earn their place. The single utility tool (get_run_results) sensibly supports the async scraping workflow.

Completeness4/5

The surface covers a broad range of scraping domains (social, jobs, local, SEO, ads, news, web) plus get_run_results for handling long-running runs, giving agents full fetch-to-retrieve workflows. Coverage is wide though not systematic per-domain, so gaps are minor and workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Direct access to 40+ scraping and search tools. Extract structured data from Google (Search, Maps, Trends), Amazon, Airbnb, Social Media, and any web page directly into your AI agent.
    63
    20
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to access fourteen web-data tools for scraping, SEO and site auditing, extraction, validation, enrichment, and screenshots through Apify actors. It runs those tools on the user's own Apify account via an API token.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives AI agents Google-backed web, news, maps, scholar, patent, shopping, image, video and autocomplete search, along with tools that convert public webpages and PDFs to Markdown, extract query-relevant passages from multiple URLs, and crawl or map sites.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    17 data tools for AI agents: Google Flights, Hotels, Shopping, News, Images, Videos, Jobs and Trends, Google Maps leads, Ads Transparency, YouTube transcripts, app reviews and AI visibility. Each tool runs an AutomationNation Actor on your own Apify account.
    18
    MIT