Skip to main content
Glama

LeoWorks Review & Lead Data Tools (via Apify MCP)

Server Details

Review classifiers & lead data for Google Maps, Naver and AliExpress as AI agent tools: Google Maps review sentiment classifier and lead qualifier, Korean, Japanese, Spanish and Amazon review classifiers, social comment, job posting and company website classifiers, Naver Shopping rank tracker, Naver Blog & AI Briefing monitors, K-beauty rankings (Olive Young Global, Amore Mall), AliExpress reviews & search. The official Apify MCP server (hosted by Apify) preconfigured with 15 LeoWorks actors. Sign in with Apify OAuth or an Apify token; billed per result on your Apify account.

Ownership verified
Status
Healthy
Uptime
96.6% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
illee/leoworks-data-tools-mcp
GitHub Stars
0

TDQS

A3.8/5.0

Scored across 19 tools

Disambiguation4/5

Most tools are clearly separated by platform or language (Amazon vs AliExpress vs Google Maps vs Korean/Japanese/Spanish review classifiers), and descriptions include explicit cross-references to guide selection. The main ambiguity is between generic Apify retrieval tools and actor-specific wrappers that also return output results.

Naming Consistency3/5

The generic Apify tools follow a clean verb_noun kebab-case pattern, but the actor wrappers use a namespaced noun-phrase convention like leoworks--aliexpress-reviews-classifier. Each subgroup is internally consistent, but the overall set mixes two naming conventions.

Tool Count4/5

19 tools is slightly heavy, but 15 are distinct Actor wrappers covering different platforms and languages, with four generic Apify support tools. The count is reasonable for a multi-source review and lead data toolkit rather than bloated with duplicates.

Completeness4/5

Core workflows are covered: actor execution/retrieval, dataset item access, key-value record access, and run abort/status checks. Minor gaps remain around listing datasets/key-value stores and generic actor execution, but agents can work around these using returned IDs.

Available Tools

19 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 or username~dataset-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.3/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint=true and idempotentHint=true, the description adds valuable behavioral context: returns rows themselves, default limit of 20, and clean=true behavior. It also clarifies the nature of the return value beyond the schema.

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

Conciseness4/5

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

Well-structured with clear USAGE and USAGE EXAMPLES sections. Some redundancy ('Get items (rows)...' and 'Returns the rows themselves...') but overall efficient and front-loaded with purpose.

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

Completeness4/5

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

Given the tool has 8 parameters, an output schema, and rich annotations, the description adequately covers key behaviors, usage triggers, and examples. It doesn't explain every parameter but relies on the schema for that, which is appropriate.

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 baseline is 3. The description adds extra meaning by explaining default limit (20) and the clean=true shortcut, which supplements the schema. It also provides examples for fields usage, though most parameter semantics are in the schema.

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?

Description clearly states the tool gets items (rows) from a dataset and explicitly distinguishes it from metadata, counts, or schema. It names the exact resource (dataset items) and the action (get), and provides direct trigger phrases for when to use it.

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?

Provides explicit use cases ('when the user provides a datasetId and asks to retrieve results...'), and clarifies what it is not for (metadata, counts, schema). However, it does not name alternative tools explicitly, only implies them.

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 or username~store-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.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior. The description adds genuine context beyond that: the exact key name is required, and the response preserves the original Content-Encoding with most clients decompressing automatically. That encoding note is real operational value an agent would otherwise not know.

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 scope, then a short behavioral note, then usage. The USAGE line slightly overlaps the first sentence, but the examples earn their space by showing realistic inputs. No filler.

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 there is no need to describe return values, and the annotations carry the safety profile. For a two-parameter read tool, the description supplies everything else an agent needs: exactness of the key, allowed value types, and the encoding caveat.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description still adds a semantic constraint the schema omits — that the key must be an exact match — and the examples show the 'username~my-store' form of the store ID, gently reinforcing the ID format.

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 (get) + resource (value under a key in a key-value store) with an explicit scope boundary: 'a single record, not a listing of all keys.' None of the sibling tools overlap with this resource, and the anti-scope clause removes any ambiguity about whether it enumerates keys.

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 line gives a clear triggering condition — retrieving a specific record (JSON, text, or binary) — and two concrete examples anchor it. It lacks explicit when-not-to-use guidance or named alternatives, but no similar sibling exists to route against.

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

leoworks--aliexpress-reviews-classifierleoworks/aliexpress-reviews-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/aliexpress-reviews-classifier" and retrieves its output results. Actor description: AliExpress reviews scraper with review analysis: translation, stars, country, photos; AliExpress review complaints and sentiment. Use for known products; for keyword search use leoworks/aliexpress-search-scraper. productUrls or IDs. No login, ~8 min/1,000 reviews, pay per review.

NameRequiredDescriptionDefault
countryNoTwo-letter country code used for the request (affects which reviews AliExpress shows first and the translation language base). Default US. Example values: "US"US
keywordsNoKeep only reviews whose text, English translation or follow-up contains one of these words (not case-sensitive), e.g. "broken", "battery", "size".
maxStarsNoKeep only reviews with at most this many stars — e.g. 3 to read only the critical ones before sourcing a product.
minStarsNoKeep only reviews with at least this many stars. Leave empty for all.
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.
monitorKeyNoAny name for this watch list, e.g. `my-suppliers`. Run again with the same key and each product row gets `previousRunAt`, `ratingDelta`, `newReviews` and `newCriticalIssues` (new reviews that need action) — the change since the last run with that key; the first run only saves the baseline. Leave empty to switch comparison off. [Description truncated]
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
productUrlsYes**REQUIRED** AliExpress product pages (any site: www.aliexpress.com, aliexpress.us, ko.aliexpress.com …) or product IDs, e.g. https://www.aliexpress.com/item/1005008549911526.html or 1005008549911526. Example values: ["https://www.aliexpress.com/item/1005008549911526.html"]
customLabelsNoUp to 10 yes/no criteria in plain language, e.g. "arrived broken or damaged", "mentions the battery", "looks different from the photos". Each classified review gets a probability and `matched` per label. Included in the classification price.
photoJudgingNoAdds `photoEvidence` (supports_complaint_product, supports_complaint_packaging, damage_seen_text_silent, no_evidence, not_product_photo) and puts photo-backed product defects, then photo-backed packaging damage, at the top of ACTION_QUEUE.csv. "Only reviews with a complaint or 3 stars or fewer" judges far fewer photos and is the recommended setting. Example values: "off"off
photoMaxSideNoLongest side in pixels requested from the photo server (512, 768 or 1024; other values are rounded). Smaller is faster; photos under 280 pixels on the short side are skipped. Example values: 768
reviewFilterNoReviews come in AliExpress' default order. Star and date sorting are not offered by the source. "Only reviews from buyers in the shipping country" uses the Shipping country under Advanced. Example values: "all"all
buyerCountriesNoKeep only reviews from buyers in these countries (two-letter codes, e.g. US, FR, BR).
maxConcurrencyNoProducts processed in parallel. Example values: 5
classifyReviewsNoAdd complaint types (delivery, quality/defect, size/fit, price/value, customer service, packaging, no effect, skin/body reaction, other), sentiment and purchase motive to each review. Reviews in other languages are classified from AliExpress' English translation. Adds $0.5 per 1,000 classified reviews on top of the $1.5 per 1,000 collection price — turn off for collection only. Example values: true
includeStarOnlyNoAliExpress has many reviews with a star rating but no text or photos. They are skipped (not charged) by default; turn this on to collect them too (charged as review).
reviewsNewerThanNoA date (`2026-09-01`) or a period (`30 days`, `6 months`).
reviewsPerProductNoMaximum reviews to collect for each product (charged per review: $1.5 per 1,000, or $2.0 per 1,000 with AI classification). The form starts at 20 for a quick, low-cost first run; raise it up to 5,000 (default when omitted via API: 100). Example values: 20
complaintThresholdNoMinimum probability (0–1) for a complaint type to be reported. Example values: 0.5
maxPhotosPerReviewNoThe first photos of each review. With "All reviews that have photos", at most 2 photos per review are judged. Example values: 2
proxyConfigurationNoDefault Apify datacenter proxy works. Example values: {"useApifyProxy":true}
residentialFallbackNoRetry failing requests through residential proxy in the shipping country. 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.3/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: no login required, ~8 minutes per 1,000 reviews, and pay-per-review cost. It does not explain the destructiveHint=true flag (a paid, credit-consuming run), leaving the agent to infer why the tool is marked destructive.

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 Actor description is dense and front-loaded, packing scope, alternative, input form, auth, runtime and pricing into a few clauses. The leading 'This tool calls the Actor ... and retrieves its output results' sentence is pure boilerplate that earns no place, keeping it just below top marks.

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 22 parameters are fully described in the schema. The description covers the key operational facts an agent needs before a paid, long-running scrape, though it doesn't mention the waitSecs/nextStep polling behavior or the monitorKey comparison feature.

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 22 parameters, so the schema already documents country, keywords, star filters, pricing, proxy and the rest. The description adds only 'productUrls or IDs' for the required argument, which the schema already states — 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.

Purpose5/5

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

