Skip to main content
Glama

LeoWorks Review & Lead Data Tools (via Apify MCP)

leoworks/amazon-review-classifier

leoworks--amazon-review-classifier
Destructive

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.

Input Schema

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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "action": {
      +      "type": "boolean"
      +    },
      +    "complaintTypes": {
      +      "type": "string"
      +    },
      +    "index": {
      +      "type": "number"
      +    },
      +    "labels": {
      +      "properties": {
      +        "complaint": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "complaintScores": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "praise": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "returnIntent": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "sentiment": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "praiseTypes": {
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": "null"
      +    },
      +    "returnIntent": {
      +      "type": "boolean"
      +    },
      +    "sentiment": {
      +      "type": "string"
      +    },
      +    "text": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "action": {
      -      "type": "boolean"
      -    },
      -    "complaintTypes": {
      -      "type": "string"
      -    },
      -    "index": {
      -      "type": "number"
      -    },
      -    "labels": {
      -      "properties": {
      -        "complaint": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "complaintScores": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "praise": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "returnIntent": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "sentiment": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "praiseTypes": {
      -      "type": "string"
      -    },
      -    "rating": {
      -      "type": "null"
      -    },
      -    "returnIntent": {
      -      "type": "boolean"
      -    },
      -    "sentiment": {
      -      "type": "string"
      -    },
      -    "text": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  3. Changed24 schema fields changed
    • addedInput schema / properties / collectReviewsPerProduct
      Added value: +{
      +  "default": 50,
      +  "description": "How 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.\nExample values: 50",
      +  "examples": [
      +    50
      +  ],
      +  "title": "Reviews to collect per product",
      +  "type": "integer"
      +}
    • addedInput schema / properties / collectSort
      Added value: +{
      +  "default": "recent",
      +  "description": "Which reviews to collect first. Newest first is the least biased sample of what buyers say now.\nExample values: \"recent\"",
      +  "enum": [
      +    "recent",
      +    "helpful"
      +  ],
      +  "examples": [
      +    "recent"
      +  ],
      +  "title": "Collect: order",
      +  "type": "string"
      +}
    • addedInput schema / properties / collector
      Added value: +{
      +  "default": "junglee/amazon-reviews-scraper",
      +  "description": "The 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.\nExample values: \"junglee/amazon-reviews-scraper\"",
      +  "enum": [
      +    "junglee/amazon-reviews-scraper",
      +    "web_wanderer/amazon-reviews-extractor"
      +  ],
      +  "examples": [
      +    "junglee/amazon-reviews-scraper"
      +  ],
      +  "title": "Collector (advanced)",
      +  "type": "string"
      +}
    • changedInput schema / properties / datasetId / description
      Previous value: -"An Apify dataset containing Amazon reviews — for example the output of an Amazon reviews scraper. Use this OR “Review texts”."New value: +"An Apify dataset containing Amazon reviews — for example the output of an Amazon reviews scraper. Use this OR “Products” (not both) OR “Review texts”."
    • addedInput schema / properties / marketplace
      Added value: +{
      +  "default": "com",
      +  "description": "Which Amazon site the ASINs in “Products” belong to. A product URL carries its own marketplace and overrides this.\nExample values: \"com\"",
      +  "enum": [
      +    "com",
      +    "co.uk",
      +    "de",
      +    "fr",
      +    "it",
      +    "es",
      +    "ca",
      +    "com.au",
      +    "co.jp",
      +    "in",
      +    "com.mx",
      +    "com.br",
      +    "nl",
      +    "se",
      +    "ae"
      +  ],
      +  "examples": [
      +    "com"
      +  ],
      +  "title": "Marketplace (for ASINs)",
      +  "type": "string"
      +}
    • addedInput schema / properties / products
      Added value: +{
      +  "description": "One 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.\n\n[Description truncated]",
      +  "items": {
      +    "description": "One 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. Collection is done by an existing Amazon reviews scraper (a separate Actor that Apify bills to your account — about $0.006 per review for the default collector, about $0.001 for the alternative; the estimate is shown in the run log before anything is collected); this Actor adds $0.0005 per classified review. No Amazon login or cookies are used, and reviewer names and profiles are switched off. Amazon shows at most about 100 reviews per product this way. Use this OR “Reviews dataset”; if both are set the run stops.",
      +    "title": "Products (collect the reviews for me) — ASINs or Amazon product URLs",
      +    "type": "string"
      +  },
      +  "title": "Products (collect the reviews for me) — ASINs or Amazon product URLs",
      +  "type": "array"
      +}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / asin
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / country
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / helpfulVotes
      Removed value: -{
      -  "type": "number"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / labels / properties / starTextMismatch
      Removed value: -{
      -  "properties": {
      -    "matched": {
      -      "type": "boolean"
      -    },
      -    "rating": {
      -      "type": "number"
      -    },
      -    "sentiment": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoEvidence
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoLabels
      Removed value: -{
      -  "properties": {
      -    "isRealItem": {
      -      "type": "number"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "packagingDamage": {
      -      "type": "number"
      -    },
      -    "perPhoto": {
      -      "items": {
      -        "properties": {
      -          "height": {
      -            "type": "number"
      -          },
      -          "isRealItem": {
      -            "type": "number"
      -          },
      -          "matchesText": {
      -            "type": "number"
      -          },
      -          "packagingDamage": {
      -            "type": "number"
      -          },
      -          "productDamage": {
      -            "type": "number"
      -          },
      -          "width": {
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "productDamage": {
      -      "type": "number"
      -    },
      -    "questions": {
      -      "type": "string"
      -    },
      -    "supportsComplaint": {
      -      "type": "number"
      -    }
      -  },
      -  "type": "object"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoStatus
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoUrl
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photosJudged
      Removed value: -{
      -  "type": "number"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / productAsin
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / publishedAt
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +"null"
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / reviewId
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / reviewUrl
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / starTextMismatch
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / variant
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / verified
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / vine
      Removed value: -{
      -  "type": "boolean"
      -}
  4. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "null",
      -  "number"
      -]New value: +[
      +  "number",
      +  "null"
      +]
  5. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +[
      +  "null",
      +  "number"
      +]
  6. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "null",
      -  "number"
      -]New value: +[
      +  "number",
      +  "null"
      +]
  7. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +[
      +  "null",
      +  "number"
      +]
  8. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "null",
      -  "number"
      -]New value: +[
      +  "number",
      +  "null"
      +]
  9. Changed1 schema field changed
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -[
      -  "number",
      -  "null"
      -]New value: +[
      +  "null",
      +  "number"
      +]
  10. Changed2 schema fields changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / index
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / rating / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
  11. Changed5 schema fields changed
    • addedInput schema / properties / maxPhotosPerReview
      Added value: +{
      +  "default": 2,
      +  "description": "The first photos of each review. With \"All reviews that have photos\", at most 2 photos per review are judged.\nExample values: 2",
      +  "examples": [
      +    2
      +  ],
      +  "title": "Photos judged per review",
      +  "type": "integer"
      +}
    • addedInput schema / properties / photoField
      Added value: +{
      +  "description": "Field with the picture addresses of each review. Auto-detected (reviewImages, reviewImageUrls, images, imageUrls, photos); set it only if your scraper uses another name.",
      +  "title": "Photo field",
      +  "type": "string"
      +}
    • addedInput schema / properties / photoJudging
      Added value: +{
      +  "default": "off",
      +  "description": "Adds `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.\nExample values: \"off\"",
      +  "enum": [
      +    "off",
      +    "complaints",
      +    "all"
      +  ],
      +  "examples": [
      +    "off"
      +  ],
      +  "title": "Judge review photos (beta)",
      +  "type": "string"
      +}
    • addedInput schema / properties / photoMaxSide
      Added value: +{
      +  "default": 768,
      +  "description": "Longest 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.\nExample values: 768",
      +  "examples": [
      +    768
      +  ],
      +  "title": "Photo size",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Added value: +{
      +  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      +  "properties": {
      +    "action": {
      +      "type": "boolean"
      +    },
      +    "asin": {
      +      "type": "string"
      +    },
      +    "complaintTypes": {
      +      "type": "string"
      +    },
      +    "country": {
      +      "type": "string"
      +    },
      +    "helpfulVotes": {
      +      "type": "number"
      +    },
      +    "labels": {
      +      "properties": {
      +        "complaint": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "complaintScores": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "praise": {
      +          "items": {
      +            "properties": {
      +              "label": {
      +                "type": "string"
      +              },
      +              "probability": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "returnIntent": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "sentiment": {
      +          "properties": {
      +            "confidence": {
      +              "type": "number"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "starTextMismatch": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "rating": {
      +              "type": "number"
      +            },
      +            "sentiment": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "photoEvidence": {
      +      "type": "string"
      +    },
      +    "photoLabels": {
      +      "properties": {
      +        "isRealItem": {
      +          "type": "number"
      +        },
      +        "model": {
      +          "type": "string"
      +        },
      +        "packagingDamage": {
      +          "type": "number"
      +        },
      +        "perPhoto": {
      +          "items": {
      +            "properties": {
      +              "height": {
      +                "type": "number"
      +              },
      +              "isRealItem": {
      +                "type": "number"
      +              },
      +              "matchesText": {
      +                "type": "number"
      +              },
      +              "packagingDamage": {
      +                "type": "number"
      +              },
      +              "productDamage": {
      +                "type": "number"
      +              },
      +              "width": {
      +                "type": "number"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "productDamage": {
      +          "type": "number"
      +        },
      +        "questions": {
      +          "type": "string"
      +        },
      +        "supportsComplaint": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "photoStatus": {
      +      "type": "string"
      +    },
      +    "photoUrl": {
      +      "type": "string"
      +    },
      +    "photosJudged": {
      +      "type": "number"
      +    },
      +    "praiseTypes": {
      +      "type": "string"
      +    },
      +    "productAsin": {
      +      "type": "string"
      +    },
      +    "publishedAt": {
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": "number"
      +    },
      +    "returnIntent": {
      +      "type": "boolean"
      +    },
      +    "reviewId": {
      +      "type": "string"
      +    },
      +    "reviewUrl": {
      +      "type": "string"
      +    },
      +    "sentiment": {
      +      "type": "string"
      +    },
      +    "starTextMismatch": {
      +      "type": "boolean"
      +    },
      +    "text": {
      +      "type": "string"
      +    },
      +    "variant": {
      +      "type": "string"
      +    },
      +    "verified": {
      +      "type": "boolean"
      +    },
      +    "vine": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
  12. Changed1 schema field changed
    • removedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema
      Removed value: -{
      -  "description": "JSON Schema for rows in the dataset at `storages.datasets.default.id` — describes row shape only; the rows themselves are NOT returned inline in this response. Inferred from this Actor's historical successful runs. To fetch actual rows, call `get-dataset-items` with the dataset id and a `fields` projection drawn from this schema.",
      -  "properties": {
      -    "action": {
      -      "type": "boolean"
      -    },
      -    "complaintTypes": {
      -      "type": "string"
      -    },
      -    "index": {
      -      "type": "number"
      -    },
      -    "labels": {
      -      "properties": {
      -        "complaint": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "complaintScores": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "praise": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "returnIntent": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "sentiment": {
      -          "properties": {
      -            "confidence": {
      -              "type": "number"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "praiseTypes": {
      -      "type": "string"
      -    },
      -    "rating": {
      -      "type": "null"
      -    },
      -    "returnIntent": {
      -      "type": "boolean"
      -    },
      -    "sentiment": {
      -      "type": "string"
      -    },
      -    "text": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  13. Added

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.