subimpact-data-mcp
OfficialScrapes Bluesky posts, profiles, threads, and follower graphs by keyword, hashtag, or handle without requiring login.
Scrapes Eventbrite events with venue and organizer data, supporting searches by city, query, category, URL, or organizer.
Provides Google search results as JSON, including organic results, People Also Ask, knowledge graph, top stories, local results, and full AI Overviews; also supports Google AI Mode answers, Google Jobs listings, and Google Trends interest and related queries.
Scrapes Google Ads Transparency Center data, allowing users to find advertisers by name or ID and export their ads with format, first and last shown dates, preview links, and ad links, with filtering options.
Extracts Google Maps places with details such as title, address, coordinates, phone, website, rating, review count, opening hours, popular times, images, price level, menu, and place ID.
Retrieves live job postings from company career pages hosted on Greenhouse, normalized into a single schema, and supports monitoring for new jobs.
Scrapes Pinterest pins from keyword search, boards, and profiles, including full-resolution originals, video variants, board and pinner metadata, and repin counts.
Provides Substack intelligence data including posts, archives, and publication statistics.
Scrapes TikTok hashtag data at high speed, extracting videos, views, likes, comments, shares, audio details, and creator profiles.
Provides a fast YouTube scraper for keyword searches with filters, channel videos and Shorts, channel About data, playlists, and video details including exact likes.
@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-mcpClaude 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 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 | |
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 | |
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 | |
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 | |
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 | |
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 | |
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 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 | |
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 | |
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 | |
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 | |
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 | |
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 Intel API — Posts, Archives & Publication Stats | Run started: $0.00005; Post or publication row: $0.001 + platform usage | |
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 | |
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 | |
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 | |
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 | |
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 optionmaxTotalChargeUsd. 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
_maxChargeUsdof$0.50; it is passed to Apify and enforced by the platform.Use
_maxItemsto 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) andreturned(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 |
| yes (for calls) | Your Apify API token. |
| no | Comma-separated subset of tool names to expose, e.g. |
| no | Per-call wait budget in seconds (default |
| no | Override the Apify API base URL (default |
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_TOKENyou 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
_maxChargeUsdcap 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 serversrc/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 toolsblueskyA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | What 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 |
| sort | No | Sort order for search mode: 'latest' (chronological) or 'top' (highest engagement). | latest |
| query | No | Keyword, hashtag, or query string (e.g. 'artificial intelligence', '#bluesky', 'startup'). Required in 'search' mode. | artificial intelligence |
| handle | No | Bluesky handle (e.g. 'bsky.app', 'jay.bsky.team') or DID ('did:plc:...'). Required in author_feed, profile, followers, follows modes. | |
| postUri | No | Full AT-URI ('at://did:plc:.../app.bsky.feed.post/...') or web URL ('https://bsky.app/profile/.../post/...'). Required in 'thread' mode. | |
| maxItems | No | Maximum number of posts or profiles to scrape. Pay-per-event charges only for items successfully extracted. | |
| _maxItems | No | How 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. | |
| _maxChargeUsd | No | Per-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. | |
| includeReplies | No | When in 'thread' mode, whether to recursively traverse and extract nested reply posts. | |
| proxyConfiguration | No | Select Apify Proxy (RESIDENTIAL recommended for high-volume author feeds or searches to avoid rate limits). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| _maxItems | No | How 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. | |
| companies | Yes | Careers 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 | |
| onlyNewJobs | No | Output only jobs not seen in previous runs (state persists across runs). Ideal for scheduled runs with a webhook to Slack/CRM. | |
| maxTotalJobs | No | Global 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. | |
| _maxChargeUsd | No | Per-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. | |
| includeDetails | No | Fetch each job's detail page for richer fields (Workday: location, employment type, description). Adds one request per job. | |
| stateStoreName | No | Named key-value store used to remember previously seen jobs. | ats-jobs-state |
| maxJobsPerCompany | No | Cap the number of jobs collected per company. 0 = no limit. | |
| includeDescription | No | Fetch full description text/HTML for each job. Slower and uses more requests, especially on Workday and Ashby. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Their 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. | |
| sort | No | date = by start date (default); distance = by distance from place center (requires radius). | date |
| price | No | free = free events only; paid = paid events only; blank or omitted for both. Empty strings from aitorsm inputs are ignored. | |
| query | No | Free-text search term (e.g. 'tech', 'yoga'). Optional — omit for all events in the place. | |
| dryRun | No | Count only, no charge. Still bills platform usage. | |
| places | No | ONE city name (e.g. 'London') or raw place ID. v1 supports a single place. When set, radius is required (default 50 km). | |
| radius | No | Search radius in km. REQUIRED when places is set. Default 50, max 50. | |
| country | No | Filters place resolution by country (e.g. 'United States'). Accepts aitorsm's lower-case slug ('malaysia', 'united-kingdom'). No-op without places. | |
| endDate | No | ISO date (YYYY-MM-DD). Optional; defaults to +1 year from startDate. | |
| keyword | No | Their 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. | |
| category | No | Eventbrite 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). | |
| _maxItems | No | How 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. | |
| eventUrls | No | List of Eventbrite event URLs to scrape directly. Series URLs return a parent stub (not charged). | |
| maxEvents | No | Maximum number of events to process (counts processed rows incl. duplicates). Default 1000 (above measured depth ~892 for London r50). Cap 10000. | |
| startDate | No | ISO date (YYYY-MM-DD). Optional; defaults to today. | |
| maxResults | No | Their 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. | |
| onlineOnly | No | Post-filter for online events. Mutually exclusive with places (place-scoped search returns no online events). | |
| organizerId | No | Scrape all events by this organizer (e.g. '120990958363'). | |
| _maxChargeUsd | No | Per-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. | |
| includeDetails | No | Fetch full event details (venue address, organizer, description, status). Default true. | |
| enrichOrganizers | No | Their 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. | |
| enrichDestination | No | Add 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. | |
| maxTotalChargeUsd | No | Bill-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The Apify run ID returned by a data tool call. | |
| offset | No | Number of dataset items to skip (default 0). | |
| _maxItems | No | How many dataset items to return (1-1000, default 50). | |
| _maxChargeUsd | No | Present 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
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.
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.
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.
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.
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.
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_ads_transparencyA
Google Ads Transparency Center Scraper (Advertisers & Ads)
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 region. No browser. $0.80 per 1,000 ads, $0.50 per 1,000 advertisers.
Pricing (pay per event, billed to your Apify account): Ad: $0.0008; Advertiser: $0.0005; platform usage billed to your account.
Runs on Apify as subimpact/google-ads-transparency-scraper.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | Two letter ISO country code (US, GB, DE, MY, SG, TH, ...) or anywhere. Region filtering happens on Google's side with the matching geo target id, so you get the ads shown in that country. anywhere skips the filter and returns ads from every region. | anywhere |
| maxItems | No | Global cap on ad rows across every advertiser and every search term. Advertiser rows are not counted against it. The run stops cleanly when the cap is reached. | |
| _maxItems | No | How 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. | |
| concurrency | No | How many advertisers are fetched at the same time, each on its own proxy session. 5 is a good default; higher values finish faster and are more likely to be rate limited. | |
| searchTerms | No | Advertiser names or domains, for example nike, adidas.com, samsung. Each term is resolved to advertisers through Google's public suggestion endpoint, then their ads are downloaded. An empty input ({}) searches nike. | |
| _maxChargeUsd | No | Per-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. | |
| advertiserIds | No | Advertiser ids from the Ads Transparency Center, for example AR06641858037806006273. Skips the suggestion lookup and fetches these advertisers directly. | |
| proxyConfiguration | No | Required. Direct requests from Apify's datacenter IPs get HTTP 429 from the Ads Transparency Center, while the Apify datacenter proxy returns 200. Keep the default, or supply your own proxyUrls. | |
| maxAdsPerAdvertiser | No | Hard cap on ad rows per advertiser. Cost guard: 40 ads cost about $0.032 in ad rows. An empty API input ({}) defaults to 10; the form default is 40. | |
| maxAdvertisersPerTerm | No | How many matching advertisers to process for each search term, in the order Google returns them. advertiserIds are always processed in full. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the burden. It usefully discloses pay-per-event pricing, Apify billing, and that no browser is needed, which are important behavioral traits. It still omits some operational details such as rate limiting and proxy requirements, which appear only in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and output scope are front-loaded, making the description easy to scan. However, the pricing is stated twice (once as per-1,000 rates and again as per-event rates), which is redundant and slightly bloats the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description lists the key ad fields returned and explains region filtering and advertiser lookup. Combined with a fully documented input schema, this is nearly complete for a scraper, though it could more clearly distinguish advertiser rows from ad rows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the schema documents all ten parameters thoroughly. The description only restates high-level concepts like searching by name or ID and filtering by region, adding little parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (scrape), a specific resource (Google Ads Transparency Center), and the exact scope (advertisers and ads). It also lists the returned ad fields, so an agent can tell what this tool produces 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by saying you can find advertisers by name or ID and export their ads filtered by region. However, it does not explicitly state when to use this tool versus another sibling, nor does it give exclusions or prerequisites beyond that implied context.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Two-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 |
| hl | No | Language 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 |
| udm50 | No | [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. | |
| backend | No | android (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 |
| queries | Yes | Queries 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. | |
| location | No | Google 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. | |
| _maxItems | No | How 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. | |
| skipCache | No | By 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. | |
| concurrency | No | Parallel queries (1-30). On the android backend this is capped automatically to the size of the browser pool. | |
| _maxChargeUsd | No | Per-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. | |
| retryDeferred | No | [legacy http backend only] When the answer is deferred, re-fetch through the folsrch async endpoint. ON by default (recovery rate ~90%). | |
| captureRawHtml | No | [legacy http backend only] Save raw SERP HTML to the key-value store for every query (for corpus/debugging). Adds storage cost. | |
| retryDeferredMaxFetches | No | [legacy http backend only] Upper bound on recovery fetches per query (1-5). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | No | One 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. | |
| location | No | Free 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. | |
| maxItems | No | Global 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. | |
| _maxItems | No | How 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. | |
| concurrency | No | How many queries are fetched in parallel. Higher is faster but uses more proxy sessions at once. Default 5. | |
| countryCode | No | Two-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 |
| languageCode | No | Google interface language. Use a two-letter code like en, ms, de, or a regional code like en-MY. | en |
| _maxChargeUsd | No | Per-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. | |
| maxJobsPerQuery | No | Google 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Optional. Center latitude of the search viewport. Leave empty (with longitude) to let Google resolve the location from each search string. | |
| lng | No | Optional. Center longitude of the search viewport. Only used together with latitude; empty = resolve from the search string. | |
| zoom | No | Map zoom for the search viewport. Higher = smaller area, fewer but denser results. | |
| language | No | Results language. | en |
| placeIds | No | Direct place detail scrape by ChIJ place ID. | |
| _maxItems | No | How 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. | |
| startUrls | No | Direct place detail scrape by maps.google.com place URL. | |
| maxReviews | No | Number of reviews to extract per place. 0 = none. Each review = review-scraped charge. | |
| _maxChargeUsd | No | Per-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. | |
| proxyConfiguration | No | Optional. Residential proxies recommended for large runs from datacenter IPs. | |
| searchStringsArray | No | What 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. | |
| scrapePlaceDetailPage | No | Open each place's detail payload (phone, hours, popular times, images, price). Off = search-level records only. | |
| maxCrawledPlacesPerSearch | No | Max 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
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.
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.
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.
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.
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.
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.
google_searchB
Google SERP + AI Overviews API
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 row per query. Batch up to 1,000 queries. From $1.80 per 1,000, platform costs included.
Pricing (pay per event, billed to your Apify account): Google SERP: $0.003.
Runs on Apify as subimpact/google-serp-ai-overviews.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Two-letter country code for Google results, e.g. us, my, uk, sg. | us |
| hl | No | Two-letter language code, e.g. en, ms, zh. | en |
| udm56 | No | When true, appends &udm=56 to the search URL. Default FALSE after measurement (2026-09-07 A/B, 10 queries x 2 variants): udm=56 cut AIO coverage 8/10 to 4/10 and did not pin the classic surface (AI Mode share unchanged). Kept for control; leave off for Google's default routing. | |
| mobile | No | When true, fetches the SERP and the folsrch fragment with a mobile device header set (got-scraping header generator, devices: ['mobile']). Default FALSE. Measurement (2026-09-07 spike, 10 queries x 4 variants, gl=sg): mobile UA cut truncation 6/8 (75%) to 3/8 (37%), mean answer length 687 -> 852 chars, fetch success 15/20 -> 19/20. n=10, one market, one day — EnterRank's paired A/B (30 queries x 2, MY market) was inconclusive: zero of 29 queries were classic-with-an-overview in both arms (commercial prompt set routes to AI Mode). Do not flip the default until a classic-serving prompt set settles it. | |
| queries | Yes | List of search queries to run. Max 1000 per run. | |
| location | No | Geo target for results, e.g. "New York, NY" or "Kuala Lumpur". Empty = Google uses proxy IP geolocation. Encoded server-side via Google uule (same as SerpAPI). | |
| _maxItems | No | How 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. | |
| maxResults | No | How many organic results to return per query (1-10, default 10). | |
| concurrency | No | Number of parallel queries (1-30, default 10). A/B measured: 20 queries at c5=34s, c10=35s, c20=65s — the SERP proxy pool is the bottleneck, so beyond ~10 workers latency balloons. 10 gives the same throughput as 5 with headroom for AI-Overview-heavy sets. | |
| _maxChargeUsd | No | Per-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. | |
| excludeAiMode | No | Default TRUE. When Google serves the AI Mode surface instead of a classic AI Overview (after the optional retryAiModeForClassic re-fetch, if enabled), the row carries no ai_overview. search_metadata.ai_mode_detected and search_metadata.ai_mode_excluded are true. Organic results and People Also Ask are still delivered; the row is Success and charged, the same as a query Google shows no AI Overview for. Set to false to ship the AI Mode answer as before (flagged ai_mode_detected, Success, charged). | |
| captureRawHtml | No | When true, saves the raw SERP HTML for every query to the key-value store (key: raw-<query>-<ts>.html). Used for building golden test corpora and debugging selector drift. Adds ~200-400KB per query to KV storage. Default false. | |
| retryDeferredAIO | No | Google generates AI Overviews asynchronously — the first fetch sometimes returns only a placeholder shell. When true, the actor re-fetches (up to retryDeferredMaxFetches total) and keeps the richest response. Each retry costs one extra proxy request (~$0.0025) + compute on affected queries only. Set false to always use a single fetch per query. | |
| resolveGotoTokens | No | When true (default), AI Overview citations that still carry a raw /goto? token after the resolution chain are resolved by reading the Location header of google.com/goto?url=<token> (~90ms each, ~11.5% of citations). The original token is kept in goto_url as provenance; failures stay unresolved with unresolved_citations intact. Verified 93/93 by EnterRank + 6/6 by our probe. Set false to disable. | |
| retryDeferredPoll | No | When true, re-fetches the SERP up to retryDeferredMaxFetches times when a deferred AI Overview shell is detected, keeping the richest response. Off by default: the folsrch recovery path resolves 90%+ of deferred AIOs, and the poll recovered 0/120 in the stress test while costing ~10s + extra proxy requests per shell query. Enable only if folsrch regresses. | |
| retryThinOverview | No | When true, an AI Overview that came back partly rendered (ends in a dangling heading, or has under 600 characters of answer text) gets one fresh SERP fetch; the richer answer is kept, never a poorer one. Requires retryDeferredAIO and retryDeferredMaxFetches > 1. Costs one extra proxy request on affected rows only. Set false to ship thin answers as served. | |
| retryPartialResults | No | Google intermittently serves a reduced page with other modules (People Also Ask, knowledge graph, top stories) but NO organic results. When true (default), the actor re-fetches to recover organics. Queries that stay organic-empty are marked status=Partial and NOT charged. Re-fetches are included in the price. | |
| captureFlaggedFolsrch | No | When true, and a query ends with truncation_detected true (AI Overview words missing: cut at an inline entity link, on an unclosed bracket, a trailing comma or a joining word), the answer's source HTML — the raw folsrch fragment when resolved_by is folsrch, else the shell — is saved to the default key-value store as folsrch-evidence-<query>-<ts>.html and search_metadata.folsrch_evidence points at the key. Diagnostic for studying exact cut points; best-effort, never fails a row. Adds one KV value per truncated row. Default false. | |
| retryAiModeForClassic | No | When true, an AI Mode serve triggers one re-fetch hoping for a classic AI Overview. Default FALSE after measurement (EnterRank, 2026-09-07, 101/101 answers across 4 runs): on a commercial query mix the re-fetch recovered ZERO classic serves — Google routes commercial queries to AI Mode today, so the re-fetch is a doubled SERP fetch with no recovery. Kept behind the input because routing moved once (2026-09-02: 2/2 re-fetches served classic) and can move back. When false (default), an AI Mode answer is not re-fetched: it is dropped (no ai_overview) when excludeAiMode is on (default), or shipped as-is (Success, ai_mode_detected: true, warning set, charged) when excludeAiMode is false. | |
| retryPartialMaxFetches | No | Upper bound on total fetches per query when organic results are missing (retryPartialResults=true). 1 = no re-fetch, 2 = one re-fetch, 3 = two re-fetches. Range 1-3. | |
| retryDeferredMaxFetches | No | Upper bound on total fetches per query when a deferred AI Overview shell is detected. 1 = single fetch (same as retryDeferredAIO=false). Higher = better recovery odds, more proxy usage on affected queries. Range 1-5. |
TDQS
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 add real behavioral context that structured fields don't: pay-per-event billing to the Apify account, $0.003 per Google SERP, ~$1.80 per 1,000 queries, and the underlying Actor (subimpact/google-serp-ai-overviews). However, it says nothing about failure/partial-result behavior, AI Mode vs classic AI Overview routing, or default retry behavior — all of which materially change what comes back and are buried in parameter text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then return contents, then scale, then pricing — a sensible ordering with little waste. The pricing and Actor-name lines are sales/origin metadata rather than invocation guidance, which slightly dilutes the signal, but the whole thing is short enough that no sentence is a real burden.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 21 parameters, no annotations, and no output schema, the description should do more than list result modules. 'One row per query' hints at the response shape but doesn't say what a row's fields look like or what happens on AI-Mode serves, deferred AI Overviews, or Partial rows — behaviors an agent must understand before tuning the many retry/exclusion flags. Adequate as a front door, incomplete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across 21 parameters, so the schema already documents each field thoroughly. The description contributes only the batching ceiling ('Batch up to 1,000 queries'), which merely restates the queries array constraint. Baseline 3 is appropriate when the schema does all the semantic work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource — Google SERP scraping with AI Overviews — and enumerates exactly what is returned (AI Overview answers with lists/citations/sources, organic results, People Also Ask, knowledge graph, top stories, local results) in one row per query. It is clear and specific, but it never distinguishes itself from the sibling google_ai_mode, which an agent could easily confuse with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no named alternative. The reader must infer from the feature list that this is for bulk SERP retrieval, and the presence of google_ai_mode and google_trends as siblings makes the lack of routing guidance a real gap. Batch size (up to 1,000 queries) and price are stated, but those are limits, not selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_trendsA
Google Trends Scraper (Keyless)
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 call. From $2.50 per 1,000 keywords (less on paid plans), charged only for delivered keywords.
Pricing (pay per event, billed to your Apify account): Keyword trends bundle: $0.0025; platform usage billed to your account.
Runs on Apify as subimpact/google-trends-scraper-keyless.
| Name | Required | Description | Default |
|---|---|---|---|
| geo | No | Two-letter country code (US, MY, GB...). Leave empty for worldwide. | US |
| category | No | Google Trends category id (0 = all categories). | |
| keywords | Yes | Keywords to track. Up to 5 are compared in one Trends call; more are split into batches. Max 100. | |
| property | No | Web search (''), images, news, youtube, or froogle (Google Shopping). | |
| tzOffset | No | e.g. -480 for UTC+8. Affects hourly/daily bucketing. | |
| _maxItems | No | How 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. | |
| batchSize | No | Max keywords compared per Trends call (Google allows up to 5). | |
| timeRange | No | Trends time range. For a custom range, run via API with 'YYYY-MM-DD YYYY-MM-DD'. | today 12-m |
| delaySeconds | No | Politeness delay. Raise if you see 429 warnings. | |
| _maxChargeUsd | No | Per-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. | |
| includeGeoMap | No | Emit per-region interest rows (states/provinces of the target geo). | |
| maxRelatedItems | No | Cap per TOP/RISING list (Google returns ~25). | |
| includeTimeseries | No | Emit timeline rows (0-100 interest per period). | |
| proxyConfiguration | No | Optional. Add RESIDENTIAL proxy if datacenter IPs get throttled (HTTP 429). | |
| includeRelatedTopics | No | Emit related topics (may be empty on some egress IPs). | |
| includeRelatedQueries | No | Emit TOP + RISING related queries per keyword. |
TDQS
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 cost behavior ('$2.50 per 1,000 keywords, charged only for delivered keywords', platform usage billed to the Apify account) plus the access profile (keyless, no browser, no captcha) and the batching constraint. It stops short of describing the actual dataset item shape or failure modes, which matters since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Capability statement is front-loaded, followed by access/cost qualifiers and the actor identifier. Every line carries distinct information (what it scrapes, cost, batching, runtime) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter tool with no annotations and no output schema, the description covers cost, batching, keyless access, and the three output modes well, and the per-parameter schema is fully documented. What is missing is a description of the returned dataset items/fields, which the agent must infer from the include* booleans.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 reinforces the '5 keywords per call' comparison limit for the keywords param and the per-keyword billing model, but adds no syntax, format, or interaction detail the schema does not already give.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line names a specific verb and resource ('Scrape Google Trends interest-over-time, related queries/topics, and per-region interest for keywords') and enumerates the three output modes. No sibling tool (google_search, google_ads_transparency, youtube) overlaps this scope, so an agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'No API key, no browser, no captcha' and the per-keyword pricing tell the agent this is the cheap keyless route for Trends data, but there is no explicit when-to-use/when-not or named alternative. The batching note ('Up to 5 keywords compared per call') is the closest thing to operational guidance.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| maxPages | No | Hard limit on how many URLs this run may request. Leave empty for no limit. | |
| _maxItems | No | How 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. | |
| startUrls | Yes | List of pages to extract JSON-LD from. Each entry: {"url": "https://..."} | |
| estimateOnly | No | Run the full extraction and report what it would cost, without charging anything. | |
| maxChargeUsd | No | Hard ceiling on what this run may charge. Once reached, no further events are billed. | |
| resolveGraph | No | Resolve @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. | |
| _maxChargeUsd | No | Per-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. | |
| validateSchema | No | Check every @type and property against the bundled Schema.org ontology (979 types, 1,633 properties). Reports unknown types and invalid properties per page. | |
| includeRawBlocks | No | Also store the parsed JSON-LD blocks verbatim in each row (useful for debugging or downstream processing). | |
| proxyConfiguration | No | Apify proxy for IP rotation. Leave default for automatic proxy. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | search = keyword search (use queries). category = browse a category page (use categoryUrls). | search |
| sort | No | Result sort order. Popularity = Lazada's default ranking. | popularity |
| country | No | Lazada market to scrape. Each country uses its own domain (my → lazada.com.my, sg → lazada.sg, etc.). | my |
| monitor | No | Compare 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. | |
| queries | No | Keywords to search for. One keyword per line. Example: ["iphone 15", "samsung galaxy"]. Required when mode=search. Max 20 entries (extra entries are dropped). | |
| maxPrice | No | Optional. Keep only products with price ≤ this value (in local currency units). | |
| minPrice | No | Optional. Keep only products with price ≥ this value (in local currency units). | |
| _maxItems | No | How 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. | |
| webhookUrl | No | Optional. When price/stock alerts fire, POST the alert payload (JSON) to this URL. | |
| categoryUrls | No | Lazada category browse URLs. Example: https://www.lazada.com.my/shop-mobiles/ Required when mode=category. Max 20 entries (extra entries are dropped). | |
| _maxChargeUsd | No | Per-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. | |
| monitorWatchList | No | Specific 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. | |
| maxResultsPerQuery | No | Maximum products to collect per keyword or category URL. This is your cost ceiling: products scraped × $0.00099. Hard cap: 5000. | |
| proxyConfiguration | No | Apify 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | No | Only 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. | |
| topics | No | Publisher sections to search. Leave empty for all topics. | |
| domains | No | Restrict results to these publisher domains (subdomains included): thestar.com.my also matches biz.thestar.com.my. Leave empty for any publisher. | |
| onlyNew | No | For 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. | |
| regions | No | Publisher regions to search. Leave empty for all regions. MY = Malaysia, SG = Singapore, ID = Indonesia, PH = Philippines, TH = Thailand, VN = Vietnam, GLOBAL = international outlets. | |
| dateFrom | No | Only articles published on/after this date. ISO format: 2026-10-01 or 2026-10-01T09:00:00Z. | |
| keywords | Yes | 1–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. | |
| stateKey | No | Only 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. | |
| _maxItems | No | How 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. | |
| languages | No | ISO language codes of the publisher feed, e.g. en, ms, id, th, vi. Leave empty for all languages. | |
| lookbackDays | No | How 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. | |
| _maxChargeUsd | No | Per-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. | |
| excludeDomains | No | Drop results from these publisher domains (subdomains included). | |
| excludeKeywords | No | Appended 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". | |
| maxItemsPerKeyword | No | Upper limit of articles fetched for each keyword (1–5000). You are charged only for the articles actually returned. | |
| dedupeAcrossKeywords | No | On (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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | search = keyword search (use queries). board = every pin on a board (use boardUrls or boardIds). profile = every pin a user has published (use usernames). | search |
| queries | No | Comma-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 |
| boardIds | No | Comma-separated numeric board ids, e.g. `286612032474627954`. Faster than boardUrls (skips the id-resolution request). Used when mode=board. | |
| _maxItems | No | How 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. | |
| boardUrls | No | Comma-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. | |
| imageSize | No | Which image variant to put in `imageUrl` (and to download when media download is on). `orig` is the full-resolution original. | orig |
| usernames | No | Comma-separated Pinterest usernames, e.g. `ohuhu, nasa`. A leading @ and full profile URLs are accepted. Required when mode=profile. | |
| includeRaw | No | Keep the untouched Pinterest pin object in the `raw` column. Turn off for smaller datasets. | |
| maxPinsTotal | No | Optional 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. | |
| _maxChargeUsd | No | Per-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. | |
| downloadMedia | No | Download 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. | |
| enrichDetails | No | Fetch 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. | |
| maxPinsPerSource | No | Maximum pins to collect per query / board / profile. This is your cost ceiling: pins scraped × the per-pin price. Hard cap: 5000. | |
| proxyConfiguration | No | Not required — Pinterest's resource API responds normally to datacenter IPs. Kept as an escape hatch in case an exit IP gets throttled. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | onpage = audit URLs; serp_preview = Google snippet preview with truncation flags | onpage |
| maxUrls | No | Optional cap on how many URLs are processed per run. Leave empty for no limit. | |
| pageUrls | No | URLs to audit (onpage mode) or preview (serp_preview mode). Leave empty for a one-URL demo run. | |
| proxyUrl | No | Optional HTTP(S) proxy for page fetches | |
| _maxItems | No | How 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. | |
| useLivePage | No | serp_preview: pull title/description from the live page before applying overrides | |
| includeLinks | No | onpage: include the full link list + image lists in the audit record | |
| _maxChargeUsd | No | Per-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. | |
| serpOverrides | No | Optional title/description overrides per URL for serp_preview mode (used instead of the live page) | |
| fetchTimeoutSec | No | Per-page fetch timeout in seconds |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What to fetch: archive (recent posts list), post (full post by slug), publication (publication profile + stats). | |
| maxItems | No | Max posts to return in archive mode (0 = uncapped, safely limited to 5000). | |
| postSlug | No | Post slug for post mode (e.g. 'investing-in-gimlet'). | |
| _maxItems | No | How 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. | |
| publication | Yes | Substack slug (e.g. 'a16z') or custom domain (e.g. 'stratechery.com'). For custom domains, the substack slug is preferred when known. | a16z |
| _maxChargeUsd | No | Per-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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Validates hashtag parameters without extracting video data or triggering billing charges. | |
| hashtags | Yes | Add TikTok hashtags to collect information about videos, views, likes, shares, comments, and creators. If not provided, the default hashtag is used. | |
| _maxItems | No | How 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. | |
| _maxChargeUsd | No | Per-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. | |
| resultsPerPage | No | Maximum number of posts that will be scraped for each hashtag (1–500). Values outside this range are clamped. | |
| proxyConfiguration | No | Select Apify Proxy to ensure high reliability and bypass anti-scraping blocks. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| gl | No | Two-letter country code for Google Search, e.g. us, my, uk, sg. | us |
| hl | No | Two-letter language code for Google Search, e.g. en, ms, zh. | en |
| query | No | Enter 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 |
| _maxItems | No | How 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. | |
| maxResults | No | The 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. | |
| _maxChargeUsd | No | Per-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. | |
| outputFormats | No | Select one or more formats to which the target web pages will be extracted and saved in the resulting dataset. | |
| serpMaxRetries | No | The maximum number of times the Actor will retry fetching the Google Search results on error. | |
| serpProxyGroup | No | Apify Proxy group used for fetching Google Search results. | GOOGLE_SERP |
| proxyConfiguration | No | Apify Proxy configuration used for scraping the target web pages. | |
| removeElementsCssSelector | No | A 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| maxItems | No | Global 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. | |
| _maxItems | No | How 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. | |
| startUrls | No | One 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. | |
| concurrency | No | How 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. | |
| _maxChargeUsd | No | Per-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. | |
| outputPerPage | No | Adds 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. | |
| maxPagesPerSite | No | Pages 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. | |
| respectRobotsTxt | No | Check 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. | |
| proxyConfiguration | No | Direct 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Two-letter country code (gl), e.g. 'US'. | US |
| language | No | Interface language code (hl), e.g. 'en'. | en |
| _maxItems | No | How 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. | |
| startUrls | No | YouTube URLs: videos (/watch?v=, youtu.be), Shorts (/shorts/), channels (@handle, /channel/, /c/, /user/) or playlists (?list=). | |
| searchSortBy | No | Sort order for search results. | relevance |
| _maxChargeUsd | No | Per-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. | |
| searchQueries | No | Keyword searches to run. Each query yields up to 'maxResultsPerQuery' results. | |
| channelContent | No | Which tab to scrape for channel URLs ('videos', 'shorts' or 'both'). A /@handle/shorts URL always forces Shorts. | videos |
| commentsSortBy | No | Comment order: 'top' (most upvoted) or 'newest'. | top |
| includeReplies | No | Also scrape replies to comments. | |
| maxConcurrency | No | How many inputs are processed in parallel. Pagination inside one input is sequential. | |
| scrapeComments | No | Also scrape comments for each video (adds 'comment' rows to the dataset). | |
| maxTotalResults | No | Global cap on total rows across all inputs. Hard stop: no rows past this number. | |
| searchUploadDate | No | Upload-date filter for search results. | any |
| enrichVideoDetails | No | Fetch the video page for every result for exact like counts, exact publish date, full description and comment count. One extra request per video. | |
| includeChannelInfo | No | For every channel URL, also deliver one 'channel' row with subscriber counts, About-panel info and links. | |
| maxResultsPerQuery | No | Maximum rows per search query. | |
| proxyConfiguration | No | Optional. Proxies are usually not needed: the scrape works over plain HTTPS from datacenter IPs. Enable Apify Proxy only for high volumes. | |
| maxCommentsPerVideo | No | Maximum TOP-LEVEL comment rows per video. Replies are capped separately by Max Replies Per Comment and do not count toward this limit. | |
| maxVideosPerChannel | No | Maximum video/short rows per channel or playlist URL. | |
| searchIncludeShorts | No | Also extract Shorts rows from search result shelves. | |
| maxRepliesPerComment | No | Maximum reply rows per comment thread. Reply rows do not count toward Max Comments Per Video. |
TDQS
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.
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.
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.
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.
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.
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.
20 tool updates
v1.0.0- First observed
bluesky - First observed
company_career_jobs - First observed
eventbrite_events - First observed
get_run_results - First observed
google_ads_transparency - First observed
google_ai_mode - First observed
google_jobs - First observed
google_maps_places - First observed
google_search - First observed
google_trends - First observed
jsonld_entities - First observed
lazada_products - First observed
news_mentions - First observed
pinterest - First observed
seo_page_audit - First observed
substack - First observed
tiktok_hashtag - First observed
web_page_markdown - First observed
website_contacts - First observed
youtube
TDQS
Scored across 20 tools
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.
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.
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.
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
Related MCP Connectors
Direct access to 60+ 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.
Spreadsheet, census tract, PDF-to-Markdown, SEO/AI audit and video frame tools for agents, on Apify.
Jobs, ads, SEO, keywords, YouTube and AliExpress data for AI agents. Runs on Apify.
Public web data for AI agents: scrape any page, plus Google, TikTok, Instagram and Amazon as JSON.
Related MCP Servers
AlicenseAqualityAmaintenanceDirect 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.6320MIT
honestkit-mcpofficial
AlicenseNot gradedqualityCmaintenanceEnables 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
SerpKite MCPofficial
AlicenseNot gradedqualityBmaintenanceGives 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- AlicenseAqualityAmaintenance17 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.18MIT