The description names a specific verb+resource — scraping AliExpress reviews and analyzing them (translation, stars, country, photos, complaints, sentiment) — and explicitly distinguishes itself from the sibling keyword-search scraper. The one generic sentence about 'calls the Actor and retrieves output' is boilerplate, but the Actor description that follows carries the real purpose.

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

Usage Guidelines5/5

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

It states the selecting condition ('Use for known products') and names the alternative for the other case ('for keyword search use leoworks/aliexpress-search-scraper'), plus the accepted input form (product URLs or IDs). An agent can route between this tool and its closest sibling without opening either schema.

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

leoworks--aliexpress-search-scraperleoworks/aliexpress-search-scraperA
Destructive
Inspect

This tool calls the Actor "leoworks/aliexpress-search-scraper" and retrieves its output results. Actor description: AliExpress search scraper: rank, price, sold count, ads flagged. AliExpress rank tracker mode. Use for search, price and sold count; for reviews use leoworks/aliexpress-reviews-classifier. keywords (+ tracked products). No login, ~6 s/20 results, rank history in your key-value store. Pay per result.

NameRequiredDescriptionDefault
sortNoOrder of the search results. Example values: "best_match"best_match
countryNoTwo-letter country code. Results, prices and product IDs depend on the region; the proxy exits in this country. Example values: "US"US
currencyNoThree-letter currency code for prices (e.g. USD, EUR, GBP). Example values: "USD"USD
keywordsYes**REQUIRED** Search terms, one per line (e.g. wireless earbuds, phone case). Example values: ["wireless earbuds"]
maxPagesNo60 products per page. Search mode: an upper bound next to the result cap (default 60 pages). Rank mode: how deep to look for tracked products (default 5 = top 300, up to 60).
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.
includeAdsNoKeep sponsored products in search-mode results (flagged isAd). Organic rank never counts ads. Example values: true
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
trackProductsNoOptional. Product URLs or IDs (any AliExpress site). When set, the Actor runs in rank mode: one row per keyword × product with its organic rank (ads excluded), position, page, and the change since the previous run — or 'not found within N'. Charged as keyword-checked instead of per result.
maxConcurrencyNoKeywords processed in parallel. Example values: 3
rankHistoryStoreNoKey-value store in your account that keeps the last rank of each keyword × product, so each row shows previousRank, rankChange (positive = moved up) and isNew. Leave empty to turn off. No extra charge. Example values: "aliexpress-rank-history"aliexpress-rank-history
proxyConfigurationNoDefault Apify datacenter proxy (in the shipping country) works. Example values: {"useApifyProxy":true}
residentialFallbackNoRetry failing pages through residential proxy in the shipping country. Example values: true
maxResultsPerKeywordNoStop after this many products per keyword. Applied before the page count. Starts at 20 for a quick, low-cost first run; raise it up to 3,600 (60 pages). 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.8/5.0
Behavior4/5

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

Adds genuinely useful behavior beyond the annotations: 'No login, ~6 s/20 results, rank history in your key-value store. Pay per result' discloses auth requirements, latency, cost model, and the fact that the tool persists state into the user's key-value store — which explains the destructiveHint=true for what looks like a read-only scrape. It stops short of saying what happens to the KV store on repeated runs or what the run-status/polling behavior is at the waitSecs cap.

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 compact and wastes few words, but it reads as a semicolon-chained run-on with no clear separation between purpose, usage, and operational notes. The lead sentence is boilerplate that delays the useful content rather than front-loading it.

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 explained, and the description covers the remaining gaps an agent would worry about: no login, approximate runtime, per-result pricing, and persistent rank history. Given 14 parameters and a dual search/rank mode, a bit more guidance on choosing between the two modes would make it fully 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% across all 14 parameters, so the baseline is 3. The description adds only a light nudge — 'keywords (+ tracked products)' hints that supplying tracked products switches to rank mode — while sort, country, currency, maxResultsPerKeyword, and the proxy parameters are left entirely to the schema.

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

Purpose4/5

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

The description names the concrete resource and outputs (AliExpress search results with rank, price, sold count, and flagged ads) and explicitly contrasts itself with the reviews sibling. The opening line ('This tool calls the Actor ... and retrieves its output results') is generic wrapper boilerplate, but the actor description that follows carries genuine purpose detail.

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?

'Use for search, price and sold count; for reviews use leoworks/aliexpress-reviews-classifier' gives an explicit when-to-use and a named alternative, which is exactly what an agent needs to pick between the two AliExpress tools. It does not state exclusions beyond reviews, and mode selection (search vs. rank) is deferred to the trackProducts parameter rather than explained here.

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

leoworks--amazon-review-classifierleoworks/amazon-review-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/amazon-review-classifier" and retrieves its output results. Actor description: Amazon review analysis: complaints, return reasons, praise, sentiment. products = ASINs/URLs (collected by junglee, billed to you ~$6/1k; Free plan 10 reviews/run; ~$6.5/1k all-in), or datasetId from any scraper, or texts. For AliExpress use leoworks/aliexpress-reviews-classifier.

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line). Use this OR “Reviews dataset”. Example values: ["Stopped charging after two weeks. Returning it.","Fits great but the fabric is see-through when I squat."]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, productAsin). Leave empty to auto-pick reviewId and the product ASIN.
maxItemsNoClassify at most this many reviews (0 = all).
maxStarsNoFor example 3 = classify only 1–3 star reviews (where complaints and returns are). 0 = all ratings. Reviews without a star rating are kept.
productsNoOne product per line, up to 20: the 10-character ASIN (for example B0CWXNS552) or the product page URL (…/dp/ASIN; its marketplace is taken from the URL). The Actor then collects the reviews and classifies them in the same run. [Description truncated]
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.
collectorNoThe Amazon reviews scraper that collects for you. The default (junglee) returned and classified reviews in our test on amazon.com. The other is about six times cheaper but returned nothing for amazon.com in the same test — try it for other marketplaces. On the Free Apify plan, junglee returns at most 10 reviews per run (its own limit). Prices are the collectors' own and can change. Example values: "junglee/amazon-reviews-scraper"junglee/amazon-reviews-scraper
datasetIdNoAn Apify dataset containing Amazon reviews — for example the output of an Amazon reviews scraper. Use this OR “Products” (not both) OR “Review texts”.
dateFieldNoLeave empty to auto-detect (date, reviewDate, reviewedIn, …). Used for the monthly trend, the last-90-days comparison and the date filter.
textFieldNoField holding the review text. Leave empty to auto-detect (reviewDescription, reviewText, text, body, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
photoFieldNoField with the picture addresses of each review. Auto-detected (reviewImages, reviewImageUrls, images, imageUrls, photos); set it only if your scraper uses another name.
collectSortNoWhich reviews to collect first. Newest first is the least biased sample of what buyers say now. Example values: "recent"recent
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
marketplaceNoWhich Amazon site the ASINs in “Products” belong to. A product URL carries its own marketplace and overrides this. Example values: "com"com
ratingFieldNoLeave empty to auto-detect (ratingScore, rating, stars, …).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) in plain language, e.g. “mentions the battery”, “compares with another brand”. Each gets a probability.
photoJudgingNoAdds `photoEvidence` (supports_complaint_product, supports_complaint_packaging, damage_seen_text_silent, no_evidence, not_product_photo) and puts photo-backed product defects, then photo-backed packaging damage, at the top of ACTION_QUEUE.csv. "Only reviews with a complaint or 3 stars or fewer" judges far fewer photos and is the recommended setting. Example values: "off"off
photoMaxSideNoLongest side in pixels requested from the photo server (512, 768 or 1024; other values are rounded). Amazon review photos arrive as 88 px thumbnails, so a larger version is requested. Photos under 280 pixels on the short side are skipped. Example values: 768
variantFieldNoLeave empty to auto-detect (variant, variantName, …). Used for the worst-variants breakdown.
verifiedOnlyNoSkip reviews not marked as a verified purchase (needs a field such as `isVerified`).
maxConcurrencyNoReviews classified in parallel. Example values: 10
extraTextFieldsNoFields to prepend to the text (up to 5). Leave empty to add the review headline automatically (reviewTitle).
reviewsNewerThanNoClassify only reviews published after this date — a date like `2026-01-01` or a period like `90 days`, `6 months`, `1 year`. Needs a review date in the dataset (e.g. `date`). Leave empty for all.
summaryGroupFieldNoField in your dataset that identifies the product (e.g. `productAsin`). The run then saves a REPORT record with, per product: complaint rate and complaint mix, sentiment shares, average stars, share of reviews with a return or refund and 3 example complaints. Leave empty to detect it automatically. No extra charge.
complaintThresholdNoMinimum probability (0–1) for the strongest complaint type, the return-intent flag or a custom label to be reported. Example values: 0.5
maxPhotosPerReviewNoThe first photos of each review. With "All reviews that have photos", at most 2 photos per review are judged. Example values: 2
secondaryThresholdNoMinimum probability (0–1) for any further complaint type after the strongest one. Product complaints overlap (a weak item can also feel uncomfortable), so side labels need to be surer. Lower it to see more labels per review. Example values: 0.8
maxReviewsPerProductNoClassify at most this many reviews per product (ASIN), in dataset order. 0 = no limit.
collectReviewsPerProductNoHow many reviews to collect for each product (1 to 100). You pay the collector for each one, so a lower number is cheaper; “Max reviews per product” below limits only how many are classified. 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

