Skip to main content
Glama

LeadMarina

Search local-business leads

search_leads

Run a live search for local businesses by niche + city (e.g. query 'electrician', location 'Austin, TX'). Returns a search_id and, usually, the first batch immediately (its listings are in results; their emails and phones are not verified yet — when discovery is 'in_progress' the provider was slow and the whole search was queued, so the leads arrive through get_search_results); more results are found and verified in the background — every email is SMTP-checked and phones are verified with line type + carrier. Spends 1 lead per result. Poll get_search_results until enrichment is 'complete'. If enrichment is already 'complete', nothing was found and nothing more is coming; if capped is true, the balance covered fewer leads than were found. With country, a US territory (PR, GU, VI, AS, MP) is searched; max_leads stops it early and exact_category keeps only that Google category. For many keywords or places at once, use run_advanced_search.

Input Schema

NameRequiredDescriptionDefault
queryYesBusiness niche/category keyword, e.g. 'electrician'.
countryNo'US' (the default), or a US territory's code ('PR', 'GU', 'VI', 'AS', 'MP') with a place from find_places.
locationNoCity, e.g. 'Austin, TX'. Not needed with location_code, which is always what is searched.
max_leadsNoStop after this many leads: a whole number from 100 to 1,000,000.
location_codeNoOptional exact location code. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (or after location when the code's own name cannot be looked up); sent alone, the search is unnamed and location comes back null. A code for a place outside the US is refused, as is a location ending in another country ('London, UK').
exact_categoryNoOnly businesses whose MAIN Google category is the query's: true (the query must be a Google category, e.g. 'Plumber'), or the category's id. Runs in the background — results arrive through get_search_results.

Output Schema

NameRequiredDescriptionDefault
foundNoListings found in the first batch, before the balance capped delivery.
queryYes
cappedNoTrue when the lead balance covered fewer leads than were found — relay this to the user.
resultsNoThe first batch, as delivered — contacts are verified in the background (get_search_results).
locationNoThe place searched, as the location list names it (the location sent, when a code's own name could not be looked up); null for a location_code sent alone.
discoveryNo'complete', or 'in_progress' when the search was queued whole.
next_stepNo
search_idYes
enrichmentYes'pending' until background verification finishes; 'complete' at once when nothing was found.
data_sourcesNoWhere the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.
leads_remainingNoLeads spendable now. On a plan with no monthly quota this is what is left in the current 7-day period.
delivered_so_farYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / country
      Added value: +{
      +  "description": "'US' (the default), or a US territory's code ('PR', 'GU', 'VI', 'AS', 'MP') with a place from find_places.",
      +  "type": "string"
      +}
    • addedInput schema / properties / exact_category
      Added value: +{
      +  "description": "Only businesses whose MAIN Google category is the query's: true (the query must be a Google category, e.g. 'Plumber'), or the category's id. Runs in the background — results arrive through get_search_results.",
      +  "type": [
      +    "boolean",
      +    "string"
      +  ]
      +}
    • addedInput schema / properties / max_leads
      Added value: +{
      +  "description": "Stop after this many leads: a whole number from 100 to 1,000,000.",
      +  "type": "number"
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / location_code / description
      Previous value: -"Optional exact location code. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (or after location when the code's own name cannot be looked up); sent alone, the search is unnamed and location comes back null."New value: +"Optional exact location code. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (or after location when the code's own name cannot be looked up); sent alone, the search is unnamed and location comes back null. A code for a place outside the US is refused, as is a location ending in another country ('London, UK')."
    • addedOutput schema / properties / results / items / properties / country
      Added value: +{
      +  "description": "ISO 3166 alpha-2 (\"US\", \"GB\").",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / postal_code
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed3 schema fields changed
    • addedOutput schema / properties / results / items / properties / contact_name
      Added value: +{
      +  "description": "The person the business's own website names as running part of it (a manager, a practice's doctor) when it names no owner.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / contact_title
      Added value: +{
      +  "description": "That person's role, as the website gives it.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / people
      Added value: +{
      +  "description": "Everyone the business's own website names as working there, each { name, title, kind } (kind: owner, manager, practitioner, staff).",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / data_sources
      Added value: +{
      +  "description": "Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.",
      +  "type": "string"
      +}
  5. Changed8 schema fields changed
    • changedInput schema / properties / location / description
      Previous value: -"City, e.g. 'Austin, TX'. Ignored if location_code is given."New value: +"City, e.g. 'Austin, TX'. Not needed with location_code, which is always what is searched."
    • changedInput schema / properties / location_code / description
      Previous value: -"Optional exact location code (skips the city lookup)."New value: +"Optional exact location code. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (or after location when the code's own name cannot be looked up); sent alone, the search is unnamed and location comes back null."
    • addedOutput schema / properties / capped
      Added value: +{
      +  "description": "True when the lead balance covered fewer leads than were found — relay this to the user.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / discovery
      Added value: +{
      +  "description": "'complete', or 'in_progress' when the search was queued whole.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / enrichment / description
      Previous value: -"'pending' until background verification finishes."New value: +"'pending' until background verification finishes; 'complete' at once when nothing was found."
    • addedOutput schema / properties / found
      Added value: +{
      +  "description": "Listings found in the first batch, before the balance capped delivery.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / location / description
      Added value: +"The place searched, as the location list names it (the location sent, when a code's own name could not be looked up); null for a location_code sent alone."
    • addedOutput schema / properties / results
      Added value: +{
      +  "description": "The first batch, as delivered — contacts are verified in the background (get_search_results).",
      +  "items": {
      +    "properties": {
      +      "category": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "city": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "emails_data": {
      +        "description": "Verified emails with SMTP status."
      +      },
      +      "enrichment_status": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "name": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "owner_name": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "phones_data": {
      +        "description": "Verified phones with line type + carrier."
      +      },
      +      "rating": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "reviews": {
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "socials": {
      +        "description": "Social profile links keyed by platform."
      +      },
      +      "state": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "website": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / leads_remaining / description
      Added value: +"Leads spendable now. On a plan with no monthly quota this is what is left in the current 7-day period."
  7. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and openWorldHint=true, and the description adds far more: 1 lead spent per result, background enrichment with SMTP email checks and phone line-type/carrier verification, the queued 'in_progress' discovery path, and what `capped` means. This is exactly the cost/async/side-effect context an agent needs before a metered call.

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 return shape, and essentially every clause carries real information. The long em-dash-chained sentences make it denser than ideal to parse, which keeps it from a 5.

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

Completeness5/5

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

Output schema exists, yet the description still explains the tricky return semantics an agent can't infer: `search_id` plus immediate `results` with unverified contacts, enrichment lifecycle, and `capped`. Combined with annotations and a full schema, nothing needed to invoke or follow up 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 adds cross-parameter behavior beyond the schema: territory search with `country`, `max_leads` stopping early, and `exact_category` restricting to the query's Google category while running in the background. It stops short of restating formats (e.g. code ranges) already 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?

States a specific verb and resource ('Run a live search for local businesses by niche + city') and grounds it with a concrete example query/location. It is clearly distinguishable from run_advanced_search, which it calls out by name for multi-keyword/multi-place work.

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?

Explicitly says to poll get_search_results until enrichment is 'complete', points to find_places for territory place codes, and routes the agent to run_advanced_search for many keywords or places. It also states the degenerate case ('if enrichment is already complete, nothing was found').

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.