Skip to main content
Glama

Server Details

ChatGPT visibility, SERP, Maps, reviews, traffic, backlinks, tech stack, PDF tables, Amazon, jobs, Trends.

Ownership verified
Status
Healthy
Uptime
77.4% over 25 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
kristerkb-pixel/rowfeed-seo-mcp
GitHub Stars
0
ChatGPT
–
Claude
–

TDQS

B3.4/5.0

Scored across 44 tools

Disambiguation4/5

Most tools map to distinct data sources (Amazon, Tripadvisor, YouTube, backlinks, etc.) with clearly different outputs. A few overlaps exist within the SEO/Google cluster—e.g. google-serp-api, google-ai-overview-tracker, and ai-search-visibility-tracker, or keyword-generator vs keyword-search-volume vs competitor-keywords—where an agent could hesitate, but descriptions help disambiguate.

Naming Consistency4/5

All names are kebab-case and the 40 actor tools uniformly use the `rowfeed--<actor>` prefix, which is predictable. The four infrastructure tools use a verb_noun style (abort-actor-run, get-actor-run) that slightly differs from the noun-phrase actor tools, but both conventions are internally consistent.

Tool Count3/5

44 tools is heavy and pushes against the recommended 3-15 range, making selection and discovery burdensome for an agent. Each tool does wrap a distinct data source so they largely earn their place, but the catalog is over-scoped for a single MCP surface.

Completeness4/5

The data-source surface is broad and covers many research/SEO/market workflows from search to scraping to export. Supporting plumbing exists (abort run, get run, get dataset items, get KV record) but there's no actor-listing or dataset-metadata tool, leaving minor gaps for orchestration.

Available Tools

44 tools
abort-actor-runAbort Actor runA
DestructiveIdempotent
Inspect

Abort an Actor run that is currently starting or running. For runs with status SUCCEEDED, FAILED, ABORTING, ABORTED, or TIMED-OUT, this call has no effect. The results will include the updated run details after the abort request.

USAGE:

  • Use when you need to stop a run that is taking too long or misconfigured.

USAGE EXAMPLES:

  • user_input: Abort run y2h7sK3Wc

  • user_input: Gracefully abort run y2h7sK3Wc

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run to abort.
gracefullyNoIf true, the Actor run will abort gracefully with a 30-second timeout.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the no-effect-on-terminal-states rule, which is exactly what makes the idempotent hint meaningful, plus the fact that updated run details come back. It omits auth/permission requirements and any rate-limit behavior.

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

Conciseness4/5

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

Front-loaded with the core action and the state constraint, and every prose sentence earns its place. The 'USAGE EXAMPLES' block of raw user_input lines is mostly decorative and pads the definition slightly.

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

Completeness4/5

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

With an output schema present, return values need not be spelled out, and the description still notes that updated run details are returned. For a two-parameter mutation with full annotation coverage, only auth requirements are unaddressed, which is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters and the 30-second graceful-abort timeout are already documented in the schema. The description only gestures at 'gracefully' via an example, adding no syntax or semantic meaning beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

Specific verb (Abort) plus resource (Actor run) and a state qualifier ('currently starting or running'), which immediately distinguishes it from siblings like call-actor and get-actor-run. An agent can select it without opening the schema.

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

Usage Guidelines4/5

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

Explicit when-to-use ('stop a run that is taking too long or misconfigured') and an explicit no-op condition (terminal statuses such as SUCCEEDED, FAILED, ABORTED, TIMED-OUT). It does not name an alternative tool or describe prerequisites, so it falls short of a 5.

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

get-actor-runGet Actor runA
Read-onlyIdempotent
Inspect

Get detailed information about a specific Actor run.

Returns run result: status, storages (datasets/keyValueStores alias map), stats, summary, nextStep.

  • summary describes the past (e.g. "SUCCEEDED in 22s. 47 items; 3 fields available.").

  • nextStep prescribes one primary follow-up action with identifiers interpolated (e.g. "Use get-dataset-items with datasetId=...").

  • waitSecs (0–45, default 30) waits up to that many seconds for terminal status before returning.

USAGE:

  • Use to check the status of a run started by any Actor-running tool.

  • Pass waitSecs > 0 to block until terminal (or until the cap elapses).

USAGE EXAMPLES:

  • user_input: Show details of run y2h7sK3Wc

  • user_input: Wait for run y2h7sK3Wc to finish

NameRequiredDescriptionDefault
runIdYesThe ID of the Actor run.
waitSecsNoMaximum seconds to wait for the run to reach a terminal state (SUCCEEDED, FAILED, ABORTED, TIMED-OUT). 0 returns immediately with the current status. Cap: 45. Default: 30.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, but the description adds real behavioral context beyond them: the summary vs. nextStep semantics, and that waitSecs blocks for up to 45s (default 30) before returning the current state. This is substantive added value, though it doesn't cover error/failure modes.

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

Conciseness4/5

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

Front-loaded with the core purpose, then segmented into Returns/USAGE/EXAMPLES blocks. Every line carries information, though the two usage examples are somewhat redundant with the USAGE prose, adding minor length.

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

Completeness5/5

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

With an output schema present and 100% parameter coverage, the description need only orient the agent, which it does fully: purpose, when to use, wait semantics, and concrete invocation examples. Nothing needed to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by framing waitSecs as a blocking/wait mechanism with its cap and default, and by describing what runId's run produces. Slight above-baseline value over the schema text.

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

Purpose4/5

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

States a specific verb and resource ('Get detailed information about a specific Actor run') and enumerates the returned result fields (status, storages, stats, summary, nextStep). It does not explicitly distinguish itself from siblings like call-actor or abort-actor-run, so it falls just short of the 5 benchmark.

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

Usage Guidelines4/5

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

The USAGE block names the condition ('check the status of a run started by any Actor-running tool') and explains when to pass waitSecs > 0 to block until terminal. It gives clear context but stops short of explicit exclusions or naming the sibling to use for other run operations.

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

get-dataset-itemsGet dataset itemsA
Read-onlyIdempotent
Inspect

Get items (rows) from a dataset — the output/results produced by an Actor run. Returns the rows themselves, not dataset metadata, counts, or a schema. When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly. Default limit is 20. Use clean=true to skip empty items and hidden fields.

USAGE:

  • Use when you need to read data from a dataset (all items or only selected fields).

USAGE EXAMPLES:

  • user_input: Retrieve results from dataset abc123

  • user_input: Get only metadata.url and title from dataset username~my-dataset

NameRequiredDescriptionDefault
descNoIf true, results are returned in reverse order (newest to oldest).
omitNoComma-separated list of fields to exclude from results.
cleanNoIf true, returns only non-empty items and skips hidden fields (starting with #). Shortcut for skipHidden=true and skipEmpty=true.
limitNoMaximum number of items to return. Default is 20.
fieldsNoComma-separated list of fields to include in results. Fields in output are sorted as specified. Use dot notation for nested objects (e.g. "metadata.url"); the server auto-flattens parent prefixes.
offsetNoNumber of items to skip at the start. Default is 0.
flattenNoComma-separated list of fields to flatten (e.g. flatten="metadata" turns {"metadata":{"url":"x"}} into {"metadata.url":"x"}). Normally derived automatically from dot-notation in `fields`; specify only as a diagnostic override.
datasetIdYesDataset ID, name (resolved against your own datasets), or full name as username~name.

Output Schema

NameRequiredDescription
itemsYesDataset items
limitYesLimit used for pagination
offsetYesOffset used for pagination
summaryYesSummary of the result
nextStepYesOne follow-up action with tool name
datasetIdYesDataset ID
itemCountYesNumber of items returned
totalItemCountYesTotal items in dataset
apifyConsoleUrlNoPersonalized Apify Console link to the dataset; present only for Console sessions

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), so the description adds value by disclosing the default limit of 20, what clean=true does, and that results are the raw rows. Return-shape details are largely deferred to the existing output schema, which is appropriate.

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

Conciseness4/5

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

Front-loaded with the core purpose and the anti-scope sentence, followed by short usage notes and examples. Slightly redundant in repeating the limit default and the clean flag across sections, but nothing wasteful enough to hurt.

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

Completeness4/5

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

For a read tool with full schema coverage and an output schema, the description supplies the purpose, trigger, and key defaults an agent needs. Pagination interaction (offset/limit) and flatten behavior are left to the schema, which is reasonable given the output schema exists.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all eight parameters in depth. The description only restates the default limit and clean=true semantics, adding little beyond the structured fields; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get items (rows) from a dataset') and immediately delimits scope by saying it returns rows themselves, not metadata, counts, or schema. An agent can distinguish the intent without opening the schema.

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

Usage Guidelines4/5

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

Gives a clear trigger ('When the user provides a datasetId and asks to retrieve results, output, data, or rows, call this tool directly') plus a usage section and two concrete examples. It lacks explicit when-not guidance relative to any alternative, but the sibling list contains no competing dataset-read tool.

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

get-key-value-store-recordGet key-value store recordA
Read-onlyIdempotent
Inspect

Get the value stored under a specific key in a key-value store — a single record, not a listing of all keys. Requires the exact key name. The response preserves the original Content-Encoding; most clients handle decompression automatically.

USAGE:

  • Use when you need to retrieve a specific record (JSON, text, or binary) from a store.

USAGE EXAMPLES:

  • user_input: Get record INPUT from store abc123

  • user_input: Get record data.json from store username~my-store

NameRequiredDescriptionDefault
recordKeyYesKey of the record to retrieve.
keyValueStoreIdYesKey-value store ID, name (resolved against your own key-value stores), or full name as username~name.

Output Schema

NameRequiredDescription
keyYesRecord key
valueYesThe stored value (JSON, text, or binary)
summaryYesSummary of the result
contentTypeNoMIME type of the stored value
keyValueStoreIdYesKey-value store ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered elsewhere. The description earns credit for adding behavioral context beyond that: the 'requires the exact key name' precondition and the note that the response preserves the original Content-Encoding, which most clients decompress automatically — a real return-value trait callers would otherwise trip over.

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

Conciseness4/5

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

The key facts — scope, exact-key requirement, encoding caveat — are front-loaded in three tight sentences. The subsequent USAGE and USAGE EXAMPLES blocks are somewhat redundant with the first paragraph, costing a little efficiency.

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

Completeness5/5

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

A two-parameter read tool whose annotations, 100% schema coverage, and output schema already cover safety, inputs, and return shape. The description closes the remaining gap with the Content-Encoding behavior, which is exactly the non-obvious detail an agent needs.

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

Parameters3/5

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

Schema description coverage is 100%, including the keyValueStoreId resolution rules (name vs. username~name) and minLength constraints in the schema itself. The description only reinforces that the key must be exact, adding little semantics beyond what the schema already documents, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get the value stored under a specific key in a key-value store') and preemptively scopes it against a listing tool: 'a single record, not a listing of all keys.' An agent can immediately tell this is a point lookup, not an enumeration.

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

Usage Guidelines3/5

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

It says when to use it ('when you need to retrieve a specific record (JSON, text, or binary)') and includes two concrete usage examples showing the store identifier formats. However, it never states when NOT to use it or names an alternative/sibling for enumeration, so the guidance is implied rather than comparative.

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

rowfeed--ai-search-visibility-trackerrowfeed/ai-search-visibility-trackerB
Destructive
Inspect

This tool calls the Actor "rowfeed/ai-search-visibility-tracker" and retrieves its output results. Actor description: Ask ChatGPT, Google AI Mode, Gemini and Perplexity your customers' questions and see if your brand is mentioned, in which position versus competitors, and which sources are cited. Full answer, brands and sources per prompt. Pay per answer.

NameRequiredDescriptionDefault
brandNoBrand name or domain (e.g. hubspot.com). A domain also counts as cited when the AI links to it. Example values: "HubSpot"HubSpot
enginesNoWhich AI assistants to ask: ChatGPT, Google AI Mode, Gemini and Perplexity. Each prompt x engine is one answer. Example values: ["chatgpt"]
promptsNoQuestions your customers ask AI assistants, up to 500. Each prompt is asked on each engine. Example values: ["What is the best CRM for a small business? Recommend 5 options."]
languageNoLanguage of the answer (English name). Example values: "English"English
locationNoCountry the question is asked from (English name, e.g. Germany). Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
competitorsNoOptional: up to 20 competitor names or domains to compare against. Example values: ["Pipedrive","Salesforce","Zoho CRM"]

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, openWorldHint=true and destructiveHint=true, so the safety profile is already known; the description's 'calls the Actor' and 'Pay per answer' add the useful cost model that annotations do not supply. However, the 'retrieves its output results' framing understates that this launches a live, billable, long-running run whose results must later be polled via get-actor-run. Rate limits and run lifecycle are left to the waitSecs schema text.

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

Conciseness3/5

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

Two sentences: a boilerplate wrapper sentence followed by the substantive Actor description. The marketing copy ('Full answer, brands and sources per prompt. Pay per answer.') is compact and the core capability is front-loaded, but the generic first sentence earns little and the fragment style is less scannable than a single well-formed lead.

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

Completeness3/5

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

With 7 fully documented parameters, an output schema, and explicit annotations, the description does not need to explain return values or field formats. What is missing is usage context: when this beats sibling visibility/SEO tools, and that live lookups require a paid plan. Adequate but with clear gaps for a paid, multi-engine research tool in a large sibling set.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (brand, engines, prompts, language, location, waitSecs, competitors) is already documented in detail in the input schema. The description adds only the conceptual framing of prompts x engines = one answer, without extra syntax or constraints. Baseline 3 applies 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.

Purpose4/5

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

The description states a specific verb and resource: ask the same customer questions across ChatGPT, Google AI Mode, Gemini and Perplexity and detect whether the brand is mentioned, its rank versus competitors, and which sources are cited. That is far more informative than the generic 'calls the Actor and retrieves its output results' opener. It never names the closest sibling (rowfeed--google-ai-overview-tracker), but the multi-engine scope still makes the tool identifiable.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no routing versus the many sibling rowfeed tools. 'Pay per answer' hints at cost but does not tell the agent when this tracker is the right choice over the single-engine Google AI Overview tracker or a plain SERP tool. The only exclusion-like signal, the paid-plan requirement, lives in the schema description rather than here.

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

rowfeed--amazon-product-trackerrowfeed/amazon-product-trackerB
Destructive
Inspect

This tool calls the Actor "rowfeed/amazon-product-tracker" and retrieves its output results. Actor description: Amazon search results and product details for any keyword or ASIN: rank, price, rating, reviews count, Best Sellers Rank, Amazon's Choice, sponsored flag. Licensed data, no blocked runs. $1 per 1,000 products.