A4.1/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and openWorldHint=true, but the description adds substantial context annotations cannot carry: per-review billing (~$6/1k collector, $0.0005 classified), Free-plan caps, no-login/no-cookies collection, and the ~100 reviews/product ceiling. It never explains the destructive/state-creating nature, which is the one notable 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 tight sentences followed by the compact actor summary; the primary function is front-loaded before the sourcing and pricing details. It is dense but every clause carries routing or cost information rather than 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?

For a 30-parameter, zero-required, output-schema-backed tool, the description supplies the routing, billing, and sourcing facts an agent needs before committing to a paid run. Return values are covered by the output schema, so remaining detail lives in the right place.

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 30 parameters, so the schema already documents inputs thoroughly, including the mutual exclusivity of products/datasetId/texts. The description restates the input modes and cost tiers rather than adding new parameter meaning, so a baseline 3 is warranted.

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 ('calls the Actor leoworks/amazon-review-classifier and retrieves its output'), and the actor summary pinpoints the function: complaints, return reasons, praise, sentiment. It also names the sibling to use for a different marketplace (AliExpress), so an agent can route without opening schemas.

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?

Explicitly routes AliExpress traffic to leoworks/aliexpress-reviews-classifier and lays out the three input modes (products, datasetId, texts) with cost implications. It stops short of a full when-not-to-use statement, but the branching guidance is clear and actionable.

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

leoworks--company-website-classifierleoworks/company-website-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/company-website-classifier" and retrieves its output results. Actor description: Classify company websites from your crawl: industry, B2B or B2C, reach, ICP fit scoring with tier and reason. Use for company sites; for Google Maps places use leoworks/google-maps-lead-qualifier. datasetId = crawled pages (grouped by site) or pages JSON. ~200 sites/6 s, pay per company.

NameRequiredDescriptionDefault
icpNoDescribe the companies you want as leads in plain language, e.g. “B2B software companies selling to retailers” or “Independent dental practices (not chains)”. Each website gets a fit score (0–100). Leave empty to get only the company labels. Example values: "Independent dental practices (not chains)"
pagesNoPages pasted as JSON objects with “url” and “text” (optionally “title”). Pages with the same host are treated as one company. Use this OR “Crawled pages dataset”. Example values: [{"url":"https://acme-analytics.example.com/","title":"Acme Analytics — demand forecasting for retailers","text":"Acme Analytics helps mid-size retailers forecast demand. Connect Shopify, NetSuite or your POS, and get store-level forecasts every morning. Trusted by 300 retail brands in the US, UK and Canada. Start a 14-day free trial — plans from $49 per month."},{"url":"https://brightsmile-dental.example.org/","title":"Bright Smile Dental — family dentist in Austin, TX","text":"Bright Smile Dental is a family-owned dental practice in South Austin. Dr. Lee and our team offer cleanings, fillings, Invisalign and same-day crowns. New patients welcome — call or book online. We accept most PPO insurance plans."}]
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.
datasetIdNoAn Apify dataset of crawled website pages — for example the output of Website Content Crawler. Pages are grouped by website (host without “www.”), and each website is classified once. Use this OR “Pages”.
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no checks (each up to 200 characters) in plain language, e.g. “offers a free trial”, “mentions HIPAA compliance”, “has offices in Europe”. Each gets a probability.
maxCompaniesNoClassify at most this many websites (0 = all).
requireEmailNoSkip (not charged) websites where no email address was found on the crawled pages.
matchThresholdNoMinimum fit probability (0–1) for a website to be marked as qualified. Example values: 0.5
maxConcurrencyNoWebsites classified in parallel. Example values: 10
expectedWebsitesNoThe websites you asked the crawler to visit (its start URLs). Any that have no crawled page are listed in the output as missing (not charged), so you know which ones to crawl again with a browser crawler.

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 carry the safety profile (readOnlyHint=false, destructiveHint=true, openWorldHint=true), so the bar is lower. The description adds genuinely useful behavioral context beyond them: throughput ('~200 sites/6 s') and a cost model ('pay per company'), which matter for a paid, stateful Actor run. It does not explain the destructive flag directly.

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

Conciseness4/5

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

Front-loaded with purpose, then classification scope, then usage routing, then input/cost notes. The opening line ('This tool calls the Actor ... and retrieves its output results') is boilerplate but short. Overall efficient, one minor piece of 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?

