Skip to main content
Glama

LeoWorks Review & Lead Data Tools (via Apify MCP)

leoworks/google-maps-lead-qualifier

leoworks--google-maps-lead-qualifier
Destructive

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

Input Schema

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

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. Changed5 schema fields changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / domain
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / phone
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / reviewsCount
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / totalScore
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / website
      Added value: +{
      +  "type": "string"
      +}
  2. 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": {
      +    "categoryName": {
      +      "type": "string"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "contactChannels": {
      +      "type": "number"
      +    },
      +    "isChain": {
      +      "type": "boolean"
      +    },
      +    "labels": {
      +      "properties": {
      +        "chain": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "icpMatch": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "leadScore": {
      +      "type": "number"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "qualified": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "tier": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. 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": {
      -    "categoryName": {
      -      "type": "string"
      -    },
      -    "city": {
      -      "type": "string"
      -    },
      -    "contactChannels": {
      -      "type": "number"
      -    },
      -    "domain": {
      -      "type": "string"
      -    },
      -    "isChain": {
      -      "type": "boolean"
      -    },
      -    "labels": {
      -      "properties": {
      -        "chain": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "icpMatch": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "leadScore": {
      -      "type": "number"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "phone": {
      -      "type": "string"
      -    },
      -    "qualified": {
      -      "type": "boolean"
      -    },
      -    "reason": {
      -      "type": "string"
      -    },
      -    "reviewsCount": {
      -      "type": "number"
      -    },
      -    "tier": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "totalScore": {
      -      "type": "number"
      -    },
      -    "website": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  4. Changed5 schema fields changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / domain
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / phone
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / reviewsCount
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / totalScore
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / website
      Added value: +{
      +  "type": "string"
      +}
  5. 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": {
      +    "categoryName": {
      +      "type": "string"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "contactChannels": {
      +      "type": "number"
      +    },
      +    "isChain": {
      +      "type": "boolean"
      +    },
      +    "labels": {
      +      "properties": {
      +        "chain": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "icpMatch": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "leadScore": {
      +      "type": "number"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "qualified": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "tier": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  6. 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": {
      -    "categoryName": {
      -      "type": "string"
      -    },
      -    "city": {
      -      "type": "string"
      -    },
      -    "contactChannels": {
      -      "type": "number"
      -    },
      -    "domain": {
      -      "type": "string"
      -    },
      -    "isChain": {
      -      "type": "boolean"
      -    },
      -    "labels": {
      -      "properties": {
      -        "chain": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "icpMatch": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "leadScore": {
      -      "type": "number"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "phone": {
      -      "type": "string"
      -    },
      -    "qualified": {
      -      "type": "boolean"
      -    },
      -    "reason": {
      -      "type": "string"
      -    },
      -    "reviewsCount": {
      -      "type": "number"
      -    },
      -    "tier": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "totalScore": {
      -      "type": "number"
      -    },
      -    "website": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  7. 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": {
      +    "categoryName": {
      +      "type": "string"
      +    },
      +    "city": {
      +      "type": "string"
      +    },
      +    "contactChannels": {
      +      "type": "number"
      +    },
      +    "domain": {
      +      "type": "string"
      +    },
      +    "isChain": {
      +      "type": "boolean"
      +    },
      +    "labels": {
      +      "properties": {
      +        "chain": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "icpMatch": {
      +          "properties": {
      +            "matched": {
      +              "type": "boolean"
      +            },
      +            "probability": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "leadScore": {
      +      "type": "number"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "phone": {
      +      "type": "string"
      +    },
      +    "qualified": {
      +      "type": "boolean"
      +    },
      +    "reason": {
      +      "type": "string"
      +    },
      +    "reviewsCount": {
      +      "type": "number"
      +    },
      +    "tier": {
      +      "type": "string"
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "totalScore": {
      +      "type": "number"
      +    },
      +    "website": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  8. 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": {
      -    "address": {
      -      "type": "string"
      -    },
      -    "categoryName": {
      -      "type": "string"
      -    },
      -    "city": {
      -      "type": "string"
      -    },
      -    "contactChannels": {
      -      "type": "number"
      -    },
      -    "domain": {
      -      "type": "string"
      -    },
      -    "isChain": {
      -      "type": "boolean"
      -    },
      -    "labels": {
      -      "properties": {
      -        "chain": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        },
      -        "icpMatch": {
      -          "properties": {
      -            "matched": {
      -              "type": "boolean"
      -            },
      -            "probability": {
      -              "type": "number"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "leadScore": {
      -      "type": "number"
      -    },
      -    "model": {
      -      "type": "string"
      -    },
      -    "phone": {
      -      "type": "string"
      -    },
      -    "photoCondition": {
      -      "type": [
      -        "null",
      -        "number"
      -      ]
      -    },
      -    "photoCustomMatched": {
      -      "type": "null"
      -    },
      -    "photoIndependent": {
      -      "type": "null"
      -    },
      -    "photoLabels": {
      -      "properties": {
      -        "brandVisible": {
      -          "type": "number"
      -        },
      -        "condition": {
      -          "type": "number"
      -        },
      -        "custom": {
      -          "items": {
      -            "properties": {
      -              "label": {
      -                "type": "string"
      -              },
      -              "probability": {
      -                "type": "number"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "isExterior": {
      -          "type": "number"
      -        },
      -        "isIndependent": {
      -          "type": "number"
      -        },
      -        "model": {
      -          "type": "string"
      -        },
      -        "outdoorSeating": {
      -          "type": "number"
      -        },
      -        "questions": {
      -          "type": "string"
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "photoNeedsWork": {
      -      "type": [
      -        "boolean",
      -        "null"
      -      ]
      -    },
      -    "photoOutdoorSeating": {
      -      "type": "null"
      -    },
      -    "photoStatus": {
      -      "type": "string"
      -    },
      -    "photoUrl": {
      -      "type": "string"
      -    },
      -    "photosJudged": {
      -      "type": "number"
      -    },
      -    "placeId": {
      -      "type": "string"
      -    },
      -    "qualified": {
      -      "type": "boolean"
      -    },
      -    "reason": {
      -      "type": "string"
      -    },
      -    "reviewsCount": {
      -      "type": "number"
      -    },
      -    "tier": {
      -      "type": "string"
      -    },
      -    "title": {
      -      "type": "string"
      -    },
      -    "totalScore": {
      -      "type": "number"
      -    },
      -    "website": {
      -      "type": "string"
      -    }
      -  },
      -  "type": "object"
      -}
  9. Changed14 schema fields changed
    • addedInput schema / properties / judgePlacePhotos
      Added value: +{
      +  "default": false,
      +  "description": "Beta, 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.\n\n[Description truncated]",
      +  "title": "Judge the place photo (beta)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / photoLabels
      Added value: +{
      +  "default": [],
      +  "description": "Up 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.",
      +  "items": {
      +    "description": "Up 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.",
      +    "title": "Photo conditions (not measured)",
      +    "type": "string"
      +  },
      +  "title": "Photo conditions (not measured)",
      +  "type": "array"
      +}
    • addedInput schema / properties / photoMaxSide
      Added value: +{
      +  "default": 1024,
      +  "description": "Longest 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.\nExample values: 1024",
      +  "examples": [
      +    1024
      +  ],
      +  "title": "Photo size (pixels)",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / address
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoCondition
      Added value: +{
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoCustomMatched
      Added value: +{
      +  "type": "null"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoIndependent
      Added value: +{
      +  "type": "null"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoLabels
      Added value: +{
      +  "properties": {
      +    "brandVisible": {
      +      "type": "number"
      +    },
      +    "condition": {
      +      "type": "number"
      +    },
      +    "custom": {
      +      "items": {
      +        "properties": {
      +          "label": {
      +            "type": "string"
      +          },
      +          "probability": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "isExterior": {
      +      "type": "number"
      +    },
      +    "isIndependent": {
      +      "type": "number"
      +    },
      +    "model": {
      +      "type": "string"
      +    },
      +    "outdoorSeating": {
      +      "type": "number"
      +    },
      +    "questions": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoNeedsWork
      Added value: +{
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoOutdoorSeating
      Added value: +{
      +  "type": "null"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoStatus
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photoUrl
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / photosJudged
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / placeId
      Added value: +{
      +  "type": "string"
      +}
  10. Changed5 schema fields changed
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / domain
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / phone
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / reviewsCount
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / totalScore
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / storages / properties / datasets / properties / default / properties / itemsSchema / properties / website
      Added value: +{
      +  "type": "string"
      +}
  11. Added

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.