NameRequiredDescriptionDefault
asinsNoOptional: ASINs or Amazon product URLs (up to 1,000) for full product details: price, discount, availability, rating, Best Sellers Rank, categories, variants, description.
sortByNoAmazon's sort order for the searches. Example values: "relevance"relevance
languageNoMarketplace language, e.g. English (United States), English (United Kingdom), German (Germany), French (France). Empty = the marketplace default. Example values: "English (United States)"English (United States)
locationNoCountry (and marketplace) as DataForSEO names it: United States, United Kingdom, Germany, France, Italy, Spain, Canada, India, Japan, Australia ... Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
trackAsinsNoOptional: your ASINs. Search rows get tracked: true when the product is yours, so you can follow your rank per keyword over time.
searchQueriesNoWhat to search Amazon for, up to 500 per run. Each search returns the products in Amazon's own order (organic and sponsored). Example values: ["wireless earbuds"]
maxProductsPerSearchNoHow many products per search, 10 to 700. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is structured. The description adds genuinely useful context the annotations do not: licensed data, no blocked runs, and $1 per 1,000 products pricing. However, it never says the call starts a billable Actor run, nor how waitSecs/nextStep polling behaves, leaving the cost-incurring behavior only half explained.

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

Conciseness4/5

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

Two sentences with the data scope front-loaded; the only waste is the boilerplate 'This tool calls the Actor ... and retrieves its output results' wrapper, which restates the obvious. It is short enough that no sentence is burdensome.

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

Completeness4/5

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

An output schema exists and the input schema is fully described, so return values and parameters need no explanation here. The description supplies pricing and licensing context appropriate for a paid scraping Actor; the main omission is run-lifecycle guidance (billing trigger, polling) for a tool that launches a run.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 8 parameters (asins, searchQueries, trackAsins, maxProductsPerSearch, waitSecs, sortBy, language, location) is already documented in the schema. The description adds no parameter-level meaning beyond echoing 'keyword or ASIN', so the baseline of 3 applies.

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

Purpose4/5

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