For a complex 11-param classifier with an output schema (so return values needn't be explained) plus rich annotation coverage, the description supplies purpose, scope, an alternative, both input modes, and cost/rate context. Nothing essential for correct invocation is missing, though destructive/cost semantics could be spelled out further.

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 documents all 11 parameters in depth. The description only adds a brief summary of the datasetId/pages relationship ('crawled pages (grouped by site) or pages JSON'), which is already covered by the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource — 'Classify company websites from your crawl' — and enumerates the outputs (industry, B2B/B2C, reach, ICP fit scoring with tier and reason). It explicitly differentiates from the sibling it could be confused with: 'for Google Maps places use leoworks/google-maps-lead-qualifier.' An agent can pick this 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 clear usage context ('Use for company sites') and names the concrete alternative for the Google-Maps case. It also clarifies the two valid input modes (datasetId vs pages JSON). No explicit 'when-not-to-use' beyond the one sibling pointer, so it stops 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.

leoworks--google-maps-lead-qualifierleoworks/google-maps-lead-qualifierA
Destructive
Inspect

This tool calls the Actor "leoworks/google-maps-lead-qualifier" and retrieves its output results. Actor description: Google Maps reviews toolkit by LeoWorks — lead scoring for ICP fit (score 0–100, tier A–D, reason). For reviews use leoworks/google-maps-review-classifier. icp text + places, datasetId or search terms + location. ~3 s/60 places, ~$6/1,000 (compass billed to you).

NameRequiredDescriptionDefault
icpYes**REQUIRED** Describe the businesses you want as leads, in plain language — e.g. “Independent gyms that offer personal training”, “Dental practices that offer cosmetic dentistry such as veneers”. Each place gets a lead score (0–100) for how well it fits. Example values: "Dental practices that offer cosmetic dentistry such as teeth whitening, veneers or smile makeovers."
placesNoPlace objects pasted as JSON (same fields as a Google Maps scraper's output: title, categoryName, categories, additionalInfo, website, phone, totalScore, reviewsCount …). Use this OR “Places dataset” OR “Search terms”. Example values: [{"title":"Kimberly Smiles Cosmetic & General Dentistry","categoryName":"Dentist","categories":["Dentist","Cosmetic dentist","Emergency dental service","Oral surgeon","Teeth whitening service"],"website":"https://dentistwickerparkchicago.com/","phone":"(773) 276-1047","city":"Chicago","totalScore":4.7,"reviewsCount":484},{"title":"Kids Tooth Team","categoryName":"Pediatric dentist","categories":["Pediatric dentist","Dental clinic","Dental hygienist","Dentist","Emergency dental service"],"website":"https://kidstoothteam.com/locations/our-south-austin-office/","phone":"(512) 641-4914","city":"Austin","totalScore":4.9,"reviewsCount":740,"additionalInfo":{"Service options":[{"English":true}],"Offerings":[{"Emergency services":true},{"Pediatric care":true},{"Sedation dentistry":true}]}}]
locationNoWhere to search, for example “Chicago, USA” or “Seoul, South Korea”. Required when you use Search terms (without it the scraper searches around a US data center). One location per run; to cover several cities, run once per city. Ignored with “Places dataset” or “Places”.
maxItemsNoProcess at most this many places (0 = all).
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.
datasetIdNoAn Apify dataset of Google Maps places — for example the output of a Google Maps scraper you ran earlier. Use this OR “Search terms” OR “Places”.
minRatingNoFree pre-filter: skip places rated below this (0 = off). Skipped places are not charged.
minReviewsNoFree pre-filter: skip places with fewer reviews (0 = off).
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
photoLabelsNoUp to 5 extra yes/no checks about what the photo shows, e.g. “has a garden”, “glass storefront” (each up to 200 characters). Needs "Judge the place photo". Not measured: treat the answers as a hint.
customLabelsNoUp to 10 extra yes/no checks (each up to 200 characters) in plain language, e.g. “offers online booking”, “looks like a premium / high-end business”. Each gets a probability.
photoMaxSideNoLongest side in pixels of the photo that is judged (512, 768 or 1024; other values are rounded to the nearest). 1024 reads signs best; smaller is faster. Example values: 1024
requireEmailNoKeep only places with an email address — needs a scraper that collects emails (e.g. Google Maps with Contact Details, or the Google Maps Scraper's contact add-on).
requirePhoneNoFree pre-filter: skip places without a phone number.
excludeChainsNoMark chain and franchise locations as not qualified (they are still checked and charged, with `chain` in the output).
excludeClosedNoFree pre-filter: skip permanently or temporarily closed places. Example values: true
onlyUnclaimedNoKeep only listings the owner has not claimed on Google Maps (when the scraper reports it).
searchQueriesNoOptional. What you would type in the Google Maps search box, one per line, up to 5 — for example “independent dentist”. Needs “Location” below. The Actor then runs compass’ Google Maps scraper (compass/crawler-google-places) for you and scores the places it finds. [Description truncated]
matchThresholdNoMinimum lead score (as a probability 0–1) for a place to count as qualified. Example values: 0.5
maxConcurrencyNoPlaces checked in parallel. Example values: 10
requireWebsiteNoFree pre-filter: skip places without a website.
excludeKeywordsNoFree filter: places whose name or categories contain any of these words are removed before judging, e.g. "hospital", "Aspen Dental". Not case-sensitive.
judgePlacePhotosNoBeta, off by default. For each qualified place, looks at its main Google Maps photo and adds: independent business or known chain, outdoor seating seen, condition of the building (0–4). Costs $0.001 for each photo that gives at least one value (a photo that shows none of them is not charged). The photo is sent to TypeSafe only to be judged and is not stored. [Description truncated]
maxPlacesPerSearchNoOnly used with Search terms: how many places the scraper collects for each term (default 20, at most 200; at most 500 places in total per run). You are billed for every place it collects. If your maximum cost per run is lower than the estimate, the Actor shrinks this number or refuses to start. Example values: 20
onlyWithoutWebsiteNoFor web agencies: keep only businesses that have no website on Google Maps.

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, openWorldHint=true, destructiveHint=true. The description adds genuine non-schema context — throughput (~3 s/60 places) and cost (~$6/1,000, with 'compass billed to you'). It does not explain what is actually destroyed/consumed or any auth requirements, so it is useful but not rich.

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 action and then the actor's purpose and cost/perf facts. Dense and mostly free of waste, though the 'Actor description:' framing is slightly mechanical.

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 values need not be re-explained, and the description still summarizes the output (score, tier, reason). For a 25-parameter, paid, open-world tool it covers routing, inputs, cost and speed adequately, leaving only deeper behavioral detail unstated.

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 there are 25 parameters, so the schema carries the parameter detail. The description only summarizes the high-level input combinations (icp + places/datasetId/search terms + location) without adding format or constraint 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.

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 ('calls the Actor leoworks/google-maps-lead-qualifier and retrieves its output results') and the actor's purpose ('lead scoring for ICP fit (score 0–100, tier A–D, reason)'). It also names a sibling (review classifier) as the alternative for a different task, so an agent can distinguish it. It falls short of 5 because it doesn't contrast against the many other classifier siblings.

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

Usage Guidelines4/5

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

It routes one scenario explicitly ('For reviews use leoworks/google-maps-review-classifier') and lists the accepted input combinations ('icp text + places, datasetId or search terms + location'). It gives clear context for invocation but no explicit when-not-to-use beyond the review case.

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

leoworks--google-maps-review-classifierleoworks/google-maps-review-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/google-maps-review-classifier" and retrieves its output results. Actor description: Google Maps reviews toolkit by LeoWorks — review analysis: complaints, praise, sentiment, reply queue. For leads use leoworks/google-maps-lead-qualifier. places = Maps URLs/IDs or names + location; datasetId = reviews. ~25 s/place, ~$1.10/1,000 (compass billed to you).

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line) when you already have them and do not want to use a dataset. Ignored when “Places” or “Reviews dataset” is set.
placesNoOne place per line, up to 20. PREFERRED: the place's Google Maps URL or place ID (starts with ChIJ) — it names the exact branch, and you can leave “Location” below empty. For a URL, open the place on Google Maps and copy the full address-bar URL (the long one with “data=!…”), or the “cid” / “place_id” form; search-result pages and coordinates-only URLs do not work. [Description truncated] Example values: ["https://www.google.com/maps/search/?api=1&query=Joe's%20Pizza%20Broadway&query_place_id=ChIJifIePKtZwokRVZ-UdRGkZzs","https://www.google.com/maps/search/?api=1&query=Katz's%20Delicatessen&query_place_id=ChIJCar0f49ZwokR6ozLV-dHNTE"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, placeId). Leave empty to auto-pick reviewId and placeId.
locationNoWhere to search for the brand or business names in “Places”, for example “Seoul, South Korea” or “Chicago, USA” — one location per run; city + country works best. Required when any line in “Places” is a name. Leave empty when all lines are Google Maps URLs or place IDs (they already identify the exact place). Names in different cities: use their URLs or place IDs instead.
maxItemsNoClassify at most this many reviews (0 = all).
maxStarsNoFor example 3 = classify only 1–3 star reviews (the ones that usually need attention). 0 = all ratings. Reviews without a star rating are kept.
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.
datasetIdNoAn Apify dataset containing Google Maps reviews — for example the output of a Google Maps reviews scraper. Use this OR “Places” (not both); it takes priority over “Review texts”.
dateFieldNoLeave empty to auto-detect (publishedAtDate, date, …). Used for the monthly trend, the last-90-days comparison and the date filter.
textFieldNoField holding the review text. Leave empty to auto-detect (text, reviewText, review, …).
monitorKeyNoAny name for this watch list, e.g. `my-cafes`. Run again with the same key and each place row gets `previousRunAt`, `ratingDelta`, `newReviews`, `newCriticalIssues` and `unrepliedDelta` (change since the last run with that key; the first run only saves the baseline). Leave empty to switch comparison off. [Description truncated]
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
ratingFieldNoLeave empty to auto-detect (stars, rating, …).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) in plain language, e.g. “mentions parking”, “complains about a specific employee”. Each gets a probability.
maxConcurrencyNoReviews classified in parallel. Example values: 10
placeNameFieldNoLeave empty to auto-detect (title, placeName). Not `name` — in review datasets that is usually the reviewer.
extraTextFieldsNoFields to prepend to the text (up to 5). Leave empty if unsure.
ownerReplyFieldNoLeave empty to auto-detect (responseFromOwnerText, ownerResponse, …). Used for “unanswered” and the reply queue.
reviewsNewerThanNoClassify only reviews published after this date — a date like `2026-01-01` or a period like `90 days`, `6 months`, `1 year`. Needs a review date in the dataset (e.g. `publishedAtDate`). Leave empty for all.
summaryGroupFieldNoField in your dataset that identifies the business (e.g. `placeId`, `title`). The run then saves a REPORT record with, per place: complaint rate and complaint mix, sentiment shares, average rating, reviews needing an owner reply (and how many are still unanswered) and 3 example complaints. Leave empty to detect it automatically. No extra charge.
complaintThresholdNoMinimum probability (0–1) for a complaint type, the owner-reply flag or a custom label to be reported. Raise it for fewer, surer labels. Example values: 0.5
maxReviewsPerPlaceNoClassify at most this many reviews per place (counted in dataset order — Google Maps scrapers list the newest first when sorted by newest). With “Places”, this is how many of the newest reviews to collect per place (0 = 50). 0 = no limit for a dataset. 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.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true, openWorldHint=true), and the description adds real behavioral context beyond them: timing (~25 s/place) and cost (~$1.10/1,000, with the compass Actor billed to the caller). That cost/billing disclosure is valuable for a paid, externally-billed tool.

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

Conciseness4/5

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

Short and front-loaded with the core action, then supporting routing/cost facts. Every sentence carries information, though the mix of Actor-wrapper boilerplate and parameter hints makes it slightly dense.

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 explained, and the description provides the missing routing, cost, and sibling-alternative context for a 23-parameter tool. Adequate and complete enough for an agent to select and configure it.

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 23 parameters. The description adds only light routing hints (places vs datasetId), 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 states a specific verb+resource: it calls the 'leoworks/google-maps-review-classifier' Actor and retrieves its output, and summarizes the analysis domain (complaints, praise, sentiment, reply queue). It also distinguishes itself from the lead-qualifier sibling. Clear, though the purpose statement is somewhat buried under cost/parameter routing notes.

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

Usage Guidelines4/5

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

It names an alternative for a related task ('For leads use leoworks/google-maps-lead-qualifier') and clarifies the input routing ('places = Maps URLs/IDs or names + location; datasetId = reviews'). It lacks an explicit when-not-to-use statement, but the routing guidance is genuinely actionable.

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

leoworks--japanese-review-classifierleoworks/japanese-review-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/japanese-review-classifier" and retrieves its output results. Actor description: Classify Japanese reviews (Rakuten 楽天レビュー) into complaint types, sentiment and purchase motive — Japanese review sentiment analysis (レビュー分析). Use for Japanese; for Korean use leoworks/korean-review-classifier. datasetId (text auto-detected) or texts. ~100 reviews/5 s, pay per review.

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line). Use this OR “Reviews dataset”. Example values: ["ダンボールが潰れて届きました。中身は無事でしたが、梱包をもう少し丁寧にしてほしいです。","すぐ壊れました。充電できません。返品したいです。"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, productId). Leave empty to auto-pick reviewId/id/url.
maxItemsNoClassify at most this many reviews (0 = all).
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.
datasetIdNoAn Apify dataset containing reviews — for example the output of a Rakuten review scraper. Use this OR “Review texts”.
textFieldNoField holding the review text. Leave empty to auto-detect (content, text, review, body, reviewText, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) written in plain language (English or Japanese), e.g. “mentions the smell”, “配達員の対応が悪い”. Each gets a probability.
maxConcurrencyNoReviews classified in parallel. Example values: 10
extraTextFieldsNoFields to prepend to the text (up to 5), e.g. `title` for Coupang review headlines. Leave empty if unsure.
summaryGroupFieldNoField in your dataset that identifies the product (e.g. `productId`, `productName`, `placeId`). The run then saves a REPORT record with, per product: complaint rate and complaint mix, sentiment shares, purchase motives, average rating and 3 example complaints. Leave empty to detect it automatically (overall summary only if none is found). No extra charge.
complaintThresholdNoMinimum probability (0–1) for a complaint type or custom label to be reported. Raise it for fewer, surer labels. Example values: 0.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

A3.9/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false and destructiveHint=true, which is misleading for what is essentially a classification read operation. The description adds useful throughput context (~100 reviews/5 s, pay per review, auto-detection of datasetId/texts), partially offsetting the annotation mismatch. However, it does not clarify the destructive-hint implication or the write/return profile.

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 routing rule, then throughput and pricing. Slightly dense but no filler sentences; every clause about language, inputs, and cost is useful.

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 classifier with an output schema and rich schema descriptions, the description covers purpose, language routing, input options, throughput, and cost. It omits detail on the output format, but the output schema and per-parameter descriptions cover that. The mismatch with the destructive annotation is the one notable 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 the schema already documents all 13 parameters thoroughly. The description only adds the auto-detection behavior for datasetId/texts and the pricing model, which is marginal over what the schema provides. Baseline 3 is appropriate when the schema carries the load.

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

Purpose5/5

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

The description states a precise verb and resource — classify Japanese reviews into complaint types, sentiment, and purchase motive — and explicitly distinguishes itself from the sibling leoworks/korean-review-classifier by language. An agent can route by language without opening either 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?

It clearly states when to use this tool (Japanese reviews) and names the alternative for Korean. It does not spell out when-not to use it versus, say, the amazon or google-maps review classifiers, but the language scoping is a strong routing signal.

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

leoworks--job-posting-classifierleoworks/job-posting-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/job-posting-classifier" and retrieves its output results. Actor description: Filter LinkedIn jobs and Indeed or Glassdoor postings: remote/hybrid/on-site, visa sponsorship jobs, USD salary. Job posting classifier. Use for job data; for company sites use leoworks/company-website-classifier. datasetId = jobs scraper output, or jobs JSON. ~180 jobs/9 s, pay per job.

NameRequiredDescriptionDefault
jobsNoPostings pasted as JSON objects (title, company, location, description) or plain description strings. Use this OR “Job postings dataset”. Example values: [{"title":"Senior Data Analyst","company":"Example Co","location":"Chicago, IL","description":"Hybrid role: 3 days a week in our Chicago office. 5+ years of SQL and BI experience required. Full-time. Salary $110,000–$130,000 per year. We are unable to sponsor work visas."},{"title":"Warehouse Associate","company":"Example Logistics","location":"Dallas, TX","description":"Entry level — no experience needed, we train you. Part-time evening shifts, in person at our Dallas warehouse. $18/hour."}]
skillsNoUp to 100 skills, tools or keywords (e.g. Python, SQL, Salesforce, CDL, RN license). Each posting gets a `skills` column with the ones it mentions — whole words, matched by code at no extra charge. Not case-sensitive, except short skills typed with a capital (`Go`, `R`, `C`): those must appear as typed, so the word "go" or "Go-to-Market" does not count as Go. Example values: ["Python","SQL","AWS","Excel","Salesforce"]
maxItemsNoClassify at most this many postings (0 = all).
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.
datasetIdNoAn Apify dataset of job postings — for example the output of a LinkedIn or Indeed jobs scraper. Use this OR “Job postings”.
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no checks (each up to 200 characters) in plain language, e.g. “requires a security clearance”, “mentions Python”, “offers a signing bonus”. Each gets a probability.
postedWithinNoe.g. `7 days`, `2 weeks`, `1 month`. Older postings are skipped (not charged). Postings without a date are kept.
maxPerCompanyNoClassify at most this many postings per company. 0 = no limit.
titleExcludesNoFree filter, e.g. "intern", "senior", "manager".
titleIncludesNoFree filter on the job title, e.g. "engineer", "nurse". Not case-sensitive.
labelThresholdNoMinimum probability (0–1) for a custom label to be marked as matched. Example values: 0.5
maxConcurrencyNoPostings classified in parallel. Example values: 10
dedupeAcrossBoardsNoThe same job ID, or the same title + company + city (e.g. from LinkedIn and Indeed), is classified and charged once. Example values: true
minDescriptionCharsNoDataset postings with a shorter description (or none — some scrapers only return titles) are skipped and not charged: a title alone is not enough to judge work mode, experience or visa. Example values: 120

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=true and destructiveHint=true, so the safety/open-world profile is covered structurally. The description adds genuinely non-redundant behavior: the billing model ('pay per job'), the throughput ('~180 jobs/9 s'), and that some inputs are skipped without charge (mentioned in schema-side params too). It does not explain that a run is created or how results are surfaced, but billing and rate context is meaningful beyond the 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?

It is compact and front-loads the relevant information (purpose, alternative sibling, input source, cost). The middle fragment 'Job posting classifier.' is a near-tautological restatement of the title, and the 'Actor description:' prefix is mechanical, but overall there is little wasted text.

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 does not need to explain return values, and it correctly defers to the schema for the 15 parameters. It covers domain, alternative tool, input source and cost/rate. The main gap is that it omits the jobs-or-datasetId input requirement, which an agent needs to call the tool successfully given 0 required 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 the schema already documents all 15 parameters in detail; baseline is 3. The description adds only one clause of param meaning ('datasetId = jobs scraper output, or jobs JSON'), which mildly clarifies datasetId but duplicates the schema note 'Use this OR Job postings'. No additional syntax or defaulting semantics are supplied.

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 identifies the Actor being invoked and the resource domain: filtering/classifying job postings from LinkedIn, Indeed or Glassdoor by work mode, visa sponsorship and USD salary. It also distinguishes itself from a sibling ('for company sites use leoworks/company-website-classifier'), so an agent can tell it apart from other classifiers. The boilerplate opener ('calls the Actor ... retrieves its output results') is generic, but the embedded actor description carries the real purpose.

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 gives one explicit routing rule ('Use for job data; for company sites use leoworks/company-website-classifier') and states the cost/throughput profile ('~180 jobs/9 s, pay per job'). However it never states the precondition that the caller must supply either the jobs payload or a datasetId, and there are no when-not-to-use conditions for the many filtering parameters. Usage is implied rather than fully spelled out.

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

leoworks--kbeauty-ranking-review-monitorleoworks/kbeauty-ranking-review-monitorA
Destructive
Inspect

This tool calls the Actor "leoworks/kbeauty-ranking-review-monitor" and retrieves its output results. Actor description: Track Olive Young rankings and K-beauty bestsellers on Olive Young Global and Amore Mall (아모레몰); collect reviews. Use for rankings; for existing reviews use leoworks/korean-review-classifier. reviewsPerProduct 0 = rankings only. No login, rank history in your key-value store. Pay per item.