The description names a specific resource and verb: it calls the 'rowfeed/amazon-product-tracker' Actor and returns Amazon search results and product details, enumerating the fields (rank, price, rating, reviews count, BSR, Amazon's Choice, sponsored flag). An agent can tell this is the Amazon marketplace scraper rather than a generic SERP tool, though it never names a sibling to contrast with.

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

Usage Guidelines2/5

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

Usage is only implied by 'for any keyword or ASIN' — there is no statement of when to pick this over neighbors such as rowfeed--google-shopping-prices or rowfeed--google-serp-api, and no note that live lookups require a paid plan (that constraint lives only in the schema).

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

rowfeed--apple-app-store-scraperrowfeed/apple-app-store-scraperB
Destructive
Inspect

This tool calls the Actor "rowfeed/apple-app-store-scraper" and retrieves its output results. Actor description: App Store top charts (free, paid, grossing, iPad, new) per country and category, app search and app details: rank, developer, price, rating, ratings count, category, version, size, release date. $1 per 1,000 apps.

NameRequiredDescriptionDefault
appIdsNoOptional: specific apps to fetch (up to 1,000).
chartsNoWhich App Store charts to read (up to 100 apps each, in chart order). Leave empty to skip charts. Example values: ["top_free"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
countriesNoApp Store countries as 2-letter codes, up to 50. Example values: ["us"]
categoriesNoOptional: chart per category (Finance, Games, Health & Fitness ...). Empty = the overall chart.
maxPerChartNoApple's charts list up to 100 apps. Example values: 100
searchTermsNoOptional: App Store searches, in Apple's result order (ranked).
maxPerSearchNoUp to 200. Example values: 50
includeDescriptionNoAdd the app description and the latest release notes.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=true, so the safety profile is covered structurally. The description adds genuinely useful cost context ($1 per 1,000 apps) but omits the run lifecycle behavior — that the call may return before terminal state and require polling — which is a critical trait for an Actor-launching tool and is only discoverable in the waitSecs schema field.

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

Conciseness4/5

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

Two sentences, front-loaded with the resource and capabilities, no filler beyond the necessary Actor-invocation framing. Slightly stiff boilerplate opener ('This tool calls the Actor X and retrieves its output results') but it earns its place by clarifying the execution model.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the description covers the data domains plus pricing. However, for a nine-parameter actor-launching tool with a polling/nextStep model, the definition leaves the async execution and sibling routing unaddressed, leaving material gaps an agent must fill from the schema alone.

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

Parameters3/5

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

Schema description coverage is 100%, so all nine parameters (appIds, charts, countries, categories, maxPerChart, searchTerms, maxPerSearch, includeDescription, waitSecs) are already documented in the schema. The description echoes the high-level modes but adds no semantics about parameter interaction or defaults, so the baseline of 3 applies.

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

Purpose4/5

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

The actor description names concrete capabilities and resources: App Store top charts (free, paid, grossing, iPad, new), per country/category, app search, and app details, with an explicit field list (rank, developer, price, rating, etc.). The 'App Store' scope distinguishes it from google-play-scraper by name, but it never explicitly separates itself from app-reviews-scraper, which is the nearest ambiguous sibling.

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

Usage Guidelines3/5

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

Usage is only implied by the capability list — an agent can infer 'use this for App Store charts/search/details' but there is no explicit when-to-use statement, no exclusions, and no named alternative. Nothing tells the agent whether to pick this over google-play-scraper or app-reviews-scraper for overlapping intents.

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

rowfeed--app-reviews-scraperrowfeed/app-reviews-scraperA
Destructive
Inspect

This tool calls the Actor "rowfeed/app-reviews-scraper" and retrieves its output results. Actor description: Export Google Play and App Store reviews of any app: rating, title, text, date, app version, helpful votes and the developer's reply. Paste store links, package names or App Store ids, any country. Newest or most relevant first. About $0.10 per 1,000 reviews.

NameRequiredDescriptionDefault
appsNoOne app per line: a Google Play or App Store link, a package name (com.spotify.music) or an App Store id (324684580). Up to 500 per run. Example values: ["https://play.google.com/store/apps/details?id=com.spotify.music","https://apps.apple.com/us/app/spotify-music-and-podcasts/id324684580"]
sortByNoNewest first, or the store's most relevant / most helpful first. Example values: "newest"newest
countryNoStore country, e.g. "United States", "United Kingdom", "Germany". Reviews differ per country. Example values: "United States"United States
languageNoStore language, e.g. "English", "German". Example values: "English"English
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
newerThanNoLeave out older reviews: a date (2026-10-01) or an age (7 days, 2 weeks, 3 months). Left-out reviews are not charged. With "Newest first", no further reviews are fetched once the cutoff is reached, which makes scheduled monitoring cheap.
maxReviewsNoHow many reviews to get per app, in the chosen order. Up to 10,000 on Google Play; the App Store gives at most 500 per app and country. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare openWorldHint and destructiveHint, and the description adds genuinely useful context beyond them: cost (~$0.10 per 1,000 reviews), the paid-plan requirement for live lookups, and that filtered-out reviews are not charged. It does not explain why destructiveHint is set for what reads as a scrape, which is the one gap.

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

Conciseness4/5

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

Two sentences, front-loaded with the resource and followed by the field list and pricing. The opening 'calls the Actor ... and retrieves its output results' is boilerplate that could be trimmed, but nothing else is wasted.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers cost, plan requirements and the waitSecs polling behavior. For a 7-parameter, zero-required scraper this is close to complete, missing only explicit sibling differentiation.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents apps, sortBy, country, language, waitSecs, newerThan and maxReviews in detail. The description adds only the cost implication of newerThan, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource: it exports Google Play and App Store reviews with the exact fields returned (rating, title, text, date, version, votes, developer reply). It is clearly distinguishable from metadata scrapers like google-play-scraper, though it never explicitly contrasts itself with those siblings.

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

Usage Guidelines3/5

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

Usage is implied through 'Paste store links, package names or App Store ids, any country' and the sort options, which tells an agent how to invoke it. There is no explicit when-to-use/when-not guidance and no mention of the sibling app-store scrapers that might be alternatives.

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

rowfeed--career-site-jobs-scraperrowfeed/career-site-jobs-scraperB
Destructive
Inspect

This tool calls the Actor "rowfeed/career-site-jobs-scraper" and retrieves its output results. Actor description: Open jobs straight from company career sites on Greenhouse, Lever, Ashby, Workday and SmartRecruiters: title, team, location, remote, salary, posted date and apply link. Monitor mode returns only new jobs. $1 per 1,000 jobs.

NameRequiredDescriptionDefault
onlyNewNoReturn only jobs that earlier runs with the same career page and filters did not return. Schedule the Actor daily for a feed of new openings; you pay only for new jobs. Seen job ids are kept in a key-value store named career-site-jobs-seen in your account.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
companiesNoCareer page URLs on Greenhouse, Lever, Ashby, Workday or SmartRecruiters (up to 500), or short forms like greenhouse:stripe, lever:spotify, ashby:openai, smartrecruiters:BoschGroup. Example values: ["https://jobs.ashbyhq.com/openai","https://boards.greenhouse.io/stripe"]
locationsNoKeep only jobs whose location contains one of these (city, country or 'remote'). Empty = everywhere.
remoteOnlyNoKeep only jobs marked remote by the job board or with 'remote' in the location.
titleKeywordsNoKeep only jobs whose title contains at least one of these words (not case-sensitive). Empty = all jobs.
postedWithinDaysNoKeep only jobs published in the last N days. 0 = any date. (Workday shows dates only for the last 30 days.)
maxJobsPerCompanyNoUpper limit per career page after the filters. Default 100; raise it (up to 10,000) to get every open job. Example values: 100
includeDescriptionNoAdd the full job description as plain text (emails and phone numbers removed). Slower on Workday and SmartRecruiters, which need one extra request per job. No extra charge.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=true, so the description's main added value is the cost model ('$1 per 1,000 jobs') and the monitor-mode note. It never explains why destructiveHint is true or that runs may return early before completion, both of which an agent needs to interpret the safety profile correctly.

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

Conciseness3/5

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

The opening 'This tool calls the Actor ... and retrieves its output results' is framework boilerplate that carries no decision-relevant information, and the 'Actor description:' prefix is awkward. The substantive content that follows is dense and useful, but it is not front-loaded.

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

Completeness3/5

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

With an output schema present and full schema coverage, the definition is adequate: purpose, sources, cost and monitor mode are covered. Gaps remain around the destructiveHint implication and the early-return/polling behavior, which matter for an open-world actor with nine parameters.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the nine parameters is already documented in detail (including onlyNew's key-value store state and waitSecs polling). The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description names a concrete verb and resource (retrieves open jobs from company career sites) and enumerates the five supported boards (Greenhouse, Lever, Ashby, Workday, SmartRecruiters) plus the returned fields. That implicitly separates it from aggregator siblings like google-jobs-api, but the differentiation is never made explicit.

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

Usage Guidelines3/5

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

The only usage cue is 'Monitor mode returns only new jobs', which signals when to use the monitor behavior. There is no guidance on when to choose this over google-jobs-api or other job-related siblings, and no stated prerequisites for the company career page inputs.

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

rowfeed--competitor-keywordsrowfeed/competitor-keywordsC
Destructive
Inspect

This tool calls the Actor "rowfeed/competitor-keywords" and retrieves its output results. Actor description: See up to 10,000 Google keywords a website ranks for: position, URL, search volume, CPC, keyword difficulty, intent and estimated traffic, plus a visibility summary per domain. A Semrush, Ahrefs and SpyFu alternative for competitor keywords, no subscription.

NameRequiredDescriptionDefault
domainsNoWebsites to analyse, e.g. "semrush.com" or a full URL (scheme, www and path are stripped). Up to 50 per run. Example values: ["python.org"]
languageNoLanguage name, e.g. "English", "German". Leave empty for all languages. Example values: "English"English
locationNoCountry as Google names it, e.g. "United States", "United Kingdom", "Germany". Leave empty for all locations. Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxPositionNoOnly return keywords where the domain ranks at this Google position or better, e.g. 10 = first page only. 100 = all. The summary row then also counts only these positions. Example values: 100
maxKeywordsPerDomainNoHow many ranked keywords to return per domain, the ones bringing the most estimated traffic first. Up to 10,000. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

C2.9/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and openWorldHint=true, yet the description frames the tool as merely 'retrieves its output results', which reads like a safe read and does not explain that a run is started, that credits are consumed, or that live lookups require a paid plan (that caveat lives only in the input schema). The waitSecs/nextStep polling behavior is documented in the schema, not here. With the safety-relevant annotation unexplained, the description leaves real behavioral gaps.

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

Conciseness3/5

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

Two sentences, front-loaded with a boilerplate 'calls the Actor and retrieves its output results' clause that carries no information, followed by a genuinely informative but marketing-flavored feature list ('no subscription'). The useful content is present but wrapped in filler.

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

Completeness3/5

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

Return values are covered by the output schema and all parameters by the input schema, so the core is present. What is missing is the operational context an agent needs before invoking an open-world Actor: run lifecycle, credit cost, and the paid-plan requirement, none of which appear in the description itself.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters — including domains, language, location, maxPosition and maxKeywordsPerDomain — are already fully documented in the schema. The description adds no syntax, defaults, or interaction notes (e.g. that maxPosition also filters the summary row, which is covered in the schema). Baseline 3 applies 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.

Purpose4/5

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

The second sentence names a specific resource — Google keywords a website ranks for — and enumerates the returned metrics (position, URL, search volume, CPC, keyword difficulty, intent, estimated traffic) plus a per-domain visibility summary. That is enough to separate it from siblings like rowfeed--keyword-generator or rowfeed--keyword-search-volume, though it never names them explicitly. The first sentence ('calls the Actor ... and retrieves its output results') is generic wrapper boilerplate that adds nothing.

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

Usage Guidelines2/5

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

There is no statement of when to choose this tool over the roughly 40 sibling SEO tools, and no prerequisites or exclusions. The 'Semrush, Ahrefs and SpyFu alternative' line is positioning against external products, not guidance for the calling agent. The agent must infer the use case (domain-level competitive keyword research) entirely from the actor blurb.

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

rowfeed--da-pa-checkerrowfeed/da-pa-checkerB
Destructive
Inspect

This tool calls the Actor "rowfeed/da-pa-checker" and retrieves its output results. Actor description: Check domain authority (DA), page authority (PA) and spam score for up to 10,000 domains or URLs at once, plus referring domains. A bulk Moz-style DA checker and website authority checker on licensed backlink data.

NameRequiredDescriptionDefault
targetsNoDomains get domain authority, spam score and referring domains. Page URLs also get page authority (PA). Up to 10,000. Example values: ["apify.com","https://apify.com/store","bbc.co.uk"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.3/5.0
Behavior3/5

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

The first sentence discloses the important operational fact that this invokes an Actor run and returns its output rather than doing a direct lookup — useful context beyond the annotations. Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, and the description does not contradict them. However, the wait-for-terminal-state behavior, the possibility of a capped response with a pending run, and the paid-plan requirement all live in the schema text rather than in the description.

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

Conciseness3/5

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

Two sentences, no padding beyond the boilerplate 'This tool calls the Actor ... and retrieves its output results' wrapper that generic MCP-Actor tools carry. The substantive content is compact, but the leading sentence conveys little that the tool name and annotations do not already signal.

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

Completeness3/5

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

Because an output schema exists, the description need not explain return values, and the input schema carries the billing prerequisite and wait semantics. What remains missing is the differentiating context an agent needs when choosing among several SEO lookup siblings, which the description does not supply.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (targets and waitSecs) are fully documented in structured fields, including the DA vs. PA distinction and the 0–45 second cap. The description adds only the 'up to 10,000' scale figure, which the schema already states, so the baseline 3 is appropriate.

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

Purpose4/5

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

The description gives a specific verb and resource: check domain authority, page authority, and spam score for up to 10,000 domains or URLs, plus referring domains. The 'Moz-style bulk DA checker' framing makes the output metric clear. It never names the closest sibling (rowfeed--backlink-checker), so the distinction from that tool is left for the agent to infer.

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

Usage Guidelines3/5

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

Usage is only implied by the metric names: an agent can deduce that this is for bulk authority scoring rather than for link enumeration. There is no explicit when-to-use or when-not-to-use statement, and no alternatives are named, despite rowfeed--backlink-checker, rowfeed--seo-site-audit, and rowfeed--website-traffic-checker sharing the same neighborhood.

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

rowfeed--dataset-merge-deduprowfeed/dataset-merge-dedupA
Destructive
Inspect

This tool calls the Actor "rowfeed/dataset-merge-dedup" and retrieves its output results. Actor description: Merge Apify datasets, CSV and JSON files into one table and remove duplicates by any fields (url, email, website ...), keeping the first or newest row. Loose matching of case, spaces and URLs. $0.10 per 1,000 rows out.

NameRequiredDescriptionDefault
keepNo"Last" keeps the newest version of each row, e.g. when merging today's run into yesterday's. Example values: "first"first
rowsNoOr paste rows as a JSON array of objects. Example values: [{"company":"Acme","website":"https://acme.com/"},{"company":"ACME ","website":"http://www.acme.com"},{"company":"Globex","website":"https://globex.com"}]
fileUrlsNoPublic links to CSV (comma, semicolon or tab), JSON array or JSON Lines files, up to 50 MB each. Excel: save as CSV first.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
addSourceNoAdd _source to each row: which dataset, file or input the row came from.
datasetIdsNoDatasets to merge, e.g. the results of several runs of any Actor. Pick them or paste dataset IDs (Storage tab, or the run's Output).
looseMatchNoIgnore upper/lower case and extra spaces, and treat http/https, www. and a trailing slash in URLs as the same. Example values: true
dedupFieldsNoRows with the same values in these fields count as duplicates, e.g. url, email, website or title + city. Dots reach nested fields (address.city). Empty = only rows that are identical in every field. Example values: ["website"]
outputFieldsNoOptional: keep only these columns, in this order (dots flatten nested fields). Empty = all fields.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.8/5.0
Behavior4/5

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

Adds real context beyond the annotations: a concrete cost ($0.10 per 1,000 rows out) and the wait/cap behavior (0–45s, returns at the cap with current status, follow nextStep to poll, 0 = fire-and-forget). It does not clarify what the destructiveHint=true mutation actually is (presumably writing a new output dataset rather than mutating sources), which is the one notable omission.

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

Conciseness4/5

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

Front-loaded with the tool's identity and action, then the actor summary, then pricing — the important facts come first. The wrapper boilerplate ('This tool calls the Actor ... and retrieves its output results') is somewhat redundant, but the whole thing is two sentences with little waste.

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

Completeness3/5

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

Output schema and annotations exist, so return values and safety are covered elsewhere, and cost/wait semantics are described. However, for a 9-parameter tool with zero required fields and three alternative input sources, the description never explains the input combinations (datasets vs pasted rows vs file URLs) or that one is needed — a meaningful gap an agent would hit immediately.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already has a rich description, so the baseline is 3. The prose does reinforce the semantics of keep ('first or newest row'), looseMatch, and dedupFields at a high level, but adds no syntax or constraint detail the schema lacks.

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

Purpose5/5

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

Names a specific verb+resource ('Merge Apify datasets, CSV and JSON files into one table and remove duplicates') with the dedup key space (url, email, website) and the keep-first/newest policy. This is plainly distinguishable from every sibling, which are all scrapers/checkers or run-storage readers.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent can infer 'use this to combine datasets and dedupe' but there is no explicit when-to-use vs when-not, and no statement that at least one input source (datasetIds, rows, or fileUrls) must be supplied. The only routing hint is inside the waitSecs description, which points to get-actor-run for long runs.

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

rowfeed--google-ads-transparencyrowfeed/google-ads-transparencyB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-ads-transparency" and retrieves its output results. Actor description: Every ad a domain or advertiser runs on Google, YouTube, Play, Maps and Shopping, from the Google Ads Transparency Center: advertiser, format, preview image, first and last shown. Find advertisers by name, monitor new ads. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
dateToNoOnly ads shown on or before this date (YYYY-MM-DD).
onlyNewNoReturn only ads not returned in earlier runs with the same domain or advertiser and filters. Schedule it daily or weekly to track competitor ads.
targetsNoA domain (nike.com) or advertiser id (AR...) returns its ads. Anything else (e.g. 'Shopify') is searched as an advertiser name and returns matching advertisers with their ids and ad counts. Up to 500. Example values: ["nike.com"]
adFormatNoOnly ads in this format.
dateFromNoOnly ads shown on or after this date (YYYY-MM-DD).
locationNoCountry whose Transparency Center region to search, e.g. 'United States', 'United Kingdom', 'Germany'. Leave empty for all countries. Example values: "United States"United States
platformNoOnly ads shown on this platform.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxAdsPerTargetNoUp to 680, in steps of 40 (most recently shown first). Example values: 40

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=true, and the description adds useful context that the data is licensed and runs are not blocked. However, it never explains the destructiveHint=true flag (unusual for a read-style scraper) or the paid-plan requirement beyond the schema note, and it does not describe run lifecycle behavior beyond what waitSecs documents.

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

Conciseness3/5

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

The text is short and front-loaded, but the first sentence ('calls the Actor ... and retrieves its output results') is pure boilerplate that consumes roughly half the description without informing tool selection. The remaining actor blurb is dense and useful.

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

Completeness3/5

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

With an output schema present, return values need not be explained, and the actor blurb covers scope and data provenance. Still missing is guidance on the asynchronous run model (waitSecs cap, nextStep polling) and the paid-plan constraint, which are only buried in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including targets, onlyNew, and waitSecs is already documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific resource (Google Ads Transparency Center ads) and enumerates the returned fields (advertiser, format, preview image, first/last shown) plus the two use cases (find advertisers by name, monitor new ads). It is clear what the tool does, though the opening sentence is generic Actor-wrapper boilerplate that adds nothing.

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

Usage Guidelines3/5

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

Usage is only implied through phrases like 'Find advertisers by name, monitor new ads' and the schema's monitor-mode flag. There is no explicit guidance on when to pick this over siblings such as rowfeed--google-serp-api or rowfeed--google-shopping-prices, nor any mention of the get-actor-run/get-dataset-items follow-up path for long runs.

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

rowfeed--google-ai-overview-trackerrowfeed/google-ai-overview-trackerB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-ai-overview-tracker" and retrieves its output results. Actor description: Check which keywords show a Google AI Overview, get its full text and every cited source, and see whether your domains are cited or rank in the top 10. Any country, language and device. An AI Overview checker and GEO tracker for SEO teams.

NameRequiredDescriptionDefault
deviceNoSearch as a desktop or mobile user. Example values: "desktop"desktop
keywordsNoGoogle searches to check, one per line. Up to 1,000 per run. Example values: ["best crm for small business"]
languageNoGoogle interface language, e.g. "English", "German". Example values: "English"English
locationNoSearch from this country, e.g. "United States", "United Kingdom", "Germany". Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
trackDomainsNoDomains to look for: are they cited in the AI Overview, at which source position, and where do they rank in the top 10? Up to 20. Free. Example values: ["salesforce.com","hubspot.com"]

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and readOnlyHint=false, so the agent knows this is a stateful, open-world, cost-bearing operation. The description adds the proxy mechanic ("calls the Actor ... and retrieves its output results"), which clarifies that work runs asynchronously on Apify. It does not disclose cost implications, the wait/polling behavior, or that results arrive as an Actor run output rather than a direct answer.

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

Conciseness3/5

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

The opening sentence about calling the Actor is largely meta-boilerplate restating the tool name, and the genuinely useful capability detail is pushed into the second sentence. What remains is dense and free of filler, but the front-loading is poor for an agent scanning descriptions.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and all six parameters are fully documented in-schema with sensible defaults. What is missing is the routing context an agent needs in this crowded sibling set: no statement of how this differs from ai-search-visibility-tracker or google-serp-api, and no plan/cost prerequisite in the description itself.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter including waitSecs and trackDomains is documented in-schema, so the baseline is 3. The line "Any country, language and device" gestures at the location, language and device inputs but adds no syntax, format or constraint detail beyond what the schema already supplies.

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

Purpose4/5

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

The second sentence names a specific verb and resource chain: check which keywords trigger a Google AI Overview, extract its full text and every cited source, and test whether given domains are cited or rank top 10. That is far more concrete than the boilerplate opener about calling an Actor. It does not, however, distinguish this from the close sibling rowfeed--ai-search-visibility-tracker, which an agent could easily confuse it with.

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

Usage Guidelines2/5

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

Only an audience tag ("for SEO teams") hints at usage; there is no when-to-use, no when-not-to-use, and no reference to alternatives such as google-serp-api or ai-search-visibility-tracker. The one operationally critical condition — that live lookups require a paid Apify plan while the pre-filled example works free — appears only in the schema description, not here.

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

rowfeed--google-hotels-apirowfeed/google-hotels-apiB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-hotels-api" and retrieves its output results. Actor description: Google Hotels prices for any city and dates: hotel, stars, rating, reviews, price per night, discounts, and optional prices from every booking site (Booking.com, Expedia, the hotel's own site). Filters for stars, rating and price. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
adultsNoNumber of adult guests. Example values: 2
sortByNoOrder of the results.
checkInNoCheck-in date (YYYY-MM-DD). Empty = 30 days from today.
checkOutNoCheck-out date (YYYY-MM-DD). Empty = 2 nights after check-in. Up to 30 nights.
currencyNo3-letter currency code, e.g. USD, EUR, GBP. Example values: "USD"USD
hotelIdsNoOptional: hotel_id values from earlier results. Each returns its prices from every booking site for the dates above, without a search. Up to 200.
languageNoLanguage code of the results, e.g. en, de, fr. Example values: "en"en
locationNoCountry the search is made from (prices and booking sites can differ by country), e.g. "United States", "Germany". Example values: "United States"United States
minStarsNoOnly hotels with at least this many stars (2-5). 0 = any.
priceMaxNoIn the chosen currency.
priceMinNoIn the chosen currency.
searchesNoWhat you would type into Google Hotels, e.g. "hotels in paris" or "hotels near times square". Up to 100. Example values: ["hotels in new york"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxHotelsNo20 to 100, in steps of 20. Example values: 20
minRatingNoOnly hotels rated at least this.
bookingSitesNoAlso get each hotel's prices from every booking site Google shows (Booking.com, Expedia, Hotels.com, the hotel's own site ...). Adds one booking-prices row per hotel.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true, readOnlyHint=false and destructiveHint=true, so the safety profile is carried by structured data; the description does not contradict it. It adds one genuine behavioral claim — 'Licensed data, no blocked runs' — which is useful. It does not disclose that this is a long-running scrape run subject to waitSecs capping and nextStep polling, nor the paid-plan requirement, both of which live only in the schema text.

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

Conciseness3/5

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

Two sentences with no bloat, but the opening sentence about calling an Actor and retrieving output is framework boilerplate that does not earn its place; the substantive content is entirely in the second sentence, which is buried behind it rather than front-loaded.

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

Completeness3/5

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

An output schema exists and the input schema is fully documented, so the description need not explain return values. However, for a 16-parameter, open-world, long-running scrape tool marked destructive, the description omits cost/plan requirements and the async run-and-poll behavior, leaving meaningful gaps that only appear in the schema prose.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 16 parameters, including the non-obvious ones like hotelIds, bookingSites, maxHotels and waitSecs. The description only restates the filter concept ('Filters for stars, rating and price') and adds no semantics beyond the schema, which is the baseline case for a fully documented schema.

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

Purpose4/5

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

The second sentence names a specific resource and data set: Google Hotels prices for a city and dates, returning hotel, stars, rating, reviews, price per night, discounts, and optional booking-site prices, plus star/rating/price filters. That is concrete enough for an agent to distinguish it from siblings such as rowfeed--google-shopping-prices or rowfeed--tripadvisor-reviews-scraper. The first sentence is boilerplate boilerplate about calling an Actor and adds nothing, so it falls short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the description indicates this is for hotel price lookups with filters, and the schema hints that live lookups need a paid Apify plan. There is no explicit 'use this when' statement, no mention of when to prefer a sibling (e.g. Tripadvisor reviews for review depth), and no mention of the hotelIds path for booking-site-only lookups outside the schema.

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

rowfeed--google-images-apirowfeed/google-images-apiA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-images-api" and retrieves its output results. Actor description: Google Images API and image scraper: every image Google Images shows for a search, with the full-size image URL, thumbnail, title, the page it is on and its website. Up to 700 images per search, any country and language. $2 per 1,000 images.

NameRequiredDescriptionDefault
languageNoLanguage of the results (English name). Example values: "English"English
locationNoCountry (or city) the search is made from, e.g. United States, Germany, London,England,United Kingdom. Example values: "United States"United States
searchesNoWhat you would type into Google Images. Up to 500. An image found by several searches is returned (and charged) once. Example values: ["modern kitchen design"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxImagesNo1 to 700. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

The description adds real context beyond annotations: per-image pricing, the up-to-700-images ceiling per search, and the shape of the returned records. But annotations declare destructiveHint=true and readOnlyHint=false, and the description frames the tool as merely 'retrieves output results' without saying that invoking it starts a billable Actor run that consumes paid plan credits (that plan caveat sits in the schema, not here). The lifecycle detail lives in the waitSecs schema text rather than the description.

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

Conciseness4/5

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

Two sentences with no filler, and the operative content (what is returned and at what cost) is front-loaded. The opening 'This tool calls the Actor ... and retrieves its output results' is slightly boilerplate MCP-wrapper phrasing but still earns its place by identifying the execution model.

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

Completeness4/5

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

With a full input schema, an output schema, and annotations present, the description covers purpose, payload fields, volume ceiling, and cost, which is enough for correct invocation. The main omissions are the paid-plan prerequisite (present only in the schema description) and any polling/long-run behavior, which an agent would otherwise only discover after a capped waitSecs response.

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

Parameters3/5

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

Schema description coverage is 100% and waitSecs, searches, language, location and maxImages are all documented in-schema, so the schema carries the burden. The description corroborates scope ('up to 700 images per search, any country and language') but adds no new syntax or format meaning beyond that, which is the baseline-3 case.

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

Purpose4/5

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

The description names a specific verb (calls the Actor and retrieves its output) and a specific resource (Google Images results for a search), and the Actor blurb enumerates the returned fields (full-size URL, thumbnail, title, source page, website). It does not, however, distinguish this from closely related siblings such as rowfeed--google-serp-api or rowfeed--google-shopping-prices, so an agent must infer the split from the name and payload description alone.

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

Usage Guidelines3/5

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

Usage is only implied: 'every image Google Images shows for a search' tells the agent this is the image-retrieval option, and the '$2 per 1,000 images' line gives a cost signal. There is no explicit when-to-use/when-not statement and no named alternative (e.g., use google-serp-api for web results instead of images), so the agent gets context but no routing guidance.

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

rowfeed--google-jobs-apirowfeed/google-jobs-apiA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-jobs-api" and retrieves its output results. Actor description: Google Jobs listings for any search and location: title, employer, location, salary, contract type, posted date, source and apply link. Filters for date posted and job type, monitor mode for new jobs only. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
onlyNewNoReturn only jobs not returned in earlier runs with the same search, location and filters. Schedule it daily for job alerts.
queriesNoWhat you would type into Google, e.g. 'data analyst' or 'warehouse jobs'. Up to 500. Example values: ["data analyst"]
languageNoLanguage of the listings (English name). Example values: "English"English
locationNoCity, region or country in Google's format: 'City,Region,Country' or just 'United States'. Example values: "New York,New York,United States"New York,New York,United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
datePostedNoOnly jobs posted within this period.
employmentTypesNoOptional: only these job types.
maxJobsPerQueryNoUp to 200, in steps of 10. Example values: 50

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=true, so the safety profile of kicking off an external Actor run is communicated structurally. The description adds real context beyond that — 'Licensed data, no blocked runs' and monitor mode semantics — but omits the monetization constraint that the input schema mentions (live lookups need a paid Apify plan) and doesn't clarify that calling it starts a run and consumes credits.

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

Conciseness4/5

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

The lead-in 'This tool calls the Actor ... and retrieves its output results' is boilerplate that adds little, but the actor description that follows is dense and front-loaded with the useful capability and filter information. No sentence is redundant enough to be a real liability.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description covers capability, filters, and data-quality/licensing notes. The main gap is operational: the paid-plan requirement (visible only buried in the input schema description) and the relationship to waitSecs/get-actor-run polling are not surfaced here.

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

Parameters3/5

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

Schema description coverage is 100%, including waitSecs polling behavior and the onlyNew monitor explanation, so the schema already carries parameter meaning. The description only restates the filter/monitor capabilities at a high level and adds nothing about query limits, location format, or maxJobsPerQuery beyond what the schema documents. Baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb ('calls the Actor ... and retrieves its output results') and resource (Google Jobs listings), then enumerates the returned fields: title, employer, location, salary, contract type, posted date, source, apply link. An agent can tell this is a Google Jobs scraper rather than a hotels/maps/SERP tool, though it never explicitly contrasts with the closest sibling, rowfeed--career-site-jobs-scraper.

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

Usage Guidelines3/5

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

It implies usage through feature mentions ('Filters for date posted and job type, monitor mode for new jobs only') and the schema's onlyNew note about scheduling for job alerts, but it gives no explicit when-to-use/when-not-to-use guidance and never names an alternative tool. The agent must infer the routing decision.

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

rowfeed--google-maps-rank-trackerrowfeed/google-maps-rank-trackerB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-maps-rank-tracker" and retrieves its output results. Actor description: Local rank tracker for Google Maps: where your business ranks at every point of a geo-grid around it (3x3 to 9x9), the top 3 at each point, average rank, top-3 share and the competitors that beat you. Pay per point. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
zoomNoGoogle Maps zoom level used at each point (15 = a few streets). Example values: 15
centerNoCenter of the grid, e.g. "40.7580,-73.9855" (right-click the place in Google Maps to copy it). Leave empty to center on your business: give a location below and it is looked up first (counts as one point). Example values: "40.7580,-73.9855"40.7580,-73.9855
businessNoThe business to find at each point: its name as on Google Maps, its website domain (example.com), its place id (ChIJ...) or its CID. Example values: "New York Midtown Dental"New York Midtown Dental
gridSizeNoPoints per side: 3, 5, 7 or 9 (9, 25, 49 or 81 points). Example values: 5
keywordsNoWhat customers type into Google Maps, e.g. "dentist" or "plumber near me". Each keyword gets its own grid. Up to 20. Example values: ["dentist"]
languageNoLanguage of the results (English name). Example values: "English"English
locationNoCity, region or country where the business is, in Google format, e.g. "New York,New York,United States". Used only when the center is empty.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
spacingKmNoDistance between neighbouring points. 0.5-1 km for a city business, 2-5 km for a service area. Example values: 1

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds genuinely useful context beyond that: 'Pay per point' (cost model) and 'Licensed data, no blocked runs' (reliability). It does not explain why a rank lookup is flagged destructive, nor does it describe run lifecycle or polling, which the waitSecs parameter only partially covers.

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

Conciseness4/5

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

Two sentences, front-loaded with the invocation and result, followed by the actor's capability summary. No filler or repetition. The 'Actor description:' prefix is slightly mechanical but does not waste meaningful space.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the schema fully documents inputs. What remains thin is the operational picture: cost per point is mentioned but not quantified, and the relationship to sibling tools and to the run-polling tools (get-actor-run) is left implicit. Adequate but with clear gaps for a paid, long-running job.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the nine parameters is already documented in the schema, including the center/location interaction and the waitSecs polling behavior. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('calls the Actor rowfeed/google-maps-rank-tracker and retrieves its output') and the actor blurb specifies the deliverable: geo-grid rank positions, top-3 per point, average rank, top-3 share and competitors. That is far more concrete than a bare name restatement. It stops short of naming the sibling it is not (e.g. google-maps-scraper or google-maps-reviews-scraper), so an agent must infer the distinction from the grid/rank framing.

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

Usage Guidelines3/5

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

Usage is only implied: the grid/rank vocabulary signals 'use this to measure local ranking across a geo-grid', and 'Pay per point' hints at cost-sensitive use. There is no explicit when-to-use, when-not-to-use, or pointer to an alternative sibling such as google-maps-scraper for plain listing extraction. The agent has to derive the selection rule itself.

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

rowfeed--google-maps-reviews-scraperrowfeed/google-maps-reviews-scraperA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-maps-reviews-scraper" and retrieves its output results. Actor description: Export Google Maps reviews of any business: rating, full text, date, owner reply and review highlights, plus the place's rating and review count. Paste Maps links, place IDs or names. Newest, best or worst first. About $0.30 per 1,000 reviews.

NameRequiredDescriptionDefault
placesNoOne place per line: a Google Maps link (also maps.app.goo.gl share links), a place ID (ChIJ...), a CID, or the business name with its city, e.g. "Katz's Delicatessen, New York". Up to 500 per run. Example values: ["Katz's Delicatessen, New York"]
sortByNoWhich reviews come first: newest, most relevant (Google's default), highest or lowest rating. Example values: "newest"newest
languageNoGoogle interface language, e.g. "English", "German". Reviews keep their own language; Google's translation is in review_text when it differs. Example values: "English"English
locationNoUsed to find places given by name, e.g. "United States", "United Kingdom", "Germany". Links and IDs work anywhere. Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
newerThanNoLeave out older reviews: a date (2026-10-01) or an age (7 days, 2 weeks, 3 months). Left-out reviews are not charged. With "Newest first", no further reviews are fetched once the cutoff is reached, which makes scheduled monitoring cheap.
maxReviewsNoHow many reviews to get per place, in the chosen order. Up to 4,490. Places with fewer reviews only pay for what they have. Example values: 20
onlyWithTextNoLeave out star-only reviews that have no text. Left-out reviews are not charged.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, and the description does not explain or qualify that profile at all. It does add genuinely useful behavior beyond the annotations: pricing (~$0.30 per 1,000 reviews), the fact that filtered-out reviews are not charged, and the surface of returned data. Nothing is said about run duration, credit consumption on failed lookups, or what terminal results look like beyond the field list.

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

Conciseness4/5

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

Two sentences with no fluff, but the first one is MCP wrapper boilerplate ("calls the Actor ... and retrieves its output results") placed ahead of the actual purpose, so the useful content is not front-loaded. The second sentence packs purpose, inputs, sorting and pricing efficiently.

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

Completeness4/5

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

An output schema exists, so return-value documentation is unnecessary, and all eight parameters are fully described in the schema with defaults and bounds. For an open-world scraper that charges credits, the description covers cost and filtering economy; the only real gap is the missing guidance on which sibling scraper to pick and the paid-plan caveat being buried in the schema description.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the eight parameters is already documented in detail by the schema, including enum options for sortBy. The description adds only a broad statement of what can be passed as a place (links, IDs, names) and the per-1,000-review cost, which does not meaningfully extend the per-parameter semantics. Baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ("Export Google Maps reviews of any business") and enumerates the returned fields (rating, text, date, owner reply, highlights, place rating/count), which makes it clearly distinct from rowfeed--google-maps-scraper (place data) and rowfeed--google-maps-rank-tracker. It never explicitly names those siblings, so an agent must infer the boundary from the resource noun alone.

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

Usage Guidelines3/5

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

"Paste Maps links, place IDs or names" plus "Newest, best or worst first" gives input-level guidance and the cost note hints at scale. There is no when-to-use/when-not guidance versus the many sibling scrapers or the rank tracker, and no mention that live runs require a paid plan except inside the schema.

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

rowfeed--google-maps-scraperrowfeed/google-maps-scraperB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-maps-scraper" and retrieves its output results. Actor description: Google Maps scraper and Google Places API alternative: every business for a search with address, phone, website, rating, reviews, opening hours and categories. Up to 700 places per search. $2 per 1,000 places. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
zoomNoGoogle Maps zoom around the center: 12 = a city, 14 = a district, 16 = a few streets. Example values: 14
phoneNoFilter on the business phone listed on Google Maps. Example values: "any"any
centerNoSearch around exact coordinates instead of a location, e.g. "30.2672,-97.7431" (right-click a spot in Google Maps to copy it). Use with Zoom.
websiteNo"Only without a website" finds businesses that may need one. Example values: "any"any
languageNoLanguage of the results (English name), e.g. English, German, Spanish. Example values: "English"English
locationNoCity, region or country to search in, in Google format: "Austin,Texas,United States", "Berlin,Berlin,Germany", "France". Ignored when a center is given. Example values: "Austin,Texas,United States"Austin,Texas,United States
searchesNoWhat you would type into Google Maps, e.g. "dentist", "plumber" or "coffee shop in austin tx". Each search returns up to Max places. Up to 500. A business found by several searches is returned (and charged) once. Example values: ["dentist"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxPlacesNoUp to 700. Google Maps often has fewer for a narrow search or small town. Example values: 20
minRatingNoSkip businesses rated below this (0 = no filter). Skipped places are not charged.
minReviewsNoSkip businesses with fewer reviews (0 = no filter).

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the agent knows this launches a live, non-free run. The description does add genuinely useful behavior beyond that: explicit pricing at $2 per 1,000 places, a 700-result ceiling per search, and the reassurance of licensed data with no blocked runs. It omits the run lifecycle, however: nothing says the call returns at the waitSecs cap with a partial status and a nextStep to poll, and cost is framed as an advantage rather than as a warning tied to destructiveHint.

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

Conciseness3/5

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

The text is short but front-loaded with generic MCP boilerplate about calling an Actor and retrieving results, which conveys nothing the agent did not already know. The substantive content is a single run-on marketing sentence mixing data fields, per-search caps, price and a reliability claim, so the most decision-relevant facts are not surfaced first.

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

Completeness3/5

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

With an output schema present, the description need not explain returns, and the actor summary does cover the payload fields. But for an 11-parameter tool with destructiveHint=true and no required parameters, the definition should say what the charges accumulate against and how a long run is followed up; that lifecycle detail lives only in the waitSecs schema text. Sibling disambiguation is also missing despite four adjacent Maps-related tools.

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

Parameters3/5

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

Schema description coverage is 100% and all 11 parameters carry their own descriptions, including zoom granularity, center coordinates, the with/without enums for phone and website, and the minRating/minReviews skip rules. The description adds no parameter meaning beyond that, so the baseline 3 is the correct ceiling here.

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

Purpose4/5

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

The description names a specific verb and resource set: it scrapes Google Maps businesses for a search and returns address, phone, website, rating, reviews, opening hours and categories. That is far more informative than the generic wrapper sentence, and it distinguishes the tool from a plain Places lookup. It stops short of a 5 because it never differentiates itself from close siblings such as rowfeed--google-maps-reviews-scraper, rowfeed--google-maps-rank-tracker or rowfeed--google-hotels-api.

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

Usage Guidelines2/5

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

There is no when-to-use, when-not-to-use, or alternative-routing guidance anywhere in the description. The only comparative statement, "Google Places API alternative", points at an external product rather than at the sibling tools the agent must actually choose between. The agent is left to infer from the field list alone whether this is the right Maps tool for a reviews task or a ranking task.

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

rowfeed--google-news-monitorrowfeed/google-news-monitorA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-news-monitor" and retrieves its output results. Actor description: Google News articles for any search or topic, any country and language: title, source, publish time and the real publisher URL. Monitor mode returns only articles you have not seen yet. Pay per article.

NameRequiredDescriptionDefault
topicsNoGoogle News headline sections for the chosen edition. Optional, in addition to the queries.
editionNoWhich Google News edition to read, as country:language: US:en, GB:en, IN:en, DE:de, FR:fr, ES:es, BR:pt-419, JP:ja, NO:no ... Example values: "US:en"US:en
onlyNewNoReturn only articles that earlier runs with the same query, edition and time range did not return. Schedule the Actor (e.g. hourly) to get a clean feed of new articles; you pay only for new ones. Seen article ids are kept in a key-value store named google-news-monitor-seen in your account.
queriesNoWhat to search Google News for, up to 100 per run. Google News operators work: "exact phrase", -exclude, site:reuters.com, intitle:word, OR. Example values: ["OpenAI"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
timeRangeNoOnly articles published in this period (applies to search queries; topic headlines are always current). Example values: "past_24_hours"past_24_hours
resolveUrlsNoTurn Google News links into the real article URL on the publisher's site (url field). If Google does not give it, url is null and google_news_url still works. No extra charge. Example values: true
maxArticlesPerFeedNoGoogle News returns up to 100 articles per query or topic, newest first for short time ranges. Example values: 100

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true), the description discloses a per-article cost model and the monitor-mode dedupe behavior, which explains why the tool is not purely read-only (seen IDs persisted). It still does not describe run lifecycle or latency, but the waitSecs schema field covers that. No contradiction with annotations.

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

Conciseness4/5

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

Two sentences, front-loaded with the actor identity and then the substantive capability summary; nothing is redundant. The second sentence is dense but every clause (fields, monitor mode, pricing) carries information.

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

Completeness5/5

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

With 8 params, 100% schema coverage, annotations and an output schema, the remaining burden on the description is purpose, mode and cost, all of which are present. Return values need not be explained because an output schema exists, and polling behavior is documented in waitSecs.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents topics, edition, onlyNew, queries, waitSecs, timeRange, resolveUrls and maxArticlesPerFeed in detail. The description's phrases ('any search or topic', 'any country and language') only loosely map to those params and add no operator, format, or default guidance. Baseline 3 is appropriate.

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

Purpose4/5

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

The description names a specific resource (Google News articles) plus the dimensions that matter: query or topic, any country/language, returned fields (title, source, publish time, real publisher URL), and a monitor mode. It is clearly distinguishable from generic siblings like google-serp-api or google-trends-explorer. It stops short of naming a sibling for explicit contrast, so it is not a 5.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'any search or topic' plus 'monitor mode returns only articles you have not seen yet' tells an agent when monitoring applies. However, there is no explicit when-not guidance and no routing to alternatives such as google-serp-api for general web results or google-ai-overview-tracker for AI summaries.

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

rowfeed--google-play-scraperrowfeed/google-play-scraperA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-play-scraper" and retrieves its output results. Actor description: Google Play app data by package name or URL, in any country: exact install count, rating, ratings histogram, price, in-app purchases, ads, genre, version, last update, developer. $0.50 per 1,000 apps.

NameRequiredDescriptionDefault
appIdsNoThe package name is the id= part of the app's Google Play link. Up to 10,000 app/country pairs per run. Example values: ["com.spotify.music"]
languageNoLanguage of titles, genres and descriptions, e.g. en, de, fr, ja, pt-br. Example values: "en"en
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
countriesNoGoogle Play countries as 2-letter codes, up to 50. Each app is read once per country (price, currency and availability differ). Example values: ["us"]
includeDescriptionNoAdd the full app description (long text).

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true; the description neither contradicts nor explains that write-capable profile (it presumably writes dataset items). It does add value the annotations lack: an explicit cost model of $0.50 per 1,000 apps, which is genuine behavioral context for deciding whether to run a large batch.

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

Conciseness4/5

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

Two sentences, no filler beyond the boilerplate Actor wrapper clause, and the concrete data payload and price are stated up front. The opening sentence is redundant filler that delays the useful content slightly.

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

Completeness5/5

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

An output schema exists so return shape needs no explanation; the description supplies the payload domain, geographic scope, and pricing, which covers what an agent needs to decide and call correctly. The remaining omission (sibling routing) is captured under usage guidelines.

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

Parameters3/5

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

Schema description coverage is 100%, including detailed notes on waitSecs capping and country-level reads, so the schema carries the parameter burden. The description only echoes 'package name or URL, in any country' and adds no new constraints such as the 10,000 app/country pair ceiling or the 50-country limit.

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

Purpose4/5

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

The description names the Actor and enumerates the exact resource returned: install count, rating, ratings histogram, price, IAPs, ads, genre, version, last update, developer. Paired with the 'Google Play app data by package name or URL' phrasing it clearly distinguishes this from the App Store sibling, though the generic first sentence ('calls the Actor and retrieves its output results') wastes the strongest opening slot.

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

Usage Guidelines3/5

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

Usage is implied by the data scope ('package name or URL, in any country'), but there is no explicit when-to-use guidance and no routing to obvious alternatives such as rowfeed--apple-app-store-scraper for iOS or rowfeed--app-reviews-scraper for user reviews. The agent must infer boundaries from sibling names alone.

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

rowfeed--google-serp-apirowfeed/google-serp-apiA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-serp-api" and retrieves its output results. Actor description: Google search results for any query, country, language and device: organic results, ads, featured snippet, People Also Ask, AI overview when Google shows one, and local pack, plus your domain's rank. Licensed data, no blocked runs. $3 per 1,000 searches.

NameRequiredDescriptionDefault
deviceNoResults as seen on a desktop or a mobile phone. Example values: "desktop"desktop
queriesNoWhat to search Google for, up to 1,000 per run. Google operators (site:, "exact", -exclude) work. Example values: ["web scraping api"]
languageNoSearch language: English, German, French, Spanish ... Leave empty for the location's default. Example values: "English"English
locationNoCountry, region or city as Google names it: "United States", "United Kingdom", "Germany", "London,England,United Kingdom", "New York,New York,United States". Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
targetDomainNoe.g. example.com. Every row then gets target_position and target_url: where this domain ranks (subdomains count). Schedule the Actor daily for a rank tracker.
resultsPerQueryNo10 = first page. Up to 100. Each 10 results count as one search page in the price. Example values: 10

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.6/5.0
Behavior4/5

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

Beyond the annotations, the description discloses two behaviors an agent cannot infer from structured fields: licensed data means 'no blocked runs' (reliability expectation) and pricing of $3 per 1,000 searches (cost consequence of batch size). The annotations already declare openWorldHint and destructiveHint, so the remaining burden is lighter. It does not mention run-time/polling behavior, but waitSecs and nextStep are already documented 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.

Conciseness3/5

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

The second sentence (the actor description) is dense and useful, but the opening sentence is boilerplate that restates the tool name and mechanism without adding information. The useful content is placed second rather than front-loaded, and pricing is buried at the end.

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

Completeness4/5

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

With 7 optional parameters, full schema coverage, an output schema, and annotations supplied, the description only needs to convey what data comes back, its reliability, and its cost — all of which it does. Minor omissions such as per-run limits and polling behavior are already covered by schema fields, so the definition is close to complete for this complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (device, queries, language, location, waitSecs, targetDomain, resultsPerQuery) is already explained in the schema, including operator support and pricing implications of resultsPerQuery. The description adds no parameter-level meaning of its own, so the baseline 3 applies.

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

Purpose4/5

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

The actor description names the concrete resource and its contents: organic results, ads, featured snippet, People Also Ask, AI overview, local pack, and target-domain rank. That is far more specific than the wrapper sentence 'calls the Actor ... and retrieves its output results'. It does not differentiate from adjacent siblings such as rowfeed--google-ai-overview-tracker or rowfeed--google-images-api, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the scope line ('any query, country, language and device') tells an agent what situations fit, and the price note hints at cost-sensitive use. There is no explicit when-to-use, when-not-to-use, or pointer to a sibling for a narrower need (e.g. AI-overview-only or image-only tracking), which is a notable gap given ~40 sibling scrapers.

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

rowfeed--google-sheets-exportrowfeed/google-sheets-exportA
Destructive
Inspect

This tool calls the Actor "rowfeed/google-sheets-export" and retrieves its output results. Actor description: Send Apify datasets, CSV and JSON files to any Google Sheet: share the sheet with our export account, no OAuth. Append or replace, skip rows already in the sheet, new columns added. $0.05 per 1,000 rows.

NameRequiredDescriptionDefault
modeNoAppend keeps what is in the tab and adds new rows below. Replace clears the tab first (never when there is nothing to write). Example values: "append"append
rowsNoOr paste rows as a JSON array of objects.
columnsNoOptional: export only these columns, in this order. Nested fields are columns with dots (address.city).
fileUrlsNoPublic links to CSV, JSON or JSON Lines files (up to 20 MB each).
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
sheetNameNoTab (worksheet) to write to. Created if it does not exist. Empty = the first tab.
datasetIdsNoDatasets to export, e.g. a run's results. In an integration (run another Actor, then this one) use {{resource.defaultDatasetId}}.
spreadsheetNoLink to your Google Sheet. Before the first run: open the sheet, click Share and add the export account (shown in the README and in the run log) as Editor. No Google login or OAuth needed.
skipDuplicatesByNoE.g. url or email: rows whose value is already in the sheet (or earlier in this export) are skipped and not charged. Ideal for daily runs that add only new results.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.6/5.0
Behavior4/5

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

The annotations already flag destructiveHint=true and openWorldHint=true, but the description adds real context beyond them: the sheet must be shared with the export account as Editor before the first run, no OAuth is required, replace clears the tab first (never when there is nothing to write), skipped duplicate rows are not charged, and pricing is $0.05 per 1,000 rows. Auth prerequisite and cost disclosure are exactly the kind of behavior the agent cannot infer from the schema. It stops short of describing failure modes or what the run log returns, which the output schema partly covers.

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

Conciseness3/5

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

The second sentence is dense and well packed, but the first sentence is boilerplate that restates the tool name and mischaracterizes the operation as output retrieval. The most useful fact for a first-time caller, the mandatory sheet-sharing step, is buried mid-sentence rather than front-loaded.

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

Completeness4/5

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

For a nine-parameter mutation tool with annotations and an output schema, the description covers the critical missing pieces: the Editor-sharing prerequisite, no-OAuth model, destructive replace semantics, dedup cost behavior, and per-row pricing. The waitSecs/get-actor-run polling flow and response shape are adequately handled by the schema and output schema, so their absence from the description is minor.

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

Parameters3/5

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

Schema description coverage is 100%, so all nine parameters, including the mode enum, waitSecs polling cap and skipDuplicatesBy semantics, are already documented inline. The description reinforces append vs replace and the duplicate-skipping behavior but adds no syntax, format, or interaction detail beyond what the schema states. 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.

Purpose4/5

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

The actor description states a specific verb and resource: send Apify datasets, CSV and JSON files to any Google Sheet, with append/replace modes. It is clearly distinguishable from ingestion siblings like get-dataset-items or rowfeed--dataset-merge-dedup. The opening boilerplate ('calls the Actor ... retrieves its output results') is generic and slightly misdescribes the tool as a retrieval wrapper rather than a write-to-Sheets operation.

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

Usage Guidelines3/5

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

Usage is implied by the resource pairing (Apify dataset -> Google Sheet) and by the enumerated modes, but there is no explicit 'use this when X, not Y' guidance. Nothing tells the agent when to prefer get-dataset-items or dataset-merge-dedup instead, and no prerequisites beyond the sharing step are given. Adequate but clearly gapped.

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

rowfeed--google-shopping-pricesrowfeed/google-shopping-pricesB
Destructive
Inspect

This tool calls the Actor "rowfeed/google-shopping-prices" and retrieves its output results. Actor description: Google Shopping results for any product search in any country: price, old price and discount, seller, rating, ratings count, delivery and rank. Track your own or competitors' shops. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
sortByNoGoogle Shopping sort order. Example values: "relevance"relevance
languageNoSearch language: English, German, French ... Example values: "English"English
locationNoCountry, region or city as Google names it: United States, United Kingdom, Germany, France, Australia ... Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
trackSellersNoShop names or domains. Rows from a matching seller get tracked: true, so you can follow your own or competitors' prices and positions.
searchQueriesNoWhat to search Google Shopping for, up to 500 per run. Example values: ["wireless earbuds"]
maxProductsPerSearchNoHow many products per search, 10 to 120. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the description is not the sole source of the safety profile, and it correctly frames the tool as an Actor wrapper that both triggers a run and fetches results. It adds no cost/credit-consumption warning, no mention of run lifecycle or polling via nextStep/get-actor-run, and no note that each call spins up a billable run — meaningful gaps for a tool flagged destructive. It does not contradict the annotations, so no contradiction is flagged.

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

Conciseness4/5

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

Two compact sentences, front-loaded with what the tool does, followed by the Actor's value proposition. The framing sentence 'This tool calls the Actor ... and retrieves its output results' is boilerplate but still informative, and nothing is padded.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the output fields are summarized adequately. However, for a multi-parameter, billable, open-world scraper, the description omits the paid-plan requirement, the run/poll behavior at waitSecs cap, and any routing guidance versus sibling Actor tools, leaving it only minimally complete.

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

Parameters3/5

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

Schema description coverage is 100%, so all 7 parameters (sort order, language, location, waitSecs, trackSellers, searchQueries, maxProductsPerSearch) are already documented in the schema. The description adds no additional meaning about parameter interaction, defaults, or limits, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific mechanism (calls the 'rowfeed/google-shopping-prices' Actor and returns its output) and the Actor summary enumerates the concrete output fields: price, old price and discount, seller, rating, ratings count, delivery and rank. It clearly distinguishes this as a Google Shopping price-scraping tool, though it never explicitly contrasts itself with close siblings like rowfeed--amazon-product-tracker or rowfeed--google-serp-api.

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

Usage Guidelines3/5

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

Usage is only implied through the line 'Track your own or competitors' shops,' which hints at the price-monitoring use case without saying when to pick this tool over sibling scrapers. There are no exclusions, no prerequisites, and no alternatives named; the key operational caveat (paid plan required, free plan only works with the pre-filled example) lives solely in the schema description.

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

rowfeed--keyword-generatorrowfeed/keyword-generatorC
Destructive
Inspect

This tool calls the Actor "rowfeed/keyword-generator" and retrieves its output results. Actor description: Generate hundreds of long-tail keywords per keyword from what Google, YouTube and Bing suggest in the search box, expanded a-z, 0-9 and with question words. Any country and language. A keyword tool, Google autocomplete API and AnswerThePublic alternative.

NameRequiredDescriptionDefault
expandNonone: only the keyword itself (about 10 suggestions). alphabet: also keyword + a-z and 0-9 (about 300 long-tail suggestions). questions: also how/what/why... + keyword and keyword + for/with/vs... all: alphabet and questions. Example values: "alphabet"alphabet
countryNoTwo-letter country code, e.g. us, gb, de, fr, in. Example values: "us"us
sourcesNoWhose autocomplete to read: Google, YouTube and/or Bing. Example values: ["google"]
keywordsNoKeywords to get suggestions for, one per line. Up to 1,000 per run. Example values: ["running shoes"]
languageNoTwo-letter language code, e.g. en, de, fr, es. Example values: "en"en
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxSuggestionsPerKeywordNoStop after this many unique suggestions per keyword and search box. 0 = all.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare openWorldHint=true, readOnlyHint=false and destructiveHint=true, which is unusual for what is essentially a read-only keyword scrape. The description adds nothing beyond the Actor's marketing blurb: no note on run duration, cost/credit usage, rate limits, or why a non-destructive scrape is marked destructive. It repeats 'calls the Actor and retrieves its output results' without explaining the async wait/poll behavior described only in the waitSecs schema field.

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

Conciseness3/5

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

Two sentences, front-loaded with the wrapper boilerplate ('This tool calls the Actor ... and retrieves its output results'), which carries no information for the caller. The second sentence is a pasted Actor blurb with promotional phrasing ('Generate hundreds of...', 'AnswerThePublic alternative'). Short, but a meaningful share of the text doesn't earn its place.

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

Completeness3/5

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

The presence of an output schema and 100% schema coverage means return shape and parameters needn't be re-explained. What is missing is sibling differentiation in a crowded keyword-tool family and any behavior around run duration or cost. Adequate but with clear gaps for a tool an agent must choose among 30+ alternatives.

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

Parameters3/5

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

Schema description coverage is 100%, including detailed enum semantics for expand and the waitSecs polling behavior, so the schema carries the parameter burden. The description itself says nothing about any of the 7 parameters. Baseline 3 applies when the schema is this rich.

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

Purpose4/5

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

The description states a concrete verb and resource via the embedded Actor summary: generate long-tail keywords from Google/YouTube/Bing autocomplete, expanded a-z/0-9 and question words, per country/language. That is specific enough for an agent to know what comes back. It never distinguishes this from sibling keyword tools like rowfeed--keyword-search-volume or rowfeed--competitor-keywords, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no mention of the keyword-related siblings. The phrase 'AnswerThePublic alternative' hints at the use case but doesn't route an agent between this and competitor-keywords or keyword-search-volume. The agent must infer selection from the tool name alone.

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

rowfeed--keyword-search-volumerowfeed/keyword-search-volumeB
Destructive
Inspect

This tool calls the Actor "rowfeed/keyword-search-volume" and retrieves its output results. Actor description: Keyword research tool and Keyword Planner alternative, no SEO subscription: bulk Google and Bing search volume, CPC, competition and 12-month trend, keyword difficulty, search intent and AI search volume (ChatGPT), or keyword ideas from seed words. No per-keyword fee for keywords without data.

NameRequiredDescriptionDefault
modeNo"Search volume" returns one row per keyword you enter. "Keyword ideas" returns related keywords Google Ads suggests for your seeds, sorted by search volume. Example values: "volume"volume
keywordsNoIn "Search volume" mode: the keywords to measure (thousands are fine; looked up 1,000 at a time). In "Keyword ideas" mode: seed words (up to 20 per lookup). Max 80 characters and 10 words each. Google Ads does not accept symbols like ! @ % , * ( ) or emoji, so such keywords are skipped with a warning row. Example values: ["web scraping","price tracking","keyword research","seo tools","lead generation"]
languageNoLanguage name, e.g. "English", "German", "Spanish". Codes (de, fr, sk) and native names (Deutsch, Slovenčina) work too. Leave empty for all languages. Example values: "English"English
locationNoCountry, region or city as Google Ads names it, e.g. "United States", "United Kingdom", "Germany", "London,England,United Kingdom". Leave empty for worldwide (each batch then counts as 4 lookups, $0.16, instead of 1). Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxResultsNoKeyword ideas mode only: stop after this many keyword rows (Google Ads can suggest up to 20,000 per lookup). Example values: 500
searchEngineNoSearch volume from Google (Google Ads data), Bing (Bing Ads data) or both. Keyword ideas are Google only. A Bing lookup counts as 3 lookups. Example values: "google"google
includeDifficultyNoAlso add keyword difficulty (0-100, how hard it is to rank in Google top 10) and search intent (informational, commercial, transactional, navigational) to every Google keyword with data. +2 lookups ($0.08) per started 100 keywords.
includeAiSearchVolumeNoAlso add AI search volume: how often each keyword is asked in AI assistants such as ChatGPT per month, with a 12-month series (Google keywords with data). +1 lookup ($0.04) per started 100 keywords.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already flag readOnlyHint=false, openWorldHint=true and destructiveHint=true, so the agent knows this is a billable, external, state-changing run rather than a pure read. The description adds one useful behavioral fact — 'No per-keyword fee for keywords without data' — but omits the per-lookup credit consumption, the paid-plan requirement, and the wait/cap/poll behavior that govern how results arrive. It also frames the tool primarily as 'retrieves its output results', which understates the cost-incurring run the annotations imply.

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

Conciseness4/5

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

Two sentences, the first of which is a generic wrapper ('This tool calls the Actor ... and retrieves its output results'), with the substantive content in the Actor summary. The feature enumeration is long but dense with selection-relevant facts — volume, CPC, difficulty, intent, AI volume, ideas — with no filler.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and all parameters are fully described in the schema. What is still missing from the description is sibling routing (keyword-generator, competitor-keywords), the paid-plan/credit-cost reality of a run, and the polling behavior when waitSecs caps out — meaningful gaps for a billable 9-parameter Actor.

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

Parameters3/5

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

Schema description coverage is 100%, so every one of the 9 parameters (including mode-specific semantics, maxResults scope, and per-option cost multipliers) is already documented in the schema. The description adds no parameter meaning beyond that. Baseline 3 applies 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.

Purpose4/5

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

Specific verb and resource plus a full feature inventory, but no sibling differentiation.

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

Usage Guidelines3/5

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

Usage is only implied through the feature list: measure volume for known keywords, or generate ideas from seeds. The volume-vs-ideas routing is spelled out only inside the 'mode' schema property, not in the description. There is no statement of when to prefer this tool over the keyword-generator or competitor-keywords siblings.

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

rowfeed--pagespeed-insights-apirowfeed/pagespeed-insights-apiB
Destructive
Inspect

This tool calls the Actor "rowfeed/pagespeed-insights-api" and retrieves its output results. Actor description: Run Google PageSpeed Insights on a list of URLs: Lighthouse performance, accessibility, best-practices and SEO scores, LCP, CLS, TBT and INP, real-user Chrome data, Core Web Vitals pass/fail and the top slow-downs. Mobile and desktop.

NameRequiredDescriptionDefault
urlsNoWeb pages to test, e.g. https://example.com/ or example.com/pricing. Up to 1,000 per run. Each page is tested once per device. Example values: ["https://apify.com/"]
deviceNoTest as a mobile phone (what Google ranks on), a desktop computer, or both (two rows per page). Example values: "mobile"mobile
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already state readOnlyHint=false, openWorldHint=true and destructiveHint=true, so the agent knows this creates external state; the description does not contradict that and adds the metric set produced. However, it does not disclose that this kicks off an Actor run that may exceed the wait, that polling via nextStep/get-actor-run may be required, or that live lookups need a paid plan — those facts live only in the schema's waitSecs and top-level description fields, not here.

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

Conciseness4/5

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

Two sentences, with the actual capability front-loaded in the second. Efficient overall, though the first sentence is pure template boilerplate restating the tool name and could be cut without loss.

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

Completeness4/5

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

With only three optional parameters, full schema coverage and an output schema, the description need not explain return values, and it does cover what the analysis measures. The main omission is asynchronous run behavior and cost/plan requirements, which matter for an open-world Actor invocation but are covered elsewhere in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the schema already explains `urls`, `device` (with enum) and `waitSecs` including the 0–45 cap and fire-and-forget behavior. The description's mention of 'a list of URLs' and 'Mobile and desktop' lightly mirrors two parameters but adds no syntax, limits or defaults beyond what the schema provides.

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

Purpose4/5

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

The second sentence names a specific analysis (Google PageSpeed Insights on a list of URLs) and enumerates the concrete outputs: Lighthouse performance, accessibility, best-practices and SEO scores, LCP, CLS, TBT, INP, real-user Chrome data and Core Web Vitals pass/fail. That is enough to distinguish it from the purely technical checker siblings. The opening sentence ('calls the Actor ... and retrieves its output results') is generic boilerplate that adds no specificity.

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

Usage Guidelines2/5

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

There is no guidance on when to pick this over the many adjacent SEO siblings (rowfeed--seo-site-audit, rowfeed--google-serp-api, rowfeed--website-technology-checker), and no stated prerequisites. The only situational cue is the implicit 'list of URLs' + mobile/desktop framing, which an agent must infer.

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

rowfeed--pdf-table-extractorrowfeed/pdf-table-extractorA
Destructive
Inspect

This tool calls the Actor "rowfeed/pdf-table-extractor" and retrieves its output results. Actor description: Convert PDF tables to Excel, CSV and JSON: bank statements, invoices, price lists and reports. Upload PDFs or paste links; get every table as rows plus one Excel file per PDF. Finds ruled and unruled tables. $3 per 1,000 pages with tables + $0.10 per 1,000 pages read.

NameRequiredDescriptionDefault
modeNoAuto reads tables drawn with lines, and on pages without them finds tables by how the words line up (bank statements, price lists). Lines only or Aligned text only force one method. Example values: "auto"auto
pdfsNoUpload PDFs or paste links to them (one per line): bank statements, invoices, price lists, reports. Up to 200 per run, 50 MB each. Example values: ["https://raw.githubusercontent.com/kristerkb-pixel/rowfeed-seo-mcp/main/examples/bank-statement-example.pdf"]
lastPageNoLast page to read. 0 = to the end.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
firstPageNoFirst page to read (1 = the first page). 0 = from the start.
maxPagesPerPdfNoRead at most this many pages of each PDF. Each page read costs $0.0001; pages with tables $0.003 more. Example values: 100
firstRowIsHeaderNoUse each table's first row as column names. Off: columns are col_1, col_2, ... and the first row is a data row. Example values: true

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A4/5.0
Behavior3/5

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

Adds genuinely useful behavior beyond the annotations: per-page pricing ($3/1,000 pages with tables + $0.10/1,000 pages read) and the output shape (rows plus one Excel file per PDF). However, annotations declare destructiveHint=true and the description never explains what that means here — an agent could read that as file deletion. Cost is disclosed; the destructive flag is left dangling.

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

Conciseness4/5

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

The first sentence ('calls the Actor ... and retrieves its output results') is near-boilerplate inherited from the wrapper framing, but the Actor description that follows is dense and front-loads the capability, then inputs, then outputs, then price. Little waste beyond the opener.

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

Completeness5/5

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

Output schema exists and all seven parameters are fully described in the schema, including the waitSecs polling/nextStep behavior, so the description only needs to establish capability, input options, cost and output format — all present. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's pricing sentence loosely corresponds to maxPagesPerPdf and the table-finder sentence to mode, but the schema already documents both in more detail (including cost per page), so little unique meaning is added.

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

Purpose5/5

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

States a specific verb and resource: convert PDF tables to Excel, CSV and JSON, with named input forms (PDFs or links) and named table-finding modes ('Finds ruled and unruled tables'). Clearly distinguishable from every listed sibling, all of which are scrapers/trackers rather than document converters.

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

Usage Guidelines4/5

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

Gives concrete use-case context — bank statements, invoices, price lists, reports — and both input routes (upload vs paste links), which tells an agent when this is the right tool. It stops short of explicit when-not-to-use guidance or naming an alternative for non-PDF documents.

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

rowfeed--redirect-checkerrowfeed/redirect-checkerA
Destructive
Inspect

This tool calls the Actor "rowfeed/redirect-checker" and retrieves its output results. Actor description: Check thousands of URLs: HTTP status, every redirect hop, final URL, 301 or 302, redirect loops, dead links and response time. For SEO migrations and link audits. $0.10 per 1,000 URLs, invalid addresses free.

NameRequiredDescriptionDefault
urlsNoThe addresses to check, up to 50,000 per run. Without http:// or https://, https:// is used. Example values: ["http://apify.com","https://apify.com/store","https://www.iana.org/domains/example"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
onlyProblemsNoLeave out addresses that answer 200 directly. Only delivered rows are charged.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the description only needs to add context. It does add a real behavioral trait — the cost model ($0.10 per 1,000 URLs, invalid addresses free) — which matters for a pay-per-run Actor. However, it says nothing about what "destructive" means here, about run duration for 50,000-URL batches, or about the polling handoff, so the added context is thin.

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

Conciseness4/5

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

Two sentences, front-loaded with the capability and then the use case and price; nothing is buried. The opening boilerplate "This tool calls the Actor ... and retrieves its output results" is filler that could be dropped without loss.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the schema covers all parameters including the async polling escape hatch. What remains missing is sibling differentiation against the other link/redirect checking tools, which is the one thing an agent cannot derive from structured fields.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (urls, waitSecs, onlyProblems) are already fully documented in the schema, including defaults, the 0–45 range and the nextStep polling hint. The description adds no per-parameter meaning beyond a rough scale hint ("thousands of URLs"), which is baseline behavior when the schema carries the load.

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

Purpose4/5

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

The description names a concrete verb and resource — checking URLs for HTTP status, every redirect hop, final URL, 301/302 classification, redirect loops, dead links and response time — so an agent knows exactly what it produces. The only gap is that it never distinguishes itself from close siblings such as rowfeed--broken-link-checker or rowfeed--backlink-checker, which cover overlapping territory.

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

Usage Guidelines3/5

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

"For SEO migrations and link audits" gives a use context, which is more than nothing. But there is no explicit when-not guidance and no named alternative, so an agent choosing between this and broken-link-checker or seo-site-audit must infer the boundary from the sibling names alone.

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

rowfeed--seo-site-auditrowfeed/seo-site-auditB
Destructive
Inspect

This tool calls the Actor "rowfeed/seo-site-audit" and retrieves its output results. Actor description: Crawl a website and audit every page: title and meta description, H1, canonical, noindex, word count, images without alt, broken links, redirects and slow pages, with issue codes, a 0-100 SEO score per page and duplicate titles across the site. Plain HTTP, robots.txt respected.

NameRequiredDescriptionDefault
maxPagesNoHow many pages of each site are audited. Each audited page is one charged event. Example values: 30
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
startUrlsNoStart page of each site, e.g. https://example.com/. Pages on the same domain are followed from there. Example values: ["https://www.scrapethissite.com/pages/"]
maxLinksPerSiteNoUpper limit on extra URLs checked for broken links per site. Example values: 2000
checkBrokenLinksNoAlso check every link and image the pages point to (other sites, images, pages beyond the limit) and list broken ones per page. Each extra URL checked is one charged event. Example values: true

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety bar is lower. The description adds genuinely useful behavioral context that annotations cannot convey: plain HTTP fetches, robots.txt respected, and same-domain crawling. It does not address the notable tension that a crawl-and-read operation is annotated destructive, nor does it mention cost/runtime behavior (charged per audited page, waitSecs capping) that affects how an agent should call it.

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

Conciseness4/5

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

Two sentences: a thin wrapper preamble followed by a dense, front-loaded capability sentence. The enumeration of audited attributes is long but each item earns its place by advertising a distinct output dimension. Minor waste in the 'This tool calls the Actor...' boilerplate.

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

Completeness3/5

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

An output schema exists and the input schema is fully described, so return values and parameters need no explanation here. What is missing is caller-relevant context an agent needs before invoking: that runs can be long and are capped by waitSecs with a nextStep follow-up, and that each audited page/checked URL is a billed event. Without that, an agent could fire this expecting an instant cheap result.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter — maxPages, startUrls, maxLinksPerSite, checkBrokenLinks, waitSecs — is fully documented in the schema including billing implications and the nextStep polling pattern. The description adds no parameter-level meaning beyond the schema, which is the correct baseline of 3.

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

Purpose4/5

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

The description names a concrete verb and scope — crawl a website and audit every listed page attribute (title, meta, H1, canonical, noindex, word count, alt text, broken links, redirects, slow pages) with issue codes and a 0-100 score. That is materially more specific than the sibling rowfeed--broken-link-checker, which covers only links. It stops short of an explicit 'use this instead of X' distinction, so it is clear but not sibling-differentiating at the top level.

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

Usage Guidelines3/5

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

Usage is implied by the enumerated audit dimensions: it is the site-wide SEO audit tool rather than the single-purpose backlink or broken-link checkers. However, the description never states when to choose it over rowfeed--broken-link-checker or rowfeed--backlink-checker, nor when a full crawl is overkill. Guidance is inferable but unstated.

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

rowfeed--shopify-store-listrowfeed/shopify-store-listB
Destructive
Inspect

This tool calls the Actor "rowfeed/shopify-store-list" and retrieves its output results. Actor description: Lists of websites that use Shopify, WooCommerce, Klaviyo or any of 7,000+ technologies, filtered by country, language and domain rank, with each site's full tech stack. A BuiltWith alternative with no personal data.

NameRequiredDescriptionDefault
languageNoTwo-letter language code of the website's content, e.g. en, de, fr. Leave empty for any language.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
countriesNoTwo-letter country codes, e.g. US, GB, DE, CA, AU. A website matches any of them. Leave empty for all countries. Up to 50. Example values: ["US"]
maxResultsNoHow many websites to return, strongest domains first. Up to 10,000 per run. Example values: 20
technologiesNoTechnology names, e.g. "Shopify", "WooCommerce", "Magento", "Klaviyo", "Stripe", "WordPress", "HubSpot". With several, only websites using ALL of them are listed (e.g. Shopify + Klaviyo). Up to 10. Case does not matter; a misspelt name gets suggestions and costs only the run start. Example values: ["Shopify"]
minDomainRankNoOnly websites with at least this domain rank (0-1000, higher = stronger site with more backlinks). 0 = no limit.
crawledWithinDaysNoOnly websites whose technologies were seen in the last N days, so closed and moved stores drop out. 0 = no limit. Example values: 180

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

The description discloses the run lifecycle in a minimal way ('calls the Actor and retrieves its output results'), which is consistent with the annotations. However, it never explains why destructiveHint is true (a paid, billable Actor run), nor that live lookups require a paid Apify plan — that constraint only appears buried in the schema's top-level description. No contradiction, but meaningful behavioral context is left to other fields.

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

Conciseness4/5

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

Only two sentences and the substance is front-loaded after a short wrapper clause. The wrapper phrase 'This tool calls the Actor "..." and retrieves its output results' is boilerplate that adds little, and the closing 'A BuiltWith alternative with no personal data' is promotional, but overall the text is compact rather than padded.

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

Completeness3/5

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

With 7 optional parameters, full schema coverage, an output schema and annotations, the description covers the core capability adequately. What it omits — the paid-plan requirement, per-run cost implications, and the polling behavior — is partially recoverable from the waitSecs schema text but is not surfaced where an agent would look for scope and risk.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter (language, countries, technologies, minDomainRank, maxResults, crawledWithinDays, waitSecs) documented including the AND semantics for multiple technologies. The description adds nothing about parameters beyond what the schema already provides, so the baseline 3 applies.

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

Purpose4/5

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

The actor blurb states a specific resource and filters: lists websites using Shopify, WooCommerce, Klaviyo or 7,000+ technologies, filtered by country, language and domain rank, with full tech stack. That is far clearer than the tool name, which suggests a narrow Shopify-only list. It does not differentiate from close siblings such as rowfeed--website-technology-checker or rowfeed--website-traffic-checker.

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

Usage Guidelines3/5

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

Usage is only implied by the filtering capabilities (audience building, tech-stack prospecting); there is no explicit when-to-use or when-not-to-use statement. No alternative is named, so the agent must infer this tool is for bulk listing by technology versus the single-site checker sibling.

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

rowfeed--steam-game-datarowfeed/steam-game-dataA
Destructive
Inspect

This tool calls the Actor "rowfeed/steam-game-data" and retrieves its output results. Actor description: Steam game data API: top sellers, games on sale, most wishlisted and most played, or any game by name, id or URL. Price and discount per country, players now, release date, developer, genres and Metacritic. $2 per 1,000 games.

NameRequiredDescriptionDefault
gamesNoGames by Steam app id, store URL or name (the best match is used). Up to 1,000.
listsNoSteam lists to read, in Steam's order. Leave empty to look up only the games below. Example values: ["top_sellers"]
countryNo2-letter country code for prices, currency and lists: us, gb, de, fr, br, jp ... Example values: "us"us
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxPerListNo1 to 100. Example values: 20

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is partially covered, though the description never explains why a read-style data tool carries a destructive hint (i.e., that it creates and runs an Actor). It does add genuinely useful behavior beyond structured fields: the $2 per 1,000 games cost, the up-to-1,000-games cap, and the 0–45s wait cap with partial results at timeout.

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

Conciseness4/5

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

Two sentences, front-loaded with the capability and data fields, with pricing appended last. The opening 'This tool calls the Actor ... and retrieves its output results' is platform boilerplate that adds little, but there is no real padding.

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

Completeness4/5

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

For a 5-parameter, zero-required scraping tool with an output schema and full schema coverage, the description supplies what the structured fields do not: cost model, volume limits, and data fields returned. The main remaining gap is the non-obvious run lifecycle (Actor start, polling, partial-result semantics), which is only hinted at inside waitSecs.

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

Parameters3/5

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

Schema description coverage is 100%, including per-parameter text on games, lists, country, waitSecs and maxPerList, so the baseline is 3. The description's mention of input modes (name, id, URL) and country-level pricing mirrors what the schema already states rather than adding format examples or edge-case behavior.

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

Purpose4/5

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

The description names a concrete verb/resource pair (retrieves Steam game data) and enumerates the exact result categories: top sellers, on sale, most wishlisted, most played, or any game by name/id/URL, plus fields like price, discount per country, players now, Metacritic. An agent can distinguish this from sibling scrapers such as google-play-scraper or apple-app-store-scraper by platform. It loses a point only because the framing sentence about 'calls the Actor ... and retrieves its output results' is boilerplate rather than differentiating.

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

Usage Guidelines3/5

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

Usage is implied through the data categories offered, but there is no explicit when-to-use/when-not statement or named alternative among the many rowfeed-* siblings. The only routing guidance (follow `nextStep` to poll via get-actor-run, or set waitSecs to 0 for fire-and-forget) lives in the schema, not the description.

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

rowfeed--subdomain-finderrowfeed/subdomain-finderA
Destructive
Inspect

This tool calls the Actor "rowfeed/subdomain-finder" and retrieves its output results. Actor description: Find subdomains of any domain from certificate logs, passive DNS and the Internet Archive, merged into one list, with a live DNS check and IP addresses. Bulk domains. $0.50 per 1,000 subdomains, domains with none are free.

NameRequiredDescriptionDefault
domainsNoThe domains to look up, up to 500 per run, e.g. example.com. A full link also works. Example values: ["apify.com"]
checkDnsNoCheck whether each subdomain resolves today and list its IP addresses. Included in the price. Example values: true
onlyLiveNoDeliver only subdomains that resolve today. Old names from certificates are dropped, not charged. Needs the DNS check.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxSubdomainsPerDomainNoCaps the cost of very large domains. Each subdomain delivered is one charge. Example values: 1000

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare generic wrapper traits (readOnly=false, destructive=true, openWorld=true); the description supplies the genuinely useful behavior an agent needs — per-result pricing ($0.50 per 1,000 subdomains), that domains with no subdomains are free, and that the DNS check is included in the price. It does not contradict the annotations. It stops short of explaining run timing/async behavior, which is left to the waitSecs schema field.

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

Conciseness4/5

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

Two sentences, with the capability statement before the pricing line, so the most decision-relevant information is front-loaded. The opening clause 'This tool calls the Actor ... and retrieves its output results' is boilerplate that earns little, but it is short.

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

Completeness5/5

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

An output schema exists, so return values need not be described; with that covered, the description supplies purpose, sources, and cost model — everything an agent needs to decide to call it. Pagination/async follow-up is handled by waitSecs plus sibling get-actor-run, both already available.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented in-schema. The description adds only marginal meaning beyond that — 'Bulk domains' loosely points at the domains array, and the per-1,000-subdomain price gives context for maxSubdomainsPerDomain. Baseline 3 is appropriate when the schema carries the semantics.

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

Purpose4/5

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

States a specific verb and resource: 'Find subdomains of any domain' and names the data sources (certificate logs, passive DNS, Internet Archive) plus live DNS/IP enrichment. That is far more specific than the wrapper boilerplate 'calls the Actor X and retrieves its output results'. It does not name a sibling, but among the ~40 sibling tools only seo-site-audit and backlink-checker are even adjacent, so explicit differentiation is less critical.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative tool is mentioned. 'Bulk domains' hints at scale but does not tell the agent when this is preferable to running an SEO site audit that might include subdomains. Usage must be inferred entirely from the purpose statement.

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

rowfeed--tripadvisor-reviews-scraperrowfeed/tripadvisor-reviews-scraperA
Destructive
Inspect

This tool calls the Actor "rowfeed/tripadvisor-reviews-scraper" and retrieves its output results. Actor description: Export the newest or most detailed Tripadvisor reviews of any hotel, restaurant or attraction: rating, title, text, date, visit month, language, reviewer country and owner reply, plus the place's rating and star breakdown. Paste Tripadvisor links. About $0.50 per 1,000 reviews.

NameRequiredDescriptionDefault
placesNoOne Tripadvisor link per line: a hotel, restaurant, attraction, tour or vacation rental page on any Tripadvisor country site (open the place on Tripadvisor and copy the address). Up to 500 per run. Example values: ["https://www.tripadvisor.com/Hotel_Review-g186338-d187686-Reviews-The_Savoy-London_England.html"]
sortByNoWhich reviews come first: the newest, or the most detailed (Tripadvisor's own order). Example values: "newest"newest
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
newerThanNoLeave out older reviews: a date (2026-10-01) or an age (7 days, 2 weeks, 3 months). Left-out reviews are not charged. With "Newest first", no further reviews are fetched once the cutoff is reached, which makes scheduled monitoring cheap.
maxReviewsNoHow many reviews to get per place, in the chosen order. Up to 500 per run. Places with fewer reviews only pay for what they have. Example values: 20
onlyWithTextNoLeave out reviews that have no text. Left-out reviews are not charged.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.7/5.0
Behavior4/5

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

Annotations flag destructiveHint=true and openWorldHint=true, and the description adds the two pieces of context that matter most for that risk profile: per-review cost (~$0.50 per 1,000) and the paid-plan requirement for live lookups. It still doesn't explain the asynchronous Actor-run semantics in the description body (that lives only in the waitSecs parameter text) or what 'destructive' means here beyond spending money.

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

Conciseness4/5

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

Two sentences with little waste, and the resource and return fields are front-loaded before the pricing note. The opening boilerplate about calling the Actor and retrieving its output results is framing rather than information, but it is brief enough not to hurt.

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

Completeness4/5

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

With an output schema present and all six parameters fully documented in the schema, the description only needs to establish purpose, cost and access constraints, which it does. The remaining gap is behavioral: the polling/terminal-state lifecycle is documented in the waitSecs parameter rather than the description, which is acceptable given the structured coverage.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains places, sortBy, maxReviews, newerThan, onlyWithText and waitSecs in detail. The description adds almost no parameter meaning beyond echoing 'newest or most detailed' for the sort order; the billing-per-review note is the only increment.

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

Purpose4/5

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

The description states a specific verb and resource: exporting Tripadvisor reviews for hotels, restaurants or attractions, and enumerates the returned fields (rating, title, text, date, visit month, language, reviewer country, owner reply, star breakdown). The Tripadvisor scope implicitly distinguishes it from siblings like google-maps-reviews-scraper and trustpilot-reviews-scraper, but those alternatives are never named, so the differentiation is left to inference.

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

Usage Guidelines3/5

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

Usage is only implied: 'Paste Tripadvisor links' tells the agent the input form, and the pricing line ('About $0.50 per 1,000 reviews') plus the schema note about a paid Apify plan give cost context. There is no explicit when-to-use/when-not statement and no routing to the alternative review scrapers in the sibling set.

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

rowfeed--trustpilot-reviews-scraperrowfeed/trustpilot-reviews-scraperA
Destructive
Inspect

This tool calls the Actor "rowfeed/trustpilot-reviews-scraper" and retrieves its output results. Actor description: Export the newest or most relevant Trustpilot reviews of any company: star rating, title, full text, date, language, verified flag, reviewer country and company reply, plus the company's TrustScore and review count. Paste Trustpilot links, websites or domains. About $0.25 per 1,000 reviews.

NameRequiredDescriptionDefault
sortByNoWhich reviews come first: the newest, or the most relevant (Trustpilot's default). Example values: "newest"newest
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
companiesNoOne company per line: its Trustpilot page (any country site, e.g. https://www.trustpilot.com/review/www.booking.com), its website, or just its domain (booking.com). Up to 500 per run. Example values: ["https://www.trustpilot.com/review/www.booking.com"]
newerThanNoLeave out older reviews: a date (2026-10-01) or an age (7 days, 2 weeks, 3 months). Left-out reviews are not charged. With "Newest first", no further reviews are fetched once the cutoff is reached, which makes scheduled monitoring cheap.
maxReviewsNoHow many reviews to get per company, in the chosen order. Up to 200 (the most Trustpilot's data provider returns per company). Companies with fewer reviews only pay for what they have. Example values: 20
onlyWithTextNoLeave out reviews that have no text. Left-out reviews are not charged.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and destructiveHint=true, and the description usefully adds the cost model (~$0.25 per 1,000 reviews) and the paid-plan prerequisite for live lookups. However, it never acknowledges that invoking it creates an Actor run with side effects and possible cost, nor how partial/long runs are handled — those mechanics only appear inside the waitSecs parameter description.

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

Conciseness4/5

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

Two sentences, front-loaded with the scope and then the returned fields and pricing. The opening 'calls the Actor ... and retrieves its output results' is harness boilerplate rather than tool-specific information, but overall it is tight with no filler.

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

Completeness4/5

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

With an output schema present, the description needn't explain return shape, and it covers inputs, breadth limits, pricing, and plan requirements well. The remaining gap is the run lifecycle and destructive side effects, which an agent would want before firing a paid, write-like operation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already carries full parameter meaning including the sortBy enum, the 0–45 waitSecs cap, the 500-company limit, and the 200-review cap. The description repeats the accepted company input formats but adds nothing beyond what the schema states; baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource — exports Trustpilot reviews for a company — and enumerates the returned fields (star rating, title, text, date, verified flag, reply, TrustScore). It is clearly distinguishable from siblings like tripadvisor-reviews-scraper or google-maps-reviews-scraper by the platform named, though it never explicitly contrasts with them.

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

Usage Guidelines3/5

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

Usage context is implied through the accepted input forms (Trustpilot page, website, or bare domain) and the note that live lookups require a paid Apify plan. There is no explicit statement of when to choose this over the other review scrapers in the sibling list, nor any when-not guidance.

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

rowfeed--website-contact-finderrowfeed/website-contact-finderB
Destructive
Inspect

This tool calls the Actor "rowfeed/website-contact-finder" and retrieves its output results. Actor description: Find company emails, phone numbers, social profiles and address from any website's own contact pages. Bulk lists or an Apify dataset. GDPR-safe role addresses only. $2 per 1,000 websites with an email or phone; the rest are free.

NameRequiredDescriptionDefault
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
websitesNoCompany websites or domains, one per line (acme.com, https://www.acme.co.uk ...). Duplicates are removed. Up to 10,000 per run. Example values: ["plausible.io","tibber.com","ghost.org"]
datasetIdNoE.g. the results of a Google Maps, SERP or leads run. The website is read from the field below, or from website / url / domain automatically.
datasetFieldNoLeave empty to use website, url or domain automatically.
maxPagesPerSiteNoThe home page plus contact, about and imprint pages. 5 finds almost everything; the price is per website, not per page. Example values: 5

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

With annotations present the bar is lower, and the description does add real value: per-website pricing ($2 per 1,000 websites yielding an email or phone, others free) and the GDPR constraint limiting output to role addresses. But it does not explain the destructiveHint=true annotation, nor what running the Actor actually changes or creates (a run and dataset). Pricing and compliance are the only behavioral disclosures beyond annotations.

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

Conciseness3/5

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

The first sentence is pure boilerplate about calling an Actor and retrieving results, but the second sentence is dense and front-loaded with the useful facts (what it finds, bulk/dataset modes, GDPR, pricing). Overall compact but with one wasted opening sentence.

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

Completeness4/5

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

All five parameters are richly documented in the schema, an output schema exists so return values need no explanation, and the description covers scope, limits and cost. The remaining gap is the unexplained destructiveHint=true and the lack of any note on run/dataset side effects.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in detail, including waitSecs semantics and the datasetField fallback. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb+resource: find company emails, phone numbers, social profiles and addresses from a website's own contact pages. That clearly separates it from sibling scrapers like rowfeed--google-maps-scraper or rowfeed--website-technology-checker. The first sentence is generic wrapper boilerplate ('calls the Actor ... retrieves its output results') that adds nothing, but the Actor description does the real work.

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

Usage Guidelines3/5

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

'Bulk lists or an Apify dataset' implies two distinct input modes, which the schema then maps to `websites` vs `datasetId`. However, there is no guidance on when to prefer this tool over related siblings (e.g., Google Maps scraper for place contact data) and no stated prerequisites or exclusions.

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

rowfeed--website-technology-checkerrowfeed/website-technology-checkerA
Destructive
Inspect

This tool calls the Actor "rowfeed/website-technology-checker" and retrieves its output results. Actor description: Find the tech stack of any website: CMS, e-commerce platform, analytics, ad pixels, marketing and chat tools, payments, frameworks, hosting and CDN. Bulk domains in, one row per site out, grouped by category. $2 per 1,000 websites; sites that block visits are looked up in a technology database.

NameRequiredDescriptionDefault
domainsNoOne website per line: a domain (shopify.com) or any link on the site. Up to 5,000 per run. Example values: ["apify.com","wordpress.org","vercel.com"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
useDatabaseNoSome sites refuse automated visits. On: look them up in a licensed technology database instead ($0.02 per lookup, also when it has no data). Off: they get a free error row. Needs a paid Apify plan. Example values: true

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations, the description discloses cost ($2 per 1,000 websites, $0.02 per lookup even on empty results), the paid-plan prerequisite, and the fallback behavior for sites that block automated visits. The waitSecs parameter description adds run-lifecycle behavior (cap at 45s, nextStep polling, fire-and-forget at 0). It does not reconcile the stated 'retrieves its output results' framing with the destructiveHint=true annotation or explain that a billable Actor run is launched.

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

Conciseness4/5

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

Two sentences, front-loaded with the Actor identity and then the capability and pricing. The opening 'This tool calls the Actor ... and retrieves its output results' is boilerplate that consumes space without adding selection value, but overall there is little waste.

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

Completeness4/5

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

With an output schema present and full annotation coverage, the description needn't explain return values, and it supplies the cost and blocked-site fallback an agent needs before spending money. The main residual gap is that run lifecycle is delegated entirely to the waitSecs parameter text rather than surfaced at the top level.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented with limits, defaults, and examples. The description adds only the pricing rationale behind useDatabase, which is marginal value over the schema. Baseline 3 applies when the schema carries the semantics.

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

Purpose4/5

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

The description gives a specific verb and resource: retrieve a site's tech stack (CMS, e-commerce, analytics, pixels, payments, frameworks, hosting/CDN) for bulk domains, one row per site. That is materially more specific than the tool name alone and clearly separates it from siblings like website-traffic-checker or pagespeed-insights-api. It stops short of explicitly naming which sibling to use instead for adjacent tasks.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: 'Bulk domains in, one row per site out' tells an agent this is the bulk-batch option, and the blocking-site fallback is described. There is no explicit when-not guidance and no routing to alternatives such as website-traffic-checker or seo-site-audit for overlapping intents, so the agent must infer boundaries.

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

rowfeed--website-traffic-checkerrowfeed/website-traffic-checkerA
Destructive
Inspect

This tool calls the Actor "rowfeed/website-traffic-checker" and retrieves its output results. Actor description: Check website traffic and domain authority for up to 10,000 domains: estimated Google organic and paid traffic, ranking keywords, domain rank, referring domains and backlinks. Any country. A Similarweb alternative for search traffic, pay per domain, no subscription.

NameRequiredDescriptionDefault
domainsNoWebsites to check: domains or full URLs (reduced to the domain). Up to 10,000. Example values: ["hubspot.com","salesforce.com","zoho.com"]
languageNoSearch language for the traffic estimate when a country is set. Example values: "English"English
locationNoEstimate Google traffic from one country, e.g. "United States", "Germany". Empty = all countries. Authority and backlinks are always global.
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

A3.5/5.0
Behavior3/5

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

Annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true) already flag this as a mutating, external-world call, so the description's job is to add operational context. It does add the cost model ('pay per domain, no subscription') and scale ceiling (10,000 domains), but it says nothing about the asynchronous run lifecycle, the waitSecs cap behavior, or polling via get-actor-run — all of which is left to the schema. The description also does not address the odd destructiveHint=true for what is essentially a data retrieval operation.

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

Conciseness4/5

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

Two sentences and the capability statement is front-loaded after the template opener. The second sentence carries a bit of marketing filler ('A Similarweb alternative ... no subscription') that isn't needed for tool selection, but overall it is compact and readable.

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

Completeness4/5

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

An output schema exists and the input schema is fully described, so return values and parameter semantics do not need coverage here. What remains thin is the decision boundary against overlapping SEO siblings and the free-vs-paid plan caveat, which is buried in the schema description rather than the tool description.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (domains, language, location, waitSecs) are already fully documented in the schema, including the 0–45 second cap and nextStep polling guidance. The description adds no parameter-level meaning beyond what is structured — baseline 3 applies.

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

Purpose4/5

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

States a concrete verb and resource: calls the rowfeed/website-traffic-checker Actor and returns traffic/authority metrics (organic and paid traffic, keywords, domain rank, referring domains, backlinks) for up to 10,000 domains. That is specific enough to act on, but it never distinguishes itself from near-duplicate siblings such as rowfeed--da-pa-checker (domain authority) and rowfeed--backlink-checker (referring domains/backlinks), which the description explicitly claims to return.

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

Usage Guidelines3/5

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

Usage is implied rather than stated — 'Check website traffic and domain authority for up to 10,000 domains' tells an agent the shape of the job, and 'Any country' hints at the location parameter. There is no explicit when-to-use or when-not guidance, no routing to alternatives like da-pa-checker or keyword-search-volume, and no mention of the paid-plan prerequisite that sits inside the schema description.

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

rowfeed--youtube-search-apirowfeed/youtube-search-apiB
Destructive
Inspect

This tool calls the Actor "rowfeed/youtube-search-api" and retrieves its output results. Actor description: Get the videos YouTube shows for any keyword and country: position, title, views, upload date, length, Shorts flag and channel, plus where your channels rank. A YouTube search scraper and YouTube rank tracker, no API quota or key needed.

NameRequiredDescriptionDefault
keywordsNoWhat to search on YouTube, one keyword per line. Up to 1,000 per run. Example values: ["best running shoes"]
languageNoYouTube interface language, e.g. "English", "German". Example values: "English"English
locationNoSearch as a viewer in this country, e.g. "United States", "United Kingdom", "Germany". Example values: "United States"United States
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
maxResultsNoHow many videos to return per keyword, in the order YouTube shows them. Up to 200. Example values: 20
includeShortsNoKeep YouTube Shorts in the results. Turn off for regular videos only. Example values: true
trackChannelsNoChannels whose position you want per keyword: @handle, channel URL or channel ID (UC...). Adds one free summary row per keyword and channel. Example values: ["@RunnersWorld"]

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, and the description is consistent with that by framing the call as invoking an Actor and retrieving its output. It adds that no API quota or key is needed, but omits two material behaviors: that live lookups require a paid Apify plan, and that the call is asynchronous with a capped wait (waitSecs/nextStep polling) — the latter appears only inside 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.

Conciseness3/5

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

The substantive content sits in the second sentence (the Actor description), while the first sentence is generic MCP boilerplate ('calls the Actor ... and retrieves its output results') that repeats what the runtime already does. The purpose is therefore not front-loaded and could be tightened by leading with what the tool returns.

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

Completeness4/5

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

With a rich output schema and full parameter documentation, the description only needs to explain the operation, and it does so adequately by listing the fields returned and the rank-tracking feature. The remaining gap is the paid-plan prerequisite and the poll-on-cap behavior, which an agent calling with a low waitSecs would need to know.

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

Parameters3/5

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

Schema description coverage is 100% across all seven parameters, including keywords, language, location, waitSecs, maxResults, includeShorts and trackChannels, so the schema does the heavy lifting. The description adds no parameter-level meaning beyond mentioning 'keyword and country' and the rank-tracking output, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb and resource: it runs the rowfeed/youtube-search-api Actor and returns the videos YouTube surfaces for a keyword and country, including position, title, views, upload date, length, Shorts flag, channel, and channel rank. That is concrete enough to distinguish it from rowfeed--youtube-transcript-api, but it never names that sibling or any other, so differentiation is left to inference from the returned fields.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer it should use this for YouTube keyword/rank lookups in a given country, but there is no explicit when-to-use or when-not-to-use statement and no pointer to alternatives such as the transcript or Google SERP tools. The 'no API quota or key needed' line hints at a reason to prefer it but does not route the agent.

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

rowfeed--youtube-transcript-apirowfeed/youtube-transcript-apiB
Destructive
Inspect

This tool calls the Actor "rowfeed/youtube-transcript-api" and retrieves its output results. Actor description: YouTube transcript extractor: the full transcript of any YouTube video (also Shorts and lives) as clean text plus timed segments, with title, language, duration and word count. Bulk up to 1,000 videos. $4 per 1,000 transcripts. Licensed data, no blocked runs.

NameRequiredDescriptionDefault
videosNoVideo links (watch, youtu.be, Shorts, live, embed) or 11-character video ids. Up to 1,000 per run. Example values: ["https://www.youtube.com/watch?v=8jPQjjsBbIc"]
waitSecsNoMax seconds (0–45, default 30) to cap the wait for the Actor run to reach terminal state. For long-running Actors the response returns at the cap with the current run status; follow `nextStep` to poll via get-actor-run. Set to 0 to fire-and-forget.
includeTimestampsNoAlso return every caption line with its start and end time (seconds). Off = full text only. Example values: true

Output Schema

NameRequiredDescription
tipNoAdvisory guidance RAG Web Browser wrote to its key-value store under the reserved "TIP" key
runIdYesActor run ID
statsNoRun statistics
statusYesRun status: READY | RUNNING | TIMING-OUT | TIMED-OUT | ABORTING | ABORTED | SUCCEEDED | FAILED
actorIdYesStable Apify Actor ID from the run record
summaryYesPast-tense summary of the run state
exitCodeNoActor process exit code; populated for terminal states (especially FAILED)
nextStepYesOne primary follow-up action with identifiers interpolated
storagesYesDataset and key-value store metadata, keyed by alias. "default" is always the primary entry.
actorNameNo"username/actor-name"
startedAtNoISO timestamp when the run started
finishedAtNoISO timestamp when the run finished (terminal states only)
statusMessageNoPass-through from Apify run.statusMessage
apifyConsoleUrlNoPersonalized Apify Console link to the run; present only for Console sessions

TDQS

B3.4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, so the safety profile is already carried structurally. The description adds genuinely non-redundant context: $4 per 1,000 transcripts, a 1,000-video bulk ceiling, and exactly what the output contains (title, language, duration, word count). It does not explain that a run is asynchronous and must be polled, but the waitSecs schema description already covers that with a pointer to get-actor-run.

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

Conciseness3/5

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

The opening sentence ('This tool calls the Actor ... and retrieves its output results') is boilerplate that conveys nothing the name does not. The second sentence is dense and informative but includes promotional phrasing ('Licensed data, no blocked runs') that does not help an agent invoke the tool correctly.

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

Completeness4/5

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

With an output schema present, the description needn't explain return shapes, and it still summarizes them usefully. Annotations plus the schema cover the run/polling mechanics; the remaining gap is only an explicit statement that live lookups require a paid plan, which currently lives solely in the schema-level description.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters in detail, including the waitSecs 0–45 range and fire-and-forget semantics. The description only echoes the video bulk limit and the timed-segment concept tied to includeTimestamps, adding little beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource: extracting the full transcript of a YouTube video, including Shorts and lives, returned as clean text plus timed segments. That clearly separates it from the sibling rowfeed--youtube-search-api (discovery vs. transcript retrieval), though the differentiation is only implicit rather than stated.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says when to prefer this over rowfeed--youtube-search-api for finding videos, or what prerequisites exist beyond the schema note about a paid Apify plan. The only steering text ('Bulk up to 1,000 videos') is a capacity note inside the Actor blurb, not an invocation guideline.

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

Tool Schema Changelog

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

  1. 2 tool updates
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  2. 2 tool updates
    • Changedrowfeed--career-site-jobs-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / posted_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  3. 2 tool updates
    • Changedrowfeed--career-site-jobs-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / posted_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  4. 2 tool updates
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  5. 2 tool updates
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  6. 2 tool updates
    • Changedrowfeed--career-site-jobs-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / posted_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  7. 3 tool updates
    • Changedrowfeed--career-site-jobs-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / posted_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  8. 2 tool updates
    • Changedrowfeed--career-site-jobs-scraper4 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / country / type
        Previous value: -"null"New value: +[
        +  "null",
        +  "string"
        +]
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / error
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / errorMessage
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / posted_at / type
        Previous value: -"string"New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  9. 1 tool update
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  10. 2 tool updates
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  11. 3 tool updates
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  12. 3 tool updates
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  13. 1 tool update
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  14. 1 tool update
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  15. 2 tool updates
    • Changedrowfeed--google-maps-reviews-scraper3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  16. 1 tool update
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  17. 3 tool updates
    • Changedrowfeed--google-maps-reviews-scraper8 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / original_language / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / place_id / type
        Previous value: -"string"New value: +[
        +  "null",
        +  "string"
        +]
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_highlights / properties / Child-friendliness
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_highlights / properties / Historical information
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_highlights / properties / Reservation recommended
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_highlights / properties / Visited on
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_highlights / properties / Wait time
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / review_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  18. 1 tool update
    • Changedrowfeed--youtube-search-api6 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / best_position / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_id / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / channel_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / description / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_at / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / published_text / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  19. 1 tool update
    • Changedrowfeed--redirect-checker3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / final_url / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / status / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    SEO + GEO MCP server: live Google Search Console & GA4 data, keyword and page analysis, AI-visibility tracking across ChatGPT, Claude, Gemini & Perplexity, site audit and SEO task management — all from chat.
    38
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to scan brand visibility across ChatGPT, Claude, Gemini & Perplexity, analyze website GEO readiness, compare competitors, and get actionable recommendations.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.