NameRequiredDescriptionDefault
brandsNoOptional. Keep only products of these brands (English or Korean name, e.g. COSRX, 설화수). The whole ranking (up to 100) is searched and the original rank is kept.
sourcesNoWhich bestseller rankings to collect. Leave empty to only collect reviews for the product pages below. Example values: ["oliveyoung_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.
reviewSortNoAmore Mall supports Newest and Most helpful; other orders fall back to Newest there. Example values: "newest"newest
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
productUrlsNoOptional. Olive Young Global or Amore Mall product pages to collect reviews for, in addition to the ranked products.
maxConcurrencyNoRankings and products processed in parallel. Example values: 5
amoremallPeriodNoRanking period on Amore Mall. Example values: "daily"daily
classifyReviewsNoAdd complaint types, sentiment and purchase motive to each Korean, English or Japanese review (charged per review as review-judged). Example values: true
rankHistoryStoreNoName of a key-value store in your Apify account that keeps the last snapshot of each ranking. Ranking rows then show `previousRank`, `rankChange` (positive = moved up) and `isNew` (not in the previous ranking). Run on a schedule to track movement. Use a different name per project; leave empty to turn this off. No extra charge. Example values: "kbeauty-ranking-history"kbeauty-ranking-history
amoremallAgeGroupNoBuyer age group for the Amore Mall ranking. Example values: "all"all
amoremallRankingsNoAmore Mall ranking tabs to collect. Example values: ["best_purchased"]
reviewsPerProductNoReviews to collect for each product (0 = rankings only). Charged per review. The form starts at 5 for a quick first run; raise it up to 1,000 (default when omitted via API: 20). Example values: 5
complaintThresholdNoMinimum probability (0–1) for a complaint type to be reported. Example values: 0.5
proxyConfigurationNoDefault Apify datacenter proxy works for both sites. Example values: {"useApifyProxy":true}
amoremallCategoriesNoAmore Mall categories (one ranking per category and ranking type). Example values: ["all"]
residentialFallbackNoRetry failing requests through Korean residential proxy. Example values: true
oliveyoungCategoriesNoBestseller tabs to collect (one ranking per category). Example values: ["all"]
includeProductDetailsNoAdd each Olive Young Global ranking product's information sheet as `productDetails`: full ingredient list, volume, skin type it is made for, country of manufacture, manufacturer, plus all other sheet fields. One extra request per product; no extra charge. Amore Mall rows are not covered.
maxProductsPerRankingNoTop N products of each ranking (rankings have up to 100 products). Each product row is charged as ranking-item. The form starts at 5 for a quick first run; raise it up to 100 (default when omitted via API: 20). 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

A3.8/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: no login required, rank history is written to the caller's key-value store, and billing is per item. It does not explain what the 'destructive' aspect actually is, nor run lifecycle/polling behavior, though the waitSecs parameter covers the latter.

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 content sentence is dense and front-loaded with the domains and the sibling routing, followed by short operational facts (0 = rankings only, no login, KV store, pay per item). The only waste is the 'calls the Actor ... and retrieves its output results' preamble, which conveys nothing an agent needs.

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?

For a 20-parameter Actor wrapper with an output schema and full annotation coverage, this is complete enough: the agent learns the source sites, the ranking-vs-review distinction, the zero-review escape hatch, the cost model, auth requirements, and where history is persisted. Return-value shape is handled by the output schema, so nothing essential 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% and the 20 parameters carry detailed per-field descriptions (including enum titles and Korean labels), so the schema does the heavy lifting and the baseline is 3. The description's only parameter-level addition, 'reviewsPerProduct 0 = rankings only', restates what the schema already says, so no credit above baseline.

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 concrete resource set: Olive Young Global and Amore Mall (아모레몰) bestseller rankings plus review collection. The opening boilerplate ('calls the Actor ... and retrieves its output results') is generic, but the Actor description immediately delivers a specific verb+resource that an agent can act on and distinguishes it from the review classifiers.

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

Usage Guidelines4/5

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

It explicitly routes the agent: 'Use for rankings; for existing reviews use leoworks/korean-review-classifier', and clarifies 'reviewsPerProduct 0 = rankings only'. That is a real use/exclusion split with a named alternative. It stops short of stating other conditions (e.g. when to prefer the naver-shopping-rank-tracker sibling or when rankings are unnecessary).

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

leoworks--korean-review-classifierleoworks/korean-review-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/korean-review-classifier" and retrieves its output results. Actor description: Classify Korean reviews (Coupang review analysis 쿠팡 리뷰, Naver): complaint types, sentiment, purchase motive. Korean review sentiment analysis. Use for Korean; for Japanese use leoworks/japanese-review-classifier. datasetId (text auto-detected) or texts. ~100 reviews/5 s, pay per review.

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line). Use this OR “Reviews dataset”. Example values: ["배송이 일주일이나 걸렸고 박스가 다 찢어져서 왔어요.","항상 쓰던 거라 이번에도 재구매했어요. 할인할 때 사니 좋네요!"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, productId). Leave empty to auto-pick reviewId/id/url.
maxItemsNoClassify at most this many reviews (0 = all).
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.
datasetIdNoAn Apify dataset containing reviews — for example the output of a Coupang, Naver Shopping, Naver Place or Olive Young review scraper. Use this OR “Review texts”.
textFieldNoField holding the review text. Leave empty to auto-detect (content, text, review, body, reviewText, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) written in plain language (English or Korean), e.g. “mentions the smell”, “배송 기사 불친절 언급”. Each gets a probability.
maxConcurrencyNoReviews classified in parallel. Example values: 10
extraTextFieldsNoFields to prepend to the text (up to 5), e.g. `title` for Coupang review headlines. Leave empty if unsure.
summaryGroupFieldNoField in your dataset that identifies the product (e.g. `productId`, `productName`, `placeId`). The run then saves a REPORT record with, per product: complaint rate and complaint mix, sentiment shares, purchase motives, average rating and 3 example complaints. Leave empty to detect it automatically (overall summary only if none is found). No extra charge.
complaintThresholdNoMinimum probability (0–1) for a complaint type or custom label to be reported. Raise it for fewer, surer labels. Example values: 0.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

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly=false, openWorld=true, destructive=true), so the description is not required to explain mutability. It adds genuinely non-annotation context: throughput (~100 reviews/5 s) and a pay-per-review cost model, which matter for an agent deciding whether to batch. It does not address the destructiveHint or the async polling pattern, which keeps it from a 5.

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

Conciseness4/5

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

Dense and mostly front-loaded — language scope, sibling routing, input modes, throughput and cost all in a few lines. The redundant "This tool calls the Actor ... and retrieves its output results" sentence adds no information but is short.

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

Completeness4/5

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

For a 13-parameter, no-required-param Actor wrapper with a full output schema, the description supplies what the schema cannot: language applicability, sibling routing, cost model, and throughput. Return-value semantics are correctly left to the output 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 all 13 parameters are already documented in the schema, including the auto-detect behavior of textField and summaryGroupField. The description only restates the two primary input modes (datasetId or texts), 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.

Purpose4/5

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

The boilerplate opener ("calls the Actor ... and retrieves its output results") is a tautology, but the embedded Actor description gives a specific verb+resource: classify Korean reviews for complaint types, sentiment, and purchase motive. It clearly separates itself from the Japanese/Spanish/AliExpress classifier siblings by naming the language domain.

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?

"Use for Korean; for Japanese use leoworks/japanese-review-classifier" gives an explicit routing rule to the nearest sibling. It does not state when-not to use it (e.g. non-review text, mixed-language batches), but the primary selection decision is answered.

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

leoworks--naver-ai-briefing-monitorleoworks/naver-ai-briefing-monitorA
Destructive
Inspect

This tool calls the Actor "leoworks/naver-ai-briefing-monitor" and retrieves its output results. Actor description: Track your brand in the Naver AI briefing (네이버 AI 브리핑): answer, cited sources, AI ads — AI search visibility and GEO. Use for AI answers; for shop ranks use leoworks/naver-shopping-rank-tracker. queries in Korean; brandNames flag mentions. No login, ~10 s/2 queries, pay per query.

NameRequiredDescriptionDefault
queriesYes**REQUIRED** Korean search queries to check. Informational, how-to, review and comparison queries trigger AI briefings most often (see README). Example values: ["콜라겐 효과","전기포트 세척 방법"]
surfaceNoPC search shows AI briefings slightly more often in our tests. Example values: "pc"pc
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.
brandNamesNoBrands to check in each AI briefing (Korean or English).
includeAdsNoAlso request the ads Naver attaches to the AI briefing. Example values: true
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
maxConcurrencyNoQueries checked in parallel. Example values: 5
competitorNamesNoCompetitors to check the same way. Brands + competitors: up to 10 in total.
proxyConfigurationNoDefault Apify datacenter proxy works for most users. Example values: {"useApifyProxy":true}
residentialFallbackNoRetry failing requests through Korean residential proxy. 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.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=true, and the description adds genuinely new context: no login required, ~10 s per 2 queries, pay-per-query cost, and that results are polled/returned at the waitSecs cap. These cost, auth and latency facts are exactly what annotations cannot convey.

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 sentence ("This tool calls the Actor ... and retrieves its output results") is boilerplate, but the Actor description that follows is dense and front-loaded with the discriminating facts. Overall it is appropriately sized with little waste.

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

Completeness4/5

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

For a 10-parameter wrapper with an output schema, the description covers purpose, routing, cost, latency and auth while the schema and output schema carry parameter and return detail. Proxy configuration, concurrency and healthCheck are left to the schema, which is acceptable.

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 prose adds only "queries in Korean" and "brandNames flag mentions", both of which are already effectively stated by the schema, so it does not meaningfully extend parameter meaning.

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

Purpose5/5

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

The description names a concrete action (calls the Actor and retrieves its output) and then states the Actor's actual purpose: tracking brands in the Naver AI briefing with answers, cited sources, and AI ads. It explicitly distinguishes itself from the sibling leoworks/naver-shopping-rank-tracker, so an agent can route without opening either 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?

"Use for AI answers; for shop ranks use leoworks/naver-shopping-rank-tracker" gives a clear when-to-use plus a named alternative with the condition that selects it. What is missing is guidance on the other siblings or on prerequisites beyond "no login" (e.g. Apify proxy/account expectations), which keeps it short of a full 5.

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

leoworks--naver-blog-brand-monitorleoworks/naver-blog-brand-monitorA
Destructive
Inspect

This tool calls the Actor "leoworks/naver-blog-brand-monitor" and retrieves its output results. Actor description: Naver Blog scraper (네이버 블로그): posts by keyword, sponsored post detection (체험단/협찬), sentiment, brand mentions — Korean social listening. Use for blog posts; for shop ranks use leoworks/naver-shopping-rank-tracker. queries = Korean keywords. No login, ~6 min/1,000 posts, pay per post.

NameRequiredDescriptionDefault
sortNoMost recent posts first (good for monitoring) or Naver relevance order. Example values: "recent"recent
judgeNoWhich judgments to add (charged as post-judged per post when any is on): sponsored (체험단/협찬 vs 내돈내산), sentiment, brandMention. Example values: {"sponsored":true,"sentiment":true,"brandMention":true}
queriesYes**REQUIRED** Naver Blog search queries — usually your brand or product name in Korean (e.g. 라운드랩 선크림, 다이슨 에어랩 후기). Example values: ["라운드랩 선크림"]
dateFromNoOnly posts published on or after this date (YYYY-MM-DD).
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.
ncpApiKeyNoOptional secret key paired with the key ID above.
brandNamesNoBrands whose mention you want checked in every post (Korean or English, e.g. 라운드랩, Round Lab). Up to 10. Example values: ["라운드랩"]
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
ncpApiKeyIdNoOptional. Use your own NAVER Cloud (NCP) NAVER API Hub key for post discovery instead of web search — steadier for large daily volumes. See README.
maxConcurrencyNoPosts processed in parallel. Example values: 10
includeFullTextNoAdd the full post text to each row (larger output).
maxPostsPerQueryNoUp to 1,000 posts per query. The form starts at 8 for a quick, low-cost first run (default when omitted via API: 50). Example values: 8
proxyConfigurationNoDefault Apify datacenter proxy works for most users. Example values: {"useApifyProxy":true}
residentialFallbackNoRetry failing requests through Korean residential proxy. 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.9/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=true, openWorld=true; the description adds genuinely useful operational context: no login required, roughly 6 minutes per 1,000 posts, and pay-per-post billing. That cost/latency/auth profile is exactly what an agent needs before committing, though it never explains the destructiveHint in terms of credits consumed or dataset writes.

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 with no filler, and the pricing/latency constraints are stated up front. The opening clause about calling the Actor and retrieving results is wrapper boilerplate that could be dropped.

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 14-parameter Actor with full schema coverage and an output schema, the description covers purpose, cost, runtime, auth, language of queries, and the nearest alternative. It omits any hint about polling behaviour when the wait cap is hit, but waitSecs and nextStep in the schema already handle that.

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 nearly every parameter is already documented in detail, including the judged-posting charges and maxPostsPerQuery limits. The description only adds that queries are Korean keywords, which duplicates 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 names a specific resource (Naver Blog posts by keyword) and the analyses performed (sponsored post detection, sentiment, brand mentions), which is far more than the tool name conveys. It is slightly muddied by the boilerplate opener about calling the Actor, but an agent can still tell what it does and how it differs from leoworks--naver-shopping-rank-tracker.

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?

Explicitly says 'Use for blog posts' and routes shop-rank needs to leoworks/naver-shopping-rank-tracker, so the main sibling ambiguity is resolved. It also notes queries must be Korean keywords. There is no guidance on when not to use it beyond that one sibling, 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.

leoworks--naver-shopping-rank-trackerleoworks/naver-shopping-rank-trackerA
Destructive
Inspect

This tool calls the Actor "leoworks/naver-shopping-rank-tracker" and retrieves its output results. Actor description: Naver Shopping rank tracker (네이버 쇼핑 순위, Smartstore rank tracker): organic rank 1–35, ad slot, price per keyword. Use for ranks; for blogs use leoworks/naver-blog-brand-monitor. targets = keyword + product URL/ID/store. No login, 3–10 s/keyword, rank history in your key-value store. Pay per keyword.

NameRequiredDescriptionDefault
targetsYes**REQUIRED** One entry per keyword × target. `keyword` = Korean search keyword. `match` = what to find: a product URL (smartstore.naver.com/.../products/123, brand.naver.com/..., search.shopping.naver.com/catalog/123, or your own mall's product URL), a numeric product ID (Naver product/catalog ID or smartstore product number), or a store name / smartstore slug. Leave `match` empty to just snapshot the keyword (use with Top competitors). Example values: [{"keyword":"무선이어폰","match":"브리츠 공식몰"},{"keyword":"무선이어폰","match":"https://search.shopping.naver.com/catalog/56796984706"}]
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.
includeAdsNoAlso report the target's position among sponsored (ad) slots as `adRank`. Example values: true
outputModeNo`full` = all fields. `minimal` = rank, price, store and title only (smaller, faster to process). Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
maxConcurrencyNoHow many keywords to check in parallel. Example values: 5
topCompetitorsNoAttach the top N organic products for each keyword (0–40). Charged per item as `competitor-item`. Attached once per keyword.
rankHistoryStoreNoName of a key-value store in your Apify account that keeps the last organic rank of each keyword × target. Each row then shows `previousOrganicRank`, `rankChange` (positive = moved up) and `isNew` (found now, not found last time). Run on a schedule to track movement. Use a different name per project; leave empty to turn this off. No extra charge. Example values: "naver-shopping-rank-history"naver-shopping-rank-history
proxyConfigurationNoDefault (Apify datacenter proxy) works for most users. Example values: {"useApifyProxy":true}
residentialFallbackNoIf a keyword keeps failing on the default proxy, retry it through Korean residential proxy. 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.6/5.0
Behavior3/5

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

The annotations are already rich (readOnlyHint=false, destructiveHint=true, openWorldHint=true). The description adds real context beyond them: no login, 3–10 s per keyword, pay-per-keyword billing, and rank history persisted in a key-value store. However, with destructiveHint=true declared, an agent gets no word on what is actually mutated or how the key-value store is written — the description never addresses that risk surface.

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?

It is dense but front-loaded: the Actor identity and what it returns come first, then the sibling routing rule, then operational constraints. Semicolon-run-on phrasing ('No login, 3–10 s/keyword, rank history in your key-value store. Pay per keyword.') is slightly terse but every sentence earns its place.

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 10-parameter Actor wrapper with a full output schema and 100% schema coverage, the description supplies exactly what the schema cannot: cost model, runtime, auth requirements, sibling routing, and history behavior. Given annotations already declare the safety profile and the output schema exists, this is close to complete; only the async polling/nextStep flow is left entirely to 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 coverage is 100%, so the heavy lifting is already done by the schema — including the detailed targets description, waitSecs polling behavior, and rankHistoryStore semantics. The description only echoes 'targets = keyword + product URL/ID/store', which is a helpful orientation but not new information. 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 the exact Actor and states what it returns: organic rank 1–35, ad slot, and price per keyword for Naver Shopping. It also explicitly separates itself from the sibling naver-blog-brand-monitor. The only weakness is the generic wrapper phrasing in the first sentence, which restates the tool name instead of adding meaning.

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

Usage Guidelines4/5

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

It gives an explicit routing rule ('Use for ranks; for blogs use leoworks/naver-blog-brand-monitor') and notes you need no login and should schedule runs to build rank history. It never states when NOT to use it (for example, for product detail scraping or price monitoring at scale), so it falls just 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.

leoworks--social-comment-classifierleoworks/social-comment-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/social-comment-classifier" and retrieves its output results. Actor description: Classify Instagram, TikTok, Facebook, YouTube comments: buying intent, sentiment — Instagram comments sentiment and TikTok comments analyzer. Use for comments; for reviews use leoworks/korean-review-classifier. datasetId (text auto-detected) or texts. ~100 comments/4 s, pay per comment.

NameRequiredDescriptionDefault
textsNoPaste comment texts directly (one per line). Use this OR “Comments dataset”. Example values: ["Where can I buy this in Canada? Need it!!","Ordered 3 weeks ago and still nothing. Is anyone answering messages?"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. id, cid, postUrl). Leave empty to auto-pick the comment ID and post URL.
maxItemsNoClassify at most this many comments (0 = all).
minLikesNo0 = all. Comments without a like count are kept.
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.
datasetIdNoAn Apify dataset containing comments — for example the output of an Instagram, TikTok, Facebook or YouTube comment scraper. Use this OR “Comment texts”.
textFieldNoField holding the comment text. Leave empty to auto-detect (text, comment, content, body, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
skipRepliesNoClassify only top-level comments, not replies to other comments.
contextFieldNoField holding the title or caption of the post the comment was written under (helps with short comments like “link?”). Leave empty to auto-detect (postTitle, title, …).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) written in plain language, e.g. “mentions shipping to Canada”, “asks about a discount code”. Each gets a probability.
includeAuthorNoAdd the commenter's public username to each row and save BUYERS.csv (one row per commenter with purchase intent). Off by default. Usernames are only copied from your dataset, never sent for classification. Use them in line with the platform's terms and privacy law.
skipEmojiOnlyNoSkip comments with no letters or digits ("🔥🔥", "❤️"). They are mostly praise; skipping them saves cost.
excludeAuthorsNoUsernames whose comments are skipped — usually your own brand or support accounts (with or without @).
labelThresholdNoMinimum probability (0–1) for the needs-reply flag and custom labels to be marked as matched. Raise it for fewer, surer matches. Example values: 0.5
maxConcurrencyNoComments classified in parallel. Example values: 10
skipOwnerRepliesNoSkip comments flagged by the scraper as written by the channel owner or creator (e.g. YouTube `authorIsChannelOwner`), plus any account listed in **Exclude accounts**. Example values: true
commentsNewerThanNoClassify only comments posted after this date — a date like `2026-10-01` or a period like `7 days`, `4 weeks`, `3 months`. Relative dates such as "3 days ago" (YouTube) are counted back from the run time. Leave empty for all.
summaryGroupFieldNoField in your dataset that identifies the post (e.g. `postUrl`, `videoWebUrl`, `videoId`). The run then saves a REPORT record with, per post: comment type mix, sentiment shares, share needing a reply and example purchase-intent, question, complaint and request comments. Leave empty to detect it automatically (overall summary only if none is found). No extra charge.
maxCommentsPerPostNoClassify at most this many comments per post or video, in dataset order. 0 = no limit.
expandNestedRepliesNoDatasets that keep replies inside a comment (Instagram `replies`, Facebook `comments`) or comments inside a post (Instagram Scraper `latestComments`) are flattened to one row per comment. 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
Behavior4/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 safety profile is carried structurally. The description adds genuinely useful context beyond that: throughput (~100 comments/4 s) and cost model (pay per comment), which is exactly the kind of rate/pricing disclosure that helps an agent plan a call. It stops short of explaining why destructiveHint is set (i.e. that a billable Actor run is created).

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?

Reasonably short and front-loaded, but the opening sentence ("calls the Actor ... and retrieves its output results") is wrapper boilerplate, and the platform list is redundantly repeated ("Instagram comments sentiment and TikTok comments analyzer") as SEO padding rather than new information.

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

Completeness4/5

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

An output schema exists and schema coverage is 100%, so return values and most parameter meaning need not be restated. The description supplies purpose, the sibling alternative, and cost/throughput, which is close to complete for a 22-param classification Actor, though the destructive annotation remains unexplained.

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 22 parameters, so the schema does the heavy lifting and the baseline is 3. The description only restates the datasetId/texts choice and text auto-detection, adding nothing the schema does not already say.

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

Purpose5/5

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

The Actor description names a specific verb and resource (classify Instagram, TikTok, Facebook, YouTube comments) plus the outputs it produces (buying intent, sentiment), and explicitly distinguishes itself from the sibling review classifiers. An agent can tell what it does and when it is the wrong tool 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?

"Use for comments; for reviews use leoworks/korean-review-classifier" gives an explicit when-to-use and a named alternative. The guidance is incomplete because the sibling list contains many other review classifiers (amazon, aliexpress, japanese, spanish, google-maps) that are not mentioned, so the routing rule is only partially drawn.

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

leoworks--spanish-review-classifierleoworks/spanish-review-classifierA
Destructive
Inspect

This tool calls the Actor "leoworks/spanish-review-classifier" and retrieves its output results. Actor description: Classify Spanish reviews (MercadoLibre reseñas) into complaint types, sentiment and purchase motive — Spanish review sentiment analysis. Beta. Use for Spanish; for Korean use leoworks/korean-review-classifier. datasetId (text auto-detected) or texts. ~100 reviews/5 s, pay per review.

NameRequiredDescriptionDefault
textsNoPaste review texts directly (one per line). Use this OR “Reviews dataset”. Example values: ["El paquete llegó aplastado y uno de los auriculares no funciona.","Siempre lo compro, excelente calidad. ¡Lo volvería a comprar!"]
idFieldsNoFields copied unchanged from each input item to the output so you can join results back (e.g. reviewId, productId). Leave empty to auto-pick reviewId/id/url.
maxItemsNoClassify at most this many reviews (0 = all).
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.
datasetIdNoAn Apify dataset containing reviews — for example the output of a MercadoLibre review scraper. Use this OR “Review texts”.
textFieldNoField holding the review text. Leave empty to auto-detect (content, text, review, body, reviewText, …).
outputModeNoMinimal mode returns only label keys — smaller and easier to aggregate. Example values: "full"full
healthCheckNoInternal: fail the run when results look degraded (used by the developer's scheduled checks).
customLabelsNoUp to 10 extra yes/no labels (each up to 200 characters) written in plain language (English or Spanish), e.g. “mentions the smell”, “menciona el olor”. Each gets a probability.
maxConcurrencyNoReviews classified in parallel. Example values: 10
extraTextFieldsNoFields to prepend to the text (up to 5), e.g. `title` for Coupang review headlines. Leave empty if unsure.
summaryGroupFieldNoField in your dataset that identifies the product (e.g. `productId`, `productName`, `placeId`). The run then saves a REPORT record with, per product: complaint rate and complaint mix, sentiment shares, purchase motives, average rating and 3 example complaints. Leave empty to detect it automatically (overall summary only if none is found). No extra charge.
complaintThresholdNoMinimum probability (0–1) for a complaint type or custom label to be reported. Raise it for fewer, surer labels. Example values: 0.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

A3.8/5.0
Behavior3/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description frames the tool as calling an Actor and 'retrieving its output results,' never explaining what is mutated or consumed. It does add value the annotations lack — throughput (~100 reviews/5 s), a pay-per-review cost model, and Beta status — which keeps it above a bare baseline.

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 leading sentence ('This tool calls the Actor "leoworks/spanish-review-classifier" and retrieves its output results. Actor description: ...') is boilerplate meta-text that delays the useful content. The remainder is dense and front-loads the classification purpose and language routing, but the opening wastes space.

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 schema coverage, the description does not need to explain return shapes; it correctly focuses on purpose, language routing and cost. It leaves the destructive behavior unexplained, which is the one meaningful gap for a tool flagged destructive.

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

Parameters3/5

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

Schema description coverage is 100%, so all 13 parameters are documented in the schema already. The description only restates the two main input modes ('datasetId (text auto-detected) or texts') without adding syntax or semantics beyond the schema, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource: classify Spanish reviews into complaint types, sentiment and purchase motive, with the MercadoLibre context. It also distinguishes itself from the sibling korean-review-classifier by naming the language routing explicitly, so an agent can select it without opening schemas.

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 when-to-use signal (Spanish) and points to the concrete alternative (leoworks/korean-review-classifier for Korean; datasetId or texts as input modes). It stops short of covering the other classifier siblings (Japanese, Amazon, Google Maps, social comment), so the routing map is incomplete but still actionable.

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. 3 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  2. 4 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  3. 2 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  4. 1 tool update
    • Changedleoworks--naver-shopping-rank-tracker2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "null",
        -  "boolean"
        -]New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  5. 3 tool updates
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedleoworks--naver-shopping-rank-tracker2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "boolean",
        -  "null"
        -]New value: +[
        +  "null",
        +  "boolean"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  6. 4 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  7. 1 tool update
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  8. 3 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  9. 4 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  10. 4 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
    • Changedleoworks--naver-shopping-rank-tracker9 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "null",
        -  "boolean"
        -]New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  11. 3 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--naver-shopping-rank-tracker2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "boolean",
        -  "null"
        -]New value: +[
        +  "null",
        +  "boolean"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  12. 2 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  13. 1 tool update
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
  14. 2 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--job-posting-classifier3 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / company / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / location / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / title / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
  15. 1 tool update
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  16. 2 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  17. 2 tool updates
    • Changedleoworks--google-maps-review-classifier1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  18. 1 tool update
    • Changedleoworks--naver-shopping-rank-tracker7 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
  19. 1 tool update
    • Changedleoworks--naver-shopping-rank-tracker2 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "null",
        -  "boolean"
        -]New value: +[
        +  "boolean",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
  20. 2 tool updates
    • Changedleoworks--aliexpress-search-scraper1 field changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
    • Changedleoworks--naver-shopping-rank-tracker9 fields changed
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / isNew / type
        Previous value: -[
        -  "boolean",
        -  "null"
        -]New value: +[
        +  "null",
        +  "boolean"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / notFoundWithin / type
        Previous value: -[
        -  "null",
        -  "number"
        -]New value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / organicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / page / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousCheckedAt / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +[
        +  "null",
        +  "string"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / previousOrganicRank / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rankChange / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / storeName / type
        Previous value: -[
        -  "null",
        -  "string"
        -]New value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / visualPosition / type
        Previous value: -[
        -  "number",
        -  "null"
        -]New value: +[
        +  "null",
        +  "number"
        +]

Publisher details

Operator
LeoWorks (Korea) publishes the 15 Apify actors behind these tools and maintains this listing. The MCP endpoint itself is Apify's official hosted MCP server (mcp.apify.com). · Publisher source
Operator website
https://leoworks.kr
Vendor relationship
Independent
Trust center
Not available
Restrictions
Requires an Apify account (sign in with Apify OAuth or an Apify API token). Each tool call runs an actor on your Apify account and is billed per result at the actor's listed price; Apify's free monthly credit covers small tests. The two Google Maps tools can also run compass' Google Maps scraper on your account, billed separately. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Real-time Korean web data for AI assistants — Naver Place reviews, Melon charts, Daangn/Bunjang marketplace, Naver News, Musinsa fashion rankings. 7 tools powered by Apify actors.
    7
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Use 3,000+ pre-built cloud tools from Apify, known as Actors, to extract data from websites, e-commerce, social media, search engines, maps, and more
    10
    11,443 npm
    13,174
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Exposes over 19,000 Apify Actors as MCP tools for web scraping, data extraction, and OSINT automation. It enables AI agents to dynamically discover and execute scrapers to collect structured data and crawl web content.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    21 web-data tools for AI agents: jobs, hiring signals, news, research and field trends, reviews, Reddit leads, contacts, property, Shopify, events.
    25
    0
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.