Skip to main content
Glama

Server Details

B2B lead and company data for AI agents: free search, pay only for emails, phones, profiles.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
70.5% over 62 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
generect/generect_mcp
GitHub Stars
1
Server Listing
Generect Live API MCP Server

TDQS

A4.2/5.0

Scored across 17 tools

Disambiguation4/5

Each tool targets a distinct operation (count/search/preview/enrich per entity, plus phone, email, validation, bulk, billing, webhooks), and the descriptions carefully explain the count→search→preview→enrich funnel. The one real overlap is get_lead_by_url, which is explicitly an alias of enrich_lead kept for backwards compatibility and flagged as deprecated in favor of enrich_lead, so an agent could misselect it. Otherwise boundaries are clear.

Naming Consistency4/5

Almost all tools follow a predictable snake_case verb_noun pattern (count_companies, search_leads, enrich_lead, generate_email, validate_email, start_bulk_job, manage_webhooks). The only deviation is `health`, a bare noun, though that is a widely understood convention for a liveness endpoint.

Tool Count5/5

17 tools is well-scoped for a full B2B data/ICP platform: counting, searching, previewing, single and bulk enrichment, email/phone retrieval, validation, billing, job status and webhooks. Each tool covers a genuinely distinct capability with no redundant filler.

Completeness4/5

The surface covers the full lead-gen lifecycle: size audiences (count_*), find them (search_*, preview_leads), enrich (enrich_*, resolve_profile), retrieve contact data (generate_email, find_phone), verify (validate_email), batch (start_bulk_job/get_bulk_job/manage_webhooks) and manage spend (get_balance). Minor gap is that webhook/job handling and account management are combined into single tools rather than granular operations, but no major workflow is blocked.

Available Tools

17 tools
count_companiesCount matching companies (free)A
Read-onlyIdempotent
Inspect

How many companies match an ICP, and what pulling them would cost. FREE — this call never spends credits. Call this before search_companies. As with count_leads, a realtime count costs $0.02 and is never run implicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when you only need a size estimate and cost matters more than freshness.
keywordsNoFree-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode.
locationsNoHQ locations — cities, states or countries.
headcountsNoSize buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+".
industriesNoCompany industries. Must match Generect industry names exactly (e.g. "Software Development"); unknown names are rejected with HTTP 400.
timeout_msNoRequest timeout in milliseconds.
exclude_idsNoExclude companies by LinkedIn id/URN.
technologiesNoTechnologies the company uses — realtime only: using it forces the pricier live mode.
company_namesNoRestrict to specific company names — realtime only: using it forces the pricier live mode.
company_typesNoCompany types: "Public Company","Privately Held","Non Profit","Government Agency","Educational", …
revenues_rangeNoAnnual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode.
sub_industriesNoExpand each selected industry to its sub-industries as well (broadens the match).
exclude_domainsNoExclude companies by domain (e.g. existing customers).
linkedins_linksNoSpecific LinkedIn company URLs — realtime only: using it forces the pricier live mode.
headcount_growthNoHeadcount growth in percent — realtime only: using it forces the pricier live mode.
num_of_followersNoLinkedIn follower buckets: "1-50","51-100","101-1000","1001-5000","5001+" — realtime only: using it forces the pricier live mode.
exclude_locationsNoHQ locations to exclude.
get_max_companiesNoDEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking.
exclude_industriesNoIndustries to exclude.
hiring_on_linkedinNoOnly companies actively hiring — realtime only: using it forces the pricier live mode.
fallback_from_leadsNoDEPRECATED — accepted but ignored. Removed. It fabricated lead-derived name aggregates and cost an extra billable query.
department_headcountNoDepartment size, e.g. {"name":"engineering","min":10,"max":100} — realtime only: using it forces the pricier live mode.
allow_unlisted_valuesNoEscape hatch for the local vocabulary check — see the lead-side field of the same name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixNo
whyNo
costNo
modeNo
adviceNo
statusNo
optionsNo
test_modeNo
results_countNo
needs_realtimeNo
test_mode_noticeNo
next_step_estimateNo
vocabulary_warningsNo
blocked_by_vocabularyNo
deprecated_params_ignoredNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, openWorld), but the description adds non-obvious billing semantics: the call is free, a realtime count costs $0.02, and it is 'never run implicitly' — real behavioral context an agent could not infer from annotations alone. It stops short of noting latency for realtime counts or how cost is reported.

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

Conciseness5/5

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

Three short sentences, front-loaded with what the tool returns and what it costs, with no filler. Every clause carries 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?

With an output schema present, return values need no explanation, and the description correctly focuses on the cost/credit model that the schema cannot express. Coverage is nearly complete; only the difference from sibling preview/count tools is left implicit.

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 23 parameters are richly documented (mode enums, per-field 'realtime only' cost warnings, deprecated fields), so the description's minimal parameter commentary is acceptable. The only added hint is cost-related, which is already implied by the mode field.

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+resource ('count companies matching an ICP') plus an adjacent deliverable ('what pulling them would cost'), which clearly separates it from search_companies (retrieval) and count_leads (a different resource).

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 strong explicit ordering directive ('Call this before search_companies') and implies the pre-flight-estimate use case, but never states when this tool is NOT the right choice or how it differs from preview_leads.

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

count_leadsCount matching leads (free)A
Read-onlyIdempotent
Inspect

How many leads match an ICP, and what pulling them would cost. FREE — this call never spends credits. ALWAYS CALL THIS BEFORE search_leads: it is the only way to learn the size of an audience without paying per row, and it returns a cost estimate for the next step at this account's real rates. A realtime count is NOT free ($0.02 flat) — this tool refuses to run one unless you pass mode:"realtime" on purpose.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when you only need a size estimate and cost matters more than freshness.
strictNoFields to match strictly, e.g. ["company_locations"].
keywordsNoFree-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode.
personasNoAdvanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode.
functionsNoJob functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode.
job_titleNoDEPRECATED alias for job_titles. Still honoured: it is merged into job_titles.
locationsNoWhere the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"].
company_idNoAnchor to one company by LinkedIn numeric id.
job_titlesNoTarget job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one.
timeout_msNoRequest timeout in milliseconds.
exclude_idsNoSkip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset.
senioritiesNoSeniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only.
changed_jobsNoOnly leads who recently changed jobs — realtime only: using it forces the pricier live mode.
company_linkNoAnchor to one company by LinkedIn URL.
company_nameNoAnchor to one company by name (exclusive with company_link/company_id).
company_typesNoEmployer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership".
exclude_namesNoSkip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate.
get_max_leadsNoDEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking.
company_filtersNoOptional: count leads only at companies matching these company filters (a two-level ICP). Still free in database mode.
lead_industriesNoDEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries.
without_companyNoDEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set.
years_in_companyNoTime at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode.
company_locationsNoHQ location of the lead's current employer.
exclude_locationsNoLead locations to exclude.
filter_empty_varsNoDrop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying.
years_in_positionNoTime in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode.
company_headcountsNoEmployer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+").
company_industriesNoIndustry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 naming the field.
past_company_namesNoCompanies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode.
posted_on_linkedinNoOnly leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode.
linkedin_filter_linkNoA LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode.
allow_unlisted_valuesNoEscape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.
exclude_title_keywordsNoDEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself.
exclude_company_locationsNoEmployer HQ locations to exclude.
exclude_company_headcountsNoEmployer size buckets to exclude.
exclude_company_industriesNoEmployer industries to exclude.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixNo
whyNo
costNo
modeNo
adviceNo
statusNo
optionsNo
test_modeNo
results_countNo
needs_realtimeNo
test_mode_noticeNo
next_step_estimateNo
vocabulary_warningsNo
blocked_by_vocabularyNo
deprecated_params_ignoredNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnly/idempotent/openWorld; the description adds the decisive behavioral facts an agent cannot get elsewhere — this call never spends credits, the realtime count is a $0.02 flat charge, and the tool actively refuses to run one unless explicitly requested. That is exactly the kind of cost and gating context annotations do not carry.

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?

Three sentences, front-loaded with the core question and the free/cost distinction, with zero filler. There is mild redundancy between 'FREE — this call never spends credits' and 'without paying per row', but the emphasis is justified for a cost-sensitive tool.

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 36-parameter tool with full schema coverage and an output schema, the description supplies the missing decision layer: cost, free-ness, ordering relative to search_leads, and the realtime escalation cost. Filter semantics are correctly left to the schema, though the interaction with the sibling preview_leads is not addressed.

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 mode parameter is already fully documented in the schema, including the auto/database/realtime tradeoffs. The description only reiterates the realtime gate ('unless you pass mode:"realtime" on purpose'), adding no syntax or format detail beyond structured fields, so 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?

The first sentence names the exact question answered — how many leads match an ICP and what pulling them costs — which is a specific verb+resource and immediately distinguishes it from search_leads. An agent can tell what it produces 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 Guidelines5/5

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

Explicit sequencing directive: 'ALWAYS CALL THIS BEFORE search_leads', with the rationale (only way to size an audience without paying per row). It also states the exclusion condition — realtime is refused unless mode:"realtime" is passed on purpose — so both when-to-use and when-not-to-use are covered.

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

enrich_companyEnrich one companyAInspect

Full profile for ONE known company, by Generect id, LinkedIn URL, domain, or name. BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Not found costs nothing. Domain is the most reliable identifier after id; name matching is fuzzy.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoGenerect company id.
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when a recent cached record is good enough and cost matters more than freshness.
nameNoCompany name (fuzzy match).
domainNoCompany domain without protocol, e.g. "stripe.com".
compactNoDefault true: return a small per-company summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
timeout_msNoRequest timeout in milliseconds.
linkedin_urlNoLinkedIn company page URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
leadNo
modeNo
foundNo
companyNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false / destructiveHint=false / openWorldHint=true; the description goes well beyond them with pricing (~$0.0067 per record found, not-found refunded), the instruction to read cost.amount_charged, the realtime billing behavior, the 5–60s realtime latency, and the per-call spend ceiling refusal. That is exactly the extra behavioral context annotations cannot carry.

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-loads what the tool returns and what it accepts before the cost details; every sentence carries information. The long nested parentheses around pricing tiers make it denser than it needs to be, but nothing is wasted.

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

Completeness4/5

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

With an output schema present, return-shape explanation is unnecessary, and the description covers identity inputs, cost, and async/latency tradeoffs. The one gap is that 0 parameters are required but the description never says how many of them must be supplied or what happens if several conflicting identifiers are passed.

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 selection semantics the schema does not: relative identifier reliability (id > domain > fuzzy name) and the point that the compact summary carries the Generect id every later step accepts. The mode tradeoffs are largely already spelled out in the schema's mode description, so the added value is partial.

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 with explicit scope: 'Full profile for ONE known company', which implicitly separates it from cohort search tools like search_companies. It also enumerates the accepted identifiers (Generect id, LinkedIn URL, domain, name). It stops short of naming the sibling an agent should use for discovery instead, so it is clear but not fully sibling-differentiated.

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

Usage Guidelines4/5

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

Gives concrete operational guidance: 'Domain is the most reliable identifier after id; name matching is fuzzy', and routes cost questions to get_balance. It does not state when to prefer a different tool (e.g. search_companies for discovering unknown companies, or enrich_lead for people), so the when-not-to-use half is absent.

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

enrich_leadEnrich one leadAInspect

Full profile for ONE known person, by Generect id, LinkedIn URL, or work email (reverse lookup). BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Not found costs nothing. Prefer the id from a search/preview result — it is the most accurate identifier. For many people at once use start_bulk_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoGenerect lead id from search/preview.
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when a record from the last 12 months is good enough and cost matters more than freshness.
emailNoWork email, for reverse lookup.
compactNoDefault true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
timeout_msNoRequest timeout in milliseconds.
linkedin_urlNoLinkedIn profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
leadNo
modeNo
foundNo
companyNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description goes well beyond that with billing mechanics (BILLABLE, ~$0.0067 per found record, not-found refunded, Tier 0 list price caveat, cost.amount_charged in every response), the per-call spend ceiling that can refuse an escalation, escalation reporting, and realtime latency of 5-60s.

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 what the tool returns and its cost, then routing guidance. Dense parenthetical stacking (price caveat plus get_balance plus amount_charged all in one clause) costs some readability, but essentially every sentence carries actionable information.

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

Completeness5/5

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

An output schema exists, so return format need not be explained, yet the description still tells the agent where to read actual spend. Combined with identifier choice, mode selection, billing, and bulk-tool routing, nothing needed to invoke this correctly or decide whether to invoke it 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. The description still adds selection guidance the schema does not: it frames id/LinkedIn/email as interchangeable identifiers and states that `id` is the most accurate one, which is a cross-parameter preference rather than a restatement of the schema text.

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+resource+scope: 'Full profile for ONE known person, by Generect id, LinkedIn URL, or work email (reverse lookup).' The 'ONE' emphasis and the explicit 'For many people at once use start_bulk_job' cleanly separate it from the bulk sibling, and 'known person' separates it from search/preview tools.

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?

Gives explicit routing rules: prefer the `id` from a search/preview result as the most accurate identifier, and use start_bulk_job for many people. It also explains when to pick each `mode` value, including the concrete case for choosing 'database' explicitly ('when a record from the last 12 months is good enough and cost matters more than freshness').

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

find_phoneFind a phone number (most expensive)AInspect

Find a phone number for one person. BILLABLE — about $0.4 per phone found (a miss is free) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). THE MOST EXPENSIVE OPERATION HERE — roughly 20x an email lookup. Do not call it speculatively or across a list; confirm with the user first, and only for people they have already qualified. Use start_bulk_job for an approved list.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoCompany domain without protocol, e.g. "stripe.com" (name+domain mode).
companyNoCompany name or domain (name+company mode).
lead_idNoGenerect lead id from search / preview / enrich results — the cheapest and most accurate identifier.
last_nameNoLast name (name+domain mode).
first_nameNoFirst name (name+domain mode).
timeout_msNoRequest timeout in milliseconds.
linkedin_urlNoLinkedIn profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
resultNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: billable at ~$0.4 per hit, misses free, ~20x an email lookup, tiered pricing that may differ, and the cost.amount_charged field and get_balance route for real spend. This is exactly the cost/auth-style disclosure annotations cannot carry.

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-loads the action and the cost warning, and every sentence carries useful information. The nested parentheticals about tiered pricing and cost.amount_charged make one sentence dense, but nothing is truly wasteful.

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 annotations covering the safety profile and an output schema covering returns, the description still supplies the pricing, confirmation-before-calling, and alternative-tool context an agent needs. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters are already documented in the schema (domain, lead_id, first/last name, linkedin_url, etc.). The description adds no parameter-level meaning, which is acceptable at full coverage but not value-adding.

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 ('Find a phone number for one person') and explicitly scopes it to a single individual, which separates it from bulk and email siblings. An agent can identify the operation immediately without reading 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 Guidelines5/5

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

Gives explicit when-to-use ('only for people they have already qualified'), when-not ('Do not call it speculatively or across a list'), and names the alternative for approved lists (start_bulk_job). Routing guidance is unambiguous.

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

generate_emailFind a verified work emailAInspect

Find and verify a work email. BILLABLE — about $0.02 per VALID email found (a miss is free) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Identify the person by lead_id (best), LinkedIn URL, or first+last+domain. candidates resolves several people in one call; more than 10 is routed to an async bulk job instead, which returns a job_id for get_bulk_job.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainNoCompany domain without protocol, e.g. "stripe.com" (name+domain mode).
lead_idNoGenerect lead id from search / preview / enrich results — the cheapest and most accurate identifier.
last_nameNoLast name (name+domain mode).
candidatesNoBatch mode. Each entry uses the same identifier rules as the single-person form.
first_nameNoFirst name (name+domain mode).
timeout_msNoRequest timeout in milliseconds.
middle_nameNoMiddle name (optional, improves pattern matching).
linkedin_urlNoLinkedIn profile URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobNo
costNo
modeNo
droppedNo
resultsNo
next_stepNo
requestedNo
submittedNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond annotations by disclosing cost semantics (~$0.02 per VALID email, misses free), that pricing is tier/list-dependent with a pointer to get_balance, and that cost.amount_charged in each response is the ground truth. Also discloses the async-routing threshold behavior, which no annotation conveys.

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 purpose then billing then identifier modes, and every clause carries information. The stacked parentheticals around pricing ('(a miss is free) (Tier 0 list price; ...)') are dense and slightly hard to parse, costing a point on structure.

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 so return values need no explanation, and the description nonetheless covers pricing, every identifier mode, batch behavior, and async escalation. For an 8-parameter, 0-required tool this is complete enough for correct invocation.

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, but the description adds real value by ranking identifiers ('lead_id (best)'), naming the three valid modes, and explaining the candidates batch threshold. It still doesn't reconcile the 0-required-parameter situation (exactly one mode must be chosen) at the top level beyond the identifier list.

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 + resource ('Find and verify a work email') immediately, and the identifier/batch details make it clearly distinguishable from siblings like validate_email (which verifies an existing address) and find_phone. An agent can route here vs. elsewhere 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 explicit identifier preference ('lead_id (best), LinkedIn URL, or first+last+domain') and an explicit alternative path for batches over 10 ('routed to an async bulk job ... job_id for get_bulk_job'). It stops short of stating when NOT to use it (e.g., 'if you already have the address, use validate_email'), so it's strong but not fully exhaustive.

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

get_balanceBalance, usage and your prices (free)A
Read-onlyIdempotent
Inspect

Account balance, month-to-date usage and THIS account's real per-operation prices. FREE — this call never spends credits. balance_usd is the wallet; grants_usd is bonus and plan credit (sign-up bonus, perks, plan allowance), reported apart. Grants are spent first, but only on the operations each one covers: a promo perk or a plan allowance may not pay for API calls, and a perk never pays for phone numbers. Report both figures; do not add them up as what the user can spend. Call it before a batch of paid work (so you can tell the user what they can afford) and after (so you can report exactly what was spent). The prices it returns beat any number in a tool description — those are list prices.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_msNoRequest timeout in milliseconds.
include_usageNoAlso return the month-to-date credit usage broken down by operation type. Free.
include_pricesNoInclude this account's per-operation prices. Default true.
include_transactionsNoAlso return the N most recent transactions (each shows the operation type and dollar amount).
include_token_analyticsNoAlso return per-API-token request counts for the last 30 days (by endpoint and status). Free. Useful for answering "which integration is making these calls?".

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
emailNo
usageNo
test_modeNo
grants_usdNo
balance_usdNo
preview_tierNo
prices_sourceNo
token_analyticsNo
your_prices_usdNo
test_mode_noticeNo
recent_transactionsNo
used_this_month_usdNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, but the description adds non-obvious behavior: the call is free and never spends credits, grants are spent before balance but only on covered operations (a perk never pays for phone numbers), and balance_usd and grants_usd must not be summed. It also establishes authority — the returned prices override list prices in other tool descriptions.

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 purpose and the free-call guarantee are front-loaded, and each subsequent sentence carries non-obvious guidance (grant spending order, do not sum, when to call). It runs several sentences long for a getter and could be tightened, but no sentence is 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?

An output schema exists, so raw return values need not be enumerated, yet the description still explains the two headline figures and how to interpret them together — exactly the ambiguity an agent would hit. Combined with the free-call and pricing-authority notes, 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.

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 timeout_ms, include_usage, include_prices, include_transactions and include_token_analytics including defaults and free/paid status. The description adds no input-parameter detail beyond that, so the baseline 3 applies even though the output-field semantics it explains are valuable.

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 specific resources — account balance, month-to-date usage, and this account's real per-operation prices — with a clear verb framing. None of the siblings (search/enrich/count/bulk/webhook tools) overlap this function, so the agent can tell immediately what it retrieves and that it is a read-only account-status call.

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?

Timing is stated explicitly: call it before a batch of paid work to tell the user what they can afford, and after to report what was spent. This is a concrete when-to-use pattern with a stated purpose for each occasion, leaving nothing to inference for the agent's workflow.

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

get_bulk_jobPoll a bulk job (free)A
Read-onlyIdempotent
Inspect

Status and results of a bulk job. FREE — this call never spends credits. Polling is free — the work was already billed at submit time. Poll every few seconds, not in a tight loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesjob_id returned by start_bulk_job.
job_typeYesSame job_type used at submit.
timeout_msNoRequest timeout in milliseconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobNo
costNo
job_idNo
resultsNo
job_typeNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A3.8/5.0
Behavior4/5

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

Goes beyond the readOnly/idempotent annotations with a materially important billing fact: the call is free, credits were already charged at submit time. That is exactly the kind of context an agent budgeting calls needs. It stops short of describing behavior when the job is still running or how failures surface.

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

Conciseness5/5

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

Three short sentences, front-loaded with what the tool returns, then the cost reassurance, then the cadence rule. Nothing is redundant and no sentence is wasted.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and both required params are fully documented in the schema. The free/billing and polling-cadence context is the key missing piece from annotations, and it is present. Only the non-terminal job state behavior is unaddressed.

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% with descriptions on all three parameters, so the schema already carries the load. The description adds no parameter-level detail (e.g., timeout_ms tuning or job_type echoing rules), so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource (retrieves status and results of a bulk job) and pairs naturally with the start_bulk_job sibling referenced in the schema. It does not explicitly name the sibling it complements, but the polling/status framing is unmistakable.

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?

Provides cadence guidance ("Poll every few seconds, not in a tight loop"), which is genuinely useful, but never states the trigger condition explicitly (call after start_bulk_job until a terminal state). Usage is implied rather than spelled out, and no alternatives are named.

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

get_lead_by_urlEnrich a lead by LinkedIn URL (alias)AInspect

Alias of enrich_lead for a LinkedIn profile URL, kept for backwards compatibility. BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Prefer enrich_lead — it also accepts a Generect id (cheaper to get right) or an email for reverse lookup.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesLinkedIn profile URL (e.g. https://www.linkedin.com/in/username/).
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when a recent cached record is good enough and cost matters more than freshness.
postsNoDEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles.
compactNoDefault true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
commentsNoDEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles.
timeout_msNoRequest timeout in milliseconds.
inexact_companyNoDEPRECATED — accepted but ignored. Removed: v1 enrich matches on the identifier you pass.
people_also_viewedNoDEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
leadNo
modeNo
foundNo
companyNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) by disclosing billability at ~$0.0067 per record, that not-found results are refunded, the Tier 0 list-price caveat, and that the agent should call get_balance and read cost.amount_charged for real spend. It also notes escalation is refused above a spend ceiling, giving the agent concrete cost and side-effect awareness.

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-loads the two most decision-relevant facts (alias status, prefer enrich_lead) and packs billing details into a single dense parenthetical. It is efficient, though the nested pricing caveat is heavy enough that it slightly slows scanning.

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 an aliased enrichment tool with an output schema already present and 100% schema coverage, the description covers the remaining agent-critical gaps: identity as an alias, cost, refund behavior, and where to verify real pricing. 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.

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 url, mode, compact, and the deprecated no-op parameters in detail. The description adds little parameter-level meaning beyond pointing to enrich_lead and mentioning the mode escalation ceiling, 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 (enrich a lead from a LinkedIn profile URL) and explicitly frames itself as an alias of enrich_lead kept for backwards compatibility. This makes its identity and its relationship to the sibling tool unambiguous 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 Guidelines5/5

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

Gives an explicit routing rule: 'Prefer enrich_lead — it also accepts a Generect id (cheaper to get right) or an email for reverse lookup.' It also names the alternative and the conditions under which the alternative wins, so the agent knows when NOT to call this tool.

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

healthServer and credential health (free)A
Read-onlyIdempotent
Inspect

Liveness check. FREE — this call never spends credits. Confirms the MCP server is up, reports its version, and (unless you disable it) verifies the credential against a free account endpoint. It never touches a paid data endpoint, so it is safe to call from a monitor.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_msNoRequest timeout in milliseconds.
check_credentialNoAlso verify the API token against the free /accounts/me endpoint. Default true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
msNo
okNo
costNo
serverNo
accountNo
versionNo
api_baseNo
test_modeNo
balance_usdNo
has_credentialNo
credential_errorNo
credential_validNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered; the description adds genuinely new context: zero credit cost, no paid endpoint contact, and the default credential-verification side effect against /accounts/me. It stops short of stating behavior when the credential check fails, which is the main remaining gap.

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

Conciseness5/5

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

Three sentences, all front-loaded with the highest-value fact first (liveness, then free/cost, then what it checks). No filler or repetition of the tool name.

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, return format needn't be explained, and annotations cover the safety profile. The description supplies the cost profile, default behavior, and monitoring suitability that an agent needs to call it correctly.

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 both timeout_ms and check_credential are already documented in the schema. The description only echoes the opt-out nature of the credential check ('unless you disable it'), adding little beyond the structured fields — 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?

Opens with a specific verb+resource ('Liveness check') and enumerates exactly what it confirms: server up, version, credential validation. That scope is unmistakably distinct from every sibling, which are all data-fetching tools (enrich_*, search_*, get_balance).

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?

States a clear use context ('safe to call from a monitor') and a cost condition ('never spends credits'), which tells the agent when this is preferable to paid siblings. It does not explicitly name an alternative or state exclusions, but the separation from data tools is obvious from the scope.

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

manage_webhooksManage webhook endpointsA
Destructive
Inspect

List, create, update, delete or test webhook endpoints for bulk-job completion. FREE — this call never spends credits. Use this instead of long polling in scheduled/unattended workflows: register once, then let the completion event wake your job up.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoWebhook id (required for update, delete, test).
urlNoHTTPS endpoint that receives events (create/update).
actionYesWhat to do.
eventsNoEvents to subscribe to (create/update).
secretNoShared secret for HMAC signature verification.
timeout_msNoRequest timeout in milliseconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
actionNo
webhooksNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true), it discloses a genuinely useful behavioral fact — 'FREE — this call never spends credits' — and explains the register-once/event-wake workflow model. It does not discuss HMAC secret handling, auth/permission needs, or rate limits, but the destructiveHint already covers the delete risk.

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

Conciseness5/5

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

Two tight sentences: the action/resource inventory is front-loaded, then the cost and workflow guidance. The 'FREE' callout is placed prominently and nothing is repeated or padded.

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

Completeness5/5

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

An output schema exists and schema coverage is complete, so return values and per-action field requirements need not be restated. The description supplies the missing framing (cost model, intended workflow, purpose) needed to call this multi-action tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (id, url, action, events, secret, timeout_ms) is already documented in the schema. The description adds no syntax, format, or conditional-requirement detail beyond restating the action list, 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?

The description names a precise set of actions (list, create, update, delete, test) on a specific resource (webhook endpoints) scoped to bulk-job completion events. No sibling tool touches webhooks, so an agent can immediately distinguish this from get_bulk_job or the bulk-job starters.

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 a clear selection condition and names the alternative technique: 'Use this instead of long polling in scheduled/unattended workflows.' That routes the agent well, but it offers no 'when not to use' (e.g., interactive single-shot flows) and does not tie the five actions to any scenario guidance.

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

preview_leadsPreview leads (cheapest paid look)AInspect

Cheap look at the actual people behind a count, before committing to a full search. BILLABLE — about $0.002 per returned row (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Preview rows carry a Generect id, so the intended flow is: preview many → pick the few that fit → enrich_lead / generate_email only on those. Per the API contract preview rows are masked (no LinkedIn URL, domain, email or phone); if your account returns more than that, treat it as a bonus and not something to rely on.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoAlias for limit_by.
strictNoFields to match strictly, e.g. ["company_locations"].
compactNoDefault true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
keywordsNoFree-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode.
limit_byNoRows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call.
personasNoAdvanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode.
functionsNoJob functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode.
job_titleNoDEPRECATED alias for job_titles. Still honoured: it is merged into job_titles.
locationsNoWhere the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"].
offset_byNoRows to skip (pagination).
company_idNoAnchor to one company by LinkedIn numeric id.
count_onlyNoReturn just how many leads the preview index holds for these filters and spend nothing. Free. This is a second opinion on count_leads: preview and cached search are different indexes and can disagree.
job_titlesNoTarget job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one.
timeout_msNoRequest timeout in milliseconds.
exclude_idsNoSkip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset.
senioritiesNoSeniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only.
changed_jobsNoOnly leads who recently changed jobs — realtime only: using it forces the pricier live mode.
company_linkNoAnchor to one company by LinkedIn URL.
company_nameNoAnchor to one company by name (exclusive with company_link/company_id).
company_typesNoEmployer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership".
exclude_namesNoSkip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate.
get_max_leadsNoDEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking.
company_filtersNoOptional company-level filters for a two-level ICP.
lead_industriesNoDEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries.
without_companyNoDEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set.
years_in_companyNoTime at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode.
company_locationsNoHQ location of the lead's current employer.
confirm_spend_usdNoExplicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.
exclude_locationsNoLead locations to exclude.
filter_empty_varsNoDrop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying.
years_in_positionNoTime in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode.
company_headcountsNoEmployer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+").
company_industriesNoIndustry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 naming the field.
past_company_namesNoCompanies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode.
posted_on_linkedinNoOnly leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode.
linkedin_filter_linkNoA LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode.
allow_unlisted_valuesNoEscape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.
exclude_title_keywordsNoDEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself.
exclude_company_locationsNoEmployer HQ locations to exclude.
exclude_company_headcountsNoEmployer size buckets to exclude.
exclude_company_industriesNoEmployer industries to exclude.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixNo
costNo
modeNo
noteNo
leadsNo
statusNo
returnedNo
companiesNo
test_modeNo
spend_guardNo
results_countNo
next_page_argsNo
requested_rowsNo
escalation_noteNo
test_mode_noticeNo
vocabulary_warningsNo
blocked_by_vocabularyNo
deprecated_params_ignoredNo
escalated_to_realtime_becauseNo
api_returned_more_than_requestedNo

TDQS

A4.5/5.0
Behavior5/5

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

Discloses cost behavior far beyond the annotations: billable at ~$0.002/row, per-row billing semantics, where the true price is found (get_balance and cost.amount_charged), and the masking contract (no LinkedIn URL, domain, email or phone). The readOnlyHint=false annotation is consistent with the billable framing, and the description adds substantial value on top of it.

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

Conciseness4/5

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

Front-loads the value proposition ('Cheap look at the actual people behind a count'), then the cost warning, then the workflow. Dense and mostly economical, though the nested parenthetical about get_balance and cost.amount_charged makes the second sentence long.

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-format details are not needed, and the description covers the essential extras: billing, masking, and the intended pipeline. It omits any mention of the spend cap / confirm_spend_usd approval flow, which is a meaningful behavioral gap for a tool that charges money.

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 41 parameters are already fully documented and the baseline is 3. The description adds little parameter-specific meaning beyond noting that preview rows carry an id (relevant to exclude_ids) and that cost is per returned row.

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 ('preview leads') and pinpoints the role it plays: a cheap look at the people behind a count before committing to a full search. This cleanly separates it from count_leads (no rows) and search_leads (full cost).

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?

Gives an explicit workflow: 'preview many → pick the few that fit → enrich_lead / generate_email only on those', naming the follow-on siblings. It also directs the agent to get_balance for real prices, which is actionable routing guidance rather than vague context.

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

resolve_profileResolve an anonymous LinkedIn linkAInspect

Reveal who is behind an anonymous LinkedIn profile link. BILLABLE — about $0.0005 per RESOLVED profile (an unresolvable reference is free) — duplicates in one batch are billed per row, so deduplicate first (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Takes the obfuscated links that Sales Navigator leaves in exports, CRMs and ad platforms — linkedin.com/in/ACwAA… — plus Sales Navigator lead URLs, bare profile ids and urns, and returns the real profile URL and identity. Pass profiles (up to 50) to do a batch in one call. The id it returns is the same identifier enrich_lead, generate_email and find_phone accept, so this is the cheap first step before spending on a full record. Returns identity only — no location, company or work history; use enrich_lead for those. The numeric member id is NOT accepted as input (LinkedIn answers 403 to it); it comes back as linkedin_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoAlias for `url` — same accepted values. Use whichever reads better.
urlNoA single LinkedIn person reference: profile URL of any flavour (including /in/ACwAA… and /sales/lead/…), a public identifier, an obfuscated id (ACwAA… or ACoAA…) or an urn. Matched case-insensitively.
compactNoDefault true: return a small per-profile summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
profilesNoBatch mode: 1–50 references, mixed freely. One row per input, in input order, each either a resolved profile or {input, error}. Duplicates are billed per row — deduplicate first.
timeout_msNoRequest timeout in milliseconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
profilesNo
resolvedNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, so the safety profile is already partly carried. The description still goes well beyond them: per-row billing (~$0.0005, unresolved free), duplicate rows billed per row, cost.amount_charged in every response, and the hard 403 on numeric member ids. That is genuinely additive behavioral context.

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 core purpose is front-loaded in the first sentence and every sentence carries load. It is dense with parentheticals and repeats the billing/credits point, which costs a little readability, but nothing is padding.

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?

Even though an output schema exists, the description usefully explains the return shape (resolved profile vs {input,error}, the interop `id`, `linkedin_id`, compact vs ~80-field raw). Combined with the billing and input-constraint coverage, an agent has everything needed to call it correctly.

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 and the schema already documents id/url/compact/profiles/timeout_ms. The description does add meaning (batch up to 50 in one call, one row per input, duplicates billed per row, and the critical negative constraint that the numeric member id is rejected), which is more than restating the schema, but it largely mirrors what the properties 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?

Specific verb+resource: 'Reveal who is behind an anonymous LinkedIn profile link.' It explicitly scopes what is returned (identity only, no location/company/work history) and names the sibling that covers the rest (enrich_lead), so an agent can separate it from enrich_lead, get_lead_by_url and find_phone without opening a schema.

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?

Explicit routing: 'this is the cheap first step before spending on a full record' and 'use enrich_lead for those'. It also states operational prerequisites — deduplicate before batching, call get_balance for real prices — and names the downstream consumers (enrich_lead, generate_email, find_phone).

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

search_companiesSearch companies (free thin rows, full rows billed)AInspect

Return companies matching an ICP. FREE by default while the account has free thin rows left today (daily quota; see detail — pass detail "thin" to guarantee $0); thin rows carry no domain — use enrich_company on the ones you keep. detail "full" is billable, about $0.0067 per returned row (0 rows costs $0) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Realtime is billed per row too. Run count_companies first. Note that headcount_range is a snapshot taken when the record was indexed and can lag the company's current size; the filter itself is applied at query time.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when freshness is not critical and cost matters more than freshness.
limitNoAlias for limit_by.
detailNoRow detail for the database search. Thin rows are FREE — id, name, industry, headcount_range, HQ country/city, company_type, founded_year; no LinkedIn URL, domain, contacts or history — up to a daily per-account row quota that resets at 00:00 UTC. Omitted (default): thin while the free tier is available; once it is not (quota spent, a custom-contract account, a server without the tier) the search continues as before — full rows billed per row, marked thin_unavailable in the result, under the spend ceiling. "thin": free rows only — never billed, never escalated to realtime; a spent quota is a 429 and a realtime-only filter is an error. "full": the whole record, billed per row. Browse thin, then spend only on the rows you keep: generate_email takes the lead id directly, enrich_* gives the full record.
offsetNoAlias for offset_by.
compactNoDefault true: return a small per-company summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
keywordsNoFree-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode.
limit_byNoRows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call.
locationsNoHQ locations — cities, states or countries.
offset_byNoRows to skip (pagination).
headcountsNoSize buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+".
industriesNoCompany industries. Must match Generect industry names exactly (e.g. "Software Development"); unknown names are rejected with HTTP 400.
timeout_msNoRequest timeout in milliseconds.
exclude_idsNoExclude companies by LinkedIn id/URN.
technologiesNoTechnologies the company uses — realtime only: using it forces the pricier live mode.
company_namesNoRestrict to specific company names — realtime only: using it forces the pricier live mode.
company_typesNoCompany types: "Public Company","Privately Held","Non Profit","Government Agency","Educational", …
revenues_rangeNoAnnual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode.
sub_industriesNoExpand each selected industry to its sub-industries as well (broadens the match).
exclude_domainsNoExclude companies by domain (e.g. existing customers).
linkedins_linksNoSpecific LinkedIn company URLs — realtime only: using it forces the pricier live mode.
headcount_growthNoHeadcount growth in percent — realtime only: using it forces the pricier live mode.
num_of_followersNoLinkedIn follower buckets: "1-50","51-100","101-1000","1001-5000","5001+" — realtime only: using it forces the pricier live mode.
confirm_spend_usdNoExplicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.
exclude_locationsNoHQ locations to exclude.
get_max_companiesNoDEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking.
exclude_industriesNoIndustries to exclude.
hiring_on_linkedinNoOnly companies actively hiring — realtime only: using it forces the pricier live mode.
fallback_from_leadsNoDEPRECATED — accepted but ignored. Removed. It fabricated lead-derived name aggregates and cost an extra billable query.
department_headcountNoDepartment size, e.g. {"name":"engineering","min":10,"max":100} — realtime only: using it forces the pricier live mode.
allow_unlisted_valuesNoEscape hatch for the local vocabulary check — see the lead-side field of the same name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixNo
costNo
modeNo
noteNo
leadsNo
statusNo
returnedNo
companiesNo
test_modeNo
spend_guardNo
results_countNo
next_page_argsNo
requested_rowsNo
escalation_noteNo
test_mode_noticeNo
vocabulary_warningsNo
blocked_by_vocabularyNo
deprecated_params_ignoredNo
escalated_to_realtime_becauseNo
api_returned_more_than_requestedNo

TDQS

A4.6/5.0
Behavior4/5

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

Discloses far more than the annotations (readOnlyHint=false, destructiveHint=false): daily free row quota resetting at 00:00 UTC, ~$0.0067/row full pricing, list-price disclaimer, cost.amount_charged, the $5 spend ceiling with confirm_spend_usd, 429 behavior on spent quota, and the headcount_range snapshot-lag caveat. It stops short of describing pagination/response shape, but the billing and escalation semantics are unusually thorough.

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-loads the core action and the free-by-default economics, and every clause carries cost or routing information. It is dense with stacked parentheticals (Tier 0 list price, quota, escalation) that could be tightened, but nothing is wasted for a 30-parameter billed search.

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 it need not explain return values, and with 30 params and a dual billing model it still covers the essentials: free vs billable paths, escalation, spend ceiling, filter caveats, and deprecated no-op params. An agent has enough to call this correctly and safely.

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, but the description adds cross-parameter meaning the schema doesn't: detail's free/thin vs billable/full escalation path and thin_unavailable marker, and that realtime-only filters force the pricier mode. The limit_by cost equation ('this number IS the price') is also supplied by the schema, so the added value is moderate rather than decisive.

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?

Opens with a specific verb+resource ('Return companies matching an ICP') and immediately scopes itself against siblings ('Run count_companies first', 'use enrich_company on the ones you keep'). An agent can distinguish it from count_companies, enrich_company and search_leads without opening any schema.

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?

Explicit routing to alternatives and conditions: run count_companies first, enrich_company/generate_email on rows you keep, pick 'database' when freshness matters less than cost, 'auto' escalates only on rejected filters. Both when-to-use and how-to-avoid-cost are stated.

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

search_leadsSearch leads (free thin rows, full rows billed)AInspect

Return leads (people) matching an ICP. FREE by default while the account has free thin rows left today (daily quota; see detail — pass detail "thin" to guarantee $0). detail "full" is billable, about $0.0067 per returned row (0 rows costs $0) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Realtime, or an auto escalation to it, is billed per row too. Run count_leads first — it is free and sizes the audience. Rows never include email or phone: call generate_email (it takes the lead id) or find_phone only on the ids you keep. Ordering is not stable, so paginate by passing ids you already have in exclude_ids rather than by offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoData mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. "auto" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick "database" explicitly when freshness is not critical and cost matters more than freshness.
limitNoAlias for limit_by.
detailNoRow detail for the database search. Thin rows are FREE — id, name, job_title, seniority, location, company name/id/industry/country; no LinkedIn URL, domain, contacts or history — up to a daily per-account row quota that resets at 00:00 UTC. Omitted (default): thin while the free tier is available; once it is not (quota spent, a custom-contract account, a server without the tier) the search continues as before — full rows billed per row, marked thin_unavailable in the result, under the spend ceiling. "thin": free rows only — never billed, never escalated to realtime; a spent quota is a 429 and a realtime-only filter is an error. "full": the whole record, billed per row. Browse thin, then spend only on the rows you keep: generate_email takes the lead id directly, enrich_* gives the full record.
offsetNoAlias for offset_by.
strictNoFields to match strictly, e.g. ["company_locations"].
compactNoDefault true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.
keywordsNoFree-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode.
limit_byNoRows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call.
personasNoAdvanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode.
functionsNoJob functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode.
job_titleNoDEPRECATED alias for job_titles. Still honoured: it is merged into job_titles.
locationsNoWhere the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"].
offset_byNoRows to skip (pagination).
company_idNoAnchor to one company by LinkedIn numeric id.
job_titlesNoTarget job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one.
timeout_msNoRequest timeout in milliseconds.
exclude_idsNoSkip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset.
senioritiesNoSeniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only.
changed_jobsNoOnly leads who recently changed jobs — realtime only: using it forces the pricier live mode.
company_linkNoAnchor to one company by LinkedIn URL.
company_nameNoAnchor to one company by name (exclusive with company_link/company_id).
company_typesNoEmployer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership".
exclude_namesNoSkip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate.
get_max_leadsNoDEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking.
company_filtersNoOptional: only return leads at companies matching these filters (two-level ICP).
lead_industriesNoDEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries.
without_companyNoDEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set.
years_in_companyNoTime at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode.
company_locationsNoHQ location of the lead's current employer.
confirm_spend_usdNoExplicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.
exclude_locationsNoLead locations to exclude.
filter_empty_varsNoDrop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying.
years_in_positionNoTime in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode.
company_headcountsNoEmployer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+").
company_industriesNoIndustry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 naming the field.
past_company_namesNoCompanies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode.
posted_on_linkedinNoOnly leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode.
linkedin_filter_linkNoA LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode.
allow_unlisted_valuesNoEscape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.
exclude_title_keywordsNoDEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself.
exclude_company_locationsNoEmployer HQ locations to exclude.
exclude_company_headcountsNoEmployer size buckets to exclude.
exclude_company_industriesNoEmployer industries to exclude.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fixNo
costNo
modeNo
noteNo
leadsNo
statusNo
returnedNo
companiesNo
test_modeNo
spend_guardNo
results_countNo
next_page_argsNo
requested_rowsNo
escalation_noteNo
test_mode_noticeNo
vocabulary_warningsNo
blocked_by_vocabularyNo
deprecated_params_ignoredNo
escalated_to_realtime_becauseNo
api_returned_more_than_requestedNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations: free thin-row quota with a 00:00 UTC reset, per-row billing (~$0.0067 / Tier 0 list), automatic escalation to realtime, the spend ceiling, 429 on a spent quota, and the fact that rows never contain email or phone. Annotations only declare readOnlyHint=false/openWorldHint=true, so this prose is doing the real behavioral work.

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 cost model before any convenience guidance, and every sentence is operational rather than filler. It is a dense paragraph rather than a tight list, and the price/cost-verification advice is slightly repetitive, but nothing is wasted.

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 43-parameter, billed search with nested company_filters and an output schema, the description covers the things an agent cannot infer: quota behavior, mode escalation billing, spend approval, pagination strategy, and which sibling tools to chain. Return-value details are left to the output schema, 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 description coverage is 100%, so the baseline is 3; the description earns an extra point by explaining cross-parameter economics — 'limit_by is the price of the call' in practice, detail 'thin' guaranteeing $0, and exclude_ids as the reliable pagination handle. It does not attempt to restate the 40+ filter fields, which the schema already documents.

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 opens with a specific verb+resource+scope: 'Return leads (people) matching an ICP.' It also implicitly distinguishes itself from siblings by telling the agent to run count_leads to size the audience and enrich_*/generate_email to expand rows, so an agent can tell which tool does the actual lead retrieval.

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?

Explicit routing: 'Run count_leads first — it is free and sizes the audience', 'call generate_email ... or find_phone only on the ids you keep', and 'pass detail "thin" to guarantee $0'. It also gives the pagination alternative (exclude_ids over offset) and states when full detail is worth the cost.

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

start_bulk_jobSubmit a bulk jobAInspect

Submit up to 50 records for asynchronous processing and get a job_id back. BILLABLE at the same per-record rate as the single-record tool — and the whole cost is RESERVED at submit time, so a submitted job keeps running (and keeps charging) even if you stop polling. Only submit a list the user has approved. Poll with get_bulk_job, or register a webhook to be told when it finishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoEnrich jobs only: cached (cheaper) or live. Default "database".
itemsYesMax 50. email_find/phone_find: {lead_id} | {linkedin_url} | {first_name,last_name,domain|company}. enrich_leads: {id} | {linkedin_url} | {email}. enrich_companies: {id} | {linkedin_url} | {domain} | {name}.
job_typeYesWhat to do with the items. phone_find is by far the most expensive per record.
timeout_msNoRequest timeout in milliseconds.
confirm_spend_usdNoExplicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobNo
costNo
modeNo
droppedNo
job_typeNo
next_stepNo
submittedNo
test_modeNo
reservation_noteNo
test_mode_noticeNo
vocabulary_warningsNo
reserved_worst_case_usdNo
deprecated_params_ignoredNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (which only cover read/write and open-world character), it discloses billing behavior, that cost is RESERVED at submit time, and that the job keeps charging even if polling stops — critical non-obvious behavior for a paid async tool. It also explains the confirm_spend_usd approval gate, which the annotations do not cover.

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

Conciseness5/5

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

Three tight sentences with no waste; the cost/commitment warning is front-loaded immediately after the core action, which is exactly where a costly side effect should appear.

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

Completeness5/5

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

An output schema exists, so return values need no narration, and the description still names the job_id and the follow-up tools. Billing, approval, and polling semantics are all covered for a 5-parameter asynchronous submission tool.

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 mode, items, job_type, timeout_ms and confirm_spend_usd are already documented in-schema. The description adds cost context around the spend approval but does not add format or semantics beyond the schema for any individual parameter, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Submit up to 50 records for asynchronous processing') and its primary output ('get a job_id back'). It also contrasts itself with the single-record tool by referencing the shared per-record rate, so an agent can separate it from enrich_lead/find_phone 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?

Gives a clear precondition ('Only submit a list the user has approved') and explicit next-step routing to 'get_bulk_job' or a webhook. It does not explicitly say when to prefer the single-record tool over batching, so it stops short of full when/when-not coverage.

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

validate_emailValidate email deliverabilityAInspect

Check deliverability of emails you already have. BILLABLE — about $0.005 per email submitted — every address is billed, whatever the verdict (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). This is the one operation where EVERY submitted address is billed — the verdict is the deliverable. Never validate an address that generate_email just returned as valid; it is already verified.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailsYesEmail addresses to validate. Each one is billed.
timeout_msNoRequest timeout in milliseconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
costNo
resultsNo
submittedNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, but the description adds crucial behavioral context: the operation is billable at ~$0.005 per email, every submitted address is billed regardless of verdict, and cost.amount_charged in responses shows actual spend. This exceeds annotation coverage and informs the agent of cost implications.

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 description is front-loaded with purpose, followed by critical billing details and a usage warning. While the billing parenthetical is dense, every part provides actionable information; the structure is logical and efficient.

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 annotations covering safety hints and an output schema present, the description needn't explain return values. It covers billing, usage exclusions, and cost-checking, leaving no significant gaps for an agent to call this tool correctly.

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%, fully documenting both parameters ('emails' and 'timeout_ms'). The description does not add any parameter-specific syntax or format details beyond the schema's own 'Each one is billed' note, 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?

The description states a specific verb ('Check deliverability') and resource ('emails you already have'), clearly distinguishing this tool from siblings like generate_email by warning against validating addresses already verified by that tool. An agent can identify the tool's function 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 Guidelines5/5

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

It provides explicit when-to-use ('emails you already have') and when-not-to-use ('Never validate an address that generate_email just returned as valid'), plus a pointer to get_balance for pricing. This is comprehensive guidance for selection and invocation.

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. 1 tool update
    • Changedget_balance1 field changed
      • addedOutput schema / properties / grants_usd
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
  2. 17 tool updates
    • Changedcount_companies11 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / department_headcount / additionalProperties
        Removed value: -false
      • removedInput schema / properties / headcount_growth / additionalProperties
        Removed value: -false
      • removedInput schema / properties / revenues_range / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / properties / blocked_by_vocabulary / $ref
        Removed value: -"#/properties/vocabulary_warnings"
      • addedOutput schema / properties / blocked_by_vocabulary / items
        Added value: +{}
      • addedOutput schema / properties / blocked_by_vocabulary / type
        Added value: +"array"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedcount_leads13 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / department_headcount / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / headcount_growth / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / revenues_range / additionalProperties
        Removed value: -false
      • addedInput schema / properties / personas / items
        Added value: +{}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / properties / blocked_by_vocabulary / $ref
        Removed value: -"#/properties/vocabulary_warnings"
      • addedOutput schema / properties / blocked_by_vocabulary / items
        Added value: +{}
      • addedOutput schema / properties / blocked_by_vocabulary / type
        Added value: +"array"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedenrich_company5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedenrich_lead5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedfind_phone5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedgenerate_email7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / candidates / items / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / results / items
        Added value: +{}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedget_balance5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedget_bulk_job5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedget_lead_by_url5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedhealth5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedmanage_webhooks5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedpreview_leads15 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / department_headcount / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / headcount_growth / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / revenues_range / additionalProperties
        Removed value: -false
      • addedInput schema / properties / personas / items
        Added value: +{}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / properties / blocked_by_vocabulary / $ref
        Removed value: -"#/properties/vocabulary_warnings"
      • addedOutput schema / properties / blocked_by_vocabulary / items
        Added value: +{}
      • addedOutput schema / properties / blocked_by_vocabulary / type
        Added value: +"array"
      • addedOutput schema / properties / companies / items
        Added value: +{}
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / leads / items
        Added value: +{}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedresolve_profile6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / profiles / items
        Added value: +{}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedsearch_companies13 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / department_headcount / additionalProperties
        Removed value: -false
      • removedInput schema / properties / headcount_growth / additionalProperties
        Removed value: -false
      • removedInput schema / properties / revenues_range / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / properties / blocked_by_vocabulary / $ref
        Removed value: -"#/properties/vocabulary_warnings"
      • addedOutput schema / properties / blocked_by_vocabulary / items
        Added value: +{}
      • addedOutput schema / properties / blocked_by_vocabulary / type
        Added value: +"array"
      • addedOutput schema / properties / companies / items
        Added value: +{}
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / leads / items
        Added value: +{}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedsearch_leads15 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / department_headcount / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / headcount_growth / additionalProperties
        Removed value: -false
      • removedInput schema / properties / company_filters / properties / revenues_range / additionalProperties
        Removed value: -false
      • addedInput schema / properties / personas / items
        Added value: +{}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedOutput schema / properties / blocked_by_vocabulary / $ref
        Removed value: -"#/properties/vocabulary_warnings"
      • addedOutput schema / properties / blocked_by_vocabulary / items
        Added value: +{}
      • addedOutput schema / properties / blocked_by_vocabulary / type
        Added value: +"array"
      • addedOutput schema / properties / companies / items
        Added value: +{}
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / leads / items
        Added value: +{}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedstart_bulk_job6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / items / items / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
    • Changedvalidate_email5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / properties / deprecated_params_ignored / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / vocabulary_warnings / items
        Added value: +{}
  3. 8 tool updates
    • Changedcount_companies1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when you only need a size estimate and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when you only need a size estimate and cost matters more than freshness."
    • Changedcount_leads2 fields changed
      • changedInput schema / properties / exclude_names / description
        Previous value: -"Skip leads by full name. KNOWN ISSUE: in database mode any non-empty value collapses the result set to 0 (verified 2026-08-09); it behaves correctly in realtime mode. Prefer exclude_ids, or filter names out yourself after the search."New value: +"Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate."
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when you only need a size estimate and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when you only need a size estimate and cost matters more than freshness."
    • Changedenrich_company1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when a recent cached record is good enough and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when a recent cached record is good enough and cost matters more than freshness."
    • Changedenrich_lead1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when a record from the last 12 months is good enough and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when a record from the last 12 months is good enough and cost matters more than freshness."
    • Changedget_lead_by_url1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when a recent cached record is good enough and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when a recent cached record is good enough and cost matters more than freshness."
    • Changedpreview_leads1 field changed
      • changedInput schema / properties / exclude_names / description
        Previous value: -"Skip leads by full name. KNOWN ISSUE: in database mode any non-empty value collapses the result set to 0 (verified 2026-08-09); it behaves correctly in realtime mode. Prefer exclude_ids, or filter names out yourself after the search."New value: +"Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate."
    • Changedsearch_companies2 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Row detail for the database search. Thin rows are FREE — id, name, industry, headcount_range, HQ country/city, company_type, founded_year; no LinkedIn URL, domain, contacts or history — up to a daily per-account row quota that resets at 00:00 UTC. Omitted (default): thin while the free tier is available; once it is not (quota spent, a custom-contract account, a server without the tier) the search continues as before — full rows billed per row, marked thin_unavailable in the result, under the spend ceiling. \"thin\": free rows only — never billed, never escalated to realtime; a spent quota is a 429 and a realtime-only filter is an error. \"full\": the whole record, billed per row. Browse thin, then spend only on the rows you keep: generate_email takes the lead id directly, enrich_* gives the full record.",
        +  "enum": [
        +    "thin",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness."
    • Changedsearch_leads3 fields changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "Row detail for the database search. Thin rows are FREE — id, name, job_title, seniority, location, company name/id/industry/country; no LinkedIn URL, domain, contacts or history — up to a daily per-account row quota that resets at 00:00 UTC. Omitted (default): thin while the free tier is available; once it is not (quota spent, a custom-contract account, a server without the tier) the search continues as before — full rows billed per row, marked thin_unavailable in the result, under the spend ceiling. \"thin\": free rows only — never billed, never escalated to realtime; a spent quota is a 429 and a realtime-only filter is an error. \"full\": the whole record, billed per row. Browse thin, then spend only on the rows you keep: generate_email takes the lead id directly, enrich_* gives the full record.",
        +  "enum": [
        +    "thin",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / exclude_names / description
        Previous value: -"Skip leads by full name. KNOWN ISSUE: in database mode any non-empty value collapses the result set to 0 (verified 2026-08-09); it behaves correctly in realtime mode. Prefer exclude_ids, or filter names out yourself after the search."New value: +"Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate."
      • changedInput schema / properties / mode / description
        Previous value: -"Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness."New value: +"Data mode. \"database\" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. \"realtime\" = live LinkedIn lookup, 5–60s, billed per row, accepts every realtime filter. \"auto\" (default) tries database first and escalates to realtime only if a filter you passed is rejected there (the escalation is reported, and is refused above the per-call spend ceiling). Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness."
  4. 17 tool updates
    • Changedcount_companies2 fields changed
      • addedInput schema / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch for the local vocabulary check — see the lead-side field of the same name.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "advice": {
        +      "type": "string"
        +    },
        +    "blocked_by_vocabulary": {
        +      "$ref": "#/properties/vocabulary_warnings"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "fix": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "needs_realtime": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "next_step_estimate": {},
        +    "options": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "results_count": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    },
        +    "why": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcount_leads3 fields changed
      • addedInput schema / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / company_filters / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch for the local vocabulary check — see the lead-side field of the same name.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "advice": {
        +      "type": "string"
        +    },
        +    "blocked_by_vocabulary": {
        +      "$ref": "#/properties/vocabulary_warnings"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "fix": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "needs_realtime": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "next_step_estimate": {},
        +    "options": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "results_count": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    },
        +    "why": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedenrich_company1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "company": {},
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "found": {
        +      "type": "boolean"
        +    },
        +    "lead": {},
        +    "mode": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedenrich_lead1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "company": {},
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "found": {
        +      "type": "boolean"
        +    },
        +    "lead": {},
        +    "mode": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedfind_phone1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "result": {},
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedgenerate_email1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "dropped": {
        +      "type": "number"
        +    },
        +    "job": {},
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "requested": {
        +      "type": "number"
        +    },
        +    "results": {
        +      "type": "array"
        +    },
        +    "submitted": {
        +      "type": "number"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_balance3 fields changed
      • addedInput schema / properties / include_token_analytics
        Added value: +{
        +  "description": "Also return per-API-token request counts for the last 30 days (by endpoint and status). Free. Useful for answering \"which integration is making these calls?\".",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_usage
        Added value: +{
        +  "description": "Also return the month-to-date credit usage broken down by operation type. Free.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "balance_usd": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "email": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "preview_tier": {
        +      "type": [
        +        "boolean",
        +        "null"
        +      ]
        +    },
        +    "prices_source": {
        +      "type": "string"
        +    },
        +    "recent_transactions": {},
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "token_analytics": {},
        +    "usage": {},
        +    "used_this_month_usd": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    },
        +    "your_prices_usd": {}
        +  },
        +  "type": "object"
        +}
    • Changedget_bulk_job1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "job": {},
        +    "job_id": {
        +      "type": "string"
        +    },
        +    "job_type": {
        +      "type": "string"
        +    },
        +    "results": {},
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_lead_by_url1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "company": {},
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "found": {
        +      "type": "boolean"
        +    },
        +    "lead": {},
        +    "mode": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedhealth1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "account": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "api_base": {
        +      "type": "string"
        +    },
        +    "balance_usd": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "credential_error": {},
        +    "credential_valid": {
        +      "type": "boolean"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "has_credential": {
        +      "type": "boolean"
        +    },
        +    "ms": {
        +      "type": "number"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "server": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "version": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedmanage_webhooks1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "action": {
        +      "type": "string"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    },
        +    "webhooks": {}
        +  },
        +  "type": "object"
        +}
    • Changedpreview_leads5 fields changed
      • addedInput schema / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / company_filters / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch for the local vocabulary check — see the lead-side field of the same name.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / confirm_spend_usd
        Added value: +{
        +  "description": "Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.",
        +  "type": "number"
        +}
      • addedInput schema / properties / count_only
        Added value: +{
        +  "description": "Return just how many leads the preview index holds for these filters and spend nothing. Free. This is a second opinion on count_leads: preview and cached search are different indexes and can disagree.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "api_returned_more_than_requested": {
        +      "type": "number"
        +    },
        +    "blocked_by_vocabulary": {
        +      "$ref": "#/properties/vocabulary_warnings"
        +    },
        +    "companies": {
        +      "type": "array"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "escalated_to_realtime_because": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "escalation_note": {
        +      "type": "string"
        +    },
        +    "fix": {
        +      "type": "string"
        +    },
        +    "leads": {
        +      "type": "array"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_page_args": {},
        +    "note": {
        +      "type": "string"
        +    },
        +    "requested_rows": {
        +      "type": "number"
        +    },
        +    "results_count": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "returned": {
        +      "type": "number"
        +    },
        +    "spend_guard": {},
        +    "status": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedresolve_profile
    • Changedsearch_companies3 fields changed
      • addedInput schema / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch for the local vocabulary check — see the lead-side field of the same name.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / confirm_spend_usd
        Added value: +{
        +  "description": "Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.",
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "api_returned_more_than_requested": {
        +      "type": "number"
        +    },
        +    "blocked_by_vocabulary": {
        +      "$ref": "#/properties/vocabulary_warnings"
        +    },
        +    "companies": {
        +      "type": "array"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "escalated_to_realtime_because": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "escalation_note": {
        +      "type": "string"
        +    },
        +    "fix": {
        +      "type": "string"
        +    },
        +    "leads": {
        +      "type": "array"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_page_args": {},
        +    "note": {
        +      "type": "string"
        +    },
        +    "requested_rows": {
        +      "type": "number"
        +    },
        +    "results_count": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "returned": {
        +      "type": "number"
        +    },
        +    "spend_guard": {},
        +    "status": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsearch_leads4 fields changed
      • addedInput schema / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown industry or seniority instead of rejecting it. Set true only when you are sure a value is valid and this server is out of date.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / company_filters / properties / allow_unlisted_values
        Added value: +{
        +  "description": "Escape hatch for the local vocabulary check — see the lead-side field of the same name.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / confirm_spend_usd
        Added value: +{
        +  "description": "Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.",
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "api_returned_more_than_requested": {
        +      "type": "number"
        +    },
        +    "blocked_by_vocabulary": {
        +      "$ref": "#/properties/vocabulary_warnings"
        +    },
        +    "companies": {
        +      "type": "array"
        +    },
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "escalated_to_realtime_because": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "escalation_note": {
        +      "type": "string"
        +    },
        +    "fix": {
        +      "type": "string"
        +    },
        +    "leads": {
        +      "type": "array"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_page_args": {},
        +    "note": {
        +      "type": "string"
        +    },
        +    "requested_rows": {
        +      "type": "number"
        +    },
        +    "results_count": {
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "returned": {
        +      "type": "number"
        +    },
        +    "spend_guard": {},
        +    "status": {
        +      "type": "string"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedstart_bulk_job2 fields changed
      • addedInput schema / properties / confirm_spend_usd
        Added value: +{
        +  "description": "Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to that number.",
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "dropped": {
        +      "type": "number"
        +    },
        +    "job": {},
        +    "job_type": {
        +      "type": "string"
        +    },
        +    "mode": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "reservation_note": {
        +      "type": "string"
        +    },
        +    "reserved_worst_case_usd": {
        +      "type": "number"
        +    },
        +    "submitted": {
        +      "type": "number"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedvalidate_email1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "cost": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_charged_usd": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "billed": {
        +          "type": "string"
        +        },
        +        "note": {
        +          "type": "string"
        +        },
        +        "operation": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "deprecated_params_ignored": {
        +      "additionalProperties": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "results": {},
        +    "submitted": {
        +      "type": "number"
        +    },
        +    "test_mode": {
        +      "type": "boolean"
        +    },
        +    "test_mode_notice": {
        +      "type": "string"
        +    },
        +    "vocabulary_warnings": {
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
  5. 16 tool updates
    • Addedcount_companies
    • Addedcount_leads
    • Addedenrich_company
    • Addedenrich_lead
    • Addedfind_phone
    • Changedgenerate_email12 fields changed
      • changedInput schema / properties / candidates / description
        Previous value: -"Batch mode: resolve many people in one call. Each needs first_name, last_name, domain (middle_name optional)."New value: +"Batch mode. Each entry uses the same identifier rules as the single-person form."
      • addedInput schema / properties / candidates / items / description
        Added value: +"One of: {lead_id} | {linkedin_url} | {first_name,last_name,domain}"
      • addedInput schema / properties / candidates / items / properties / lead_id
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / candidates / items / properties / linkedin_url
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / candidates / items / required
        Removed value: -[
        -  "first_name",
        -  "last_name",
        -  "domain"
        -]
      • changedInput schema / properties / domain / description
        Previous value: -"Company domain without protocol, e.g. \"generect.com\" (required in single-person mode)."New value: +"Company domain without protocol, e.g. \"stripe.com\" (name+domain mode)."
      • changedInput schema / properties / first_name / description
        Previous value: -"First name (single-person mode)."New value: +"First name (name+domain mode)."
      • changedInput schema / properties / last_name / description
        Previous value: -"Last name (single-person mode)."New value: +"Last name (name+domain mode)."
      • addedInput schema / properties / lead_id
        Added value: +{
        +  "description": "Generect lead id from search / preview / enrich results — the cheapest and most accurate identifier.",
        +  "type": "string"
        +}
      • addedInput schema / properties / linkedin_url
        Added value: +{
        +  "description": "LinkedIn profile URL.",
        +  "type": "string"
        +}
      • changedInput schema / properties / middle_name / description
        Previous value: -"Middle name (optional)."New value: +"Middle name (optional, improves pattern matching)."
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
    • Addedget_balance
    • Addedget_bulk_job
    • Changedget_lead_by_url12 fields changed
      • changedInput schema / properties / comments / description
        Previous value: -"Include comments data"New value: +"DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles."
      • removedInput schema / properties / comments / type
        Removed value: -"boolean"
      • addedInput schema / properties / compact
        Added value: +{
        +  "description": "Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / inexact_company / description
        Previous value: -"Allow inexact company matching"New value: +"DEPRECATED — accepted but ignored. Removed: v1 enrich matches on the identifier you pass."
      • removedInput schema / properties / inexact_company / type
        Removed value: -"boolean"
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when a recent cached record is good enough and cost matters more than freshness.",
        +  "enum": [
        +    "auto",
        +    "database",
        +    "realtime"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / people_also_viewed / description
        Previous value: -"Include people also viewed"New value: +"DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles."
      • removedInput schema / properties / people_also_viewed / type
        Removed value: -"boolean"
      • changedInput schema / properties / posts / description
        Previous value: -"Include posts data"New value: +"DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles."
      • removedInput schema / properties / posts / type
        Removed value: -"boolean"
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
      • changedInput schema / properties / url / description
        Previous value: -"LinkedIn profile URL (e.g., https://www.linkedin.com/in/username/)"New value: +"LinkedIn profile URL (e.g. https://www.linkedin.com/in/username/)."
    • Changedhealth4 fields changed
      • addedInput schema / properties / check_credential
        Added value: +{
        +  "description": "Also verify the API token against the free /accounts/me endpoint. Default true.",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / deep
        Removed value: -{
        -  "description": "Run a live API probe (lead-by-link). Consumes a credit. Default false.",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
      • removedInput schema / properties / url
        Removed value: -{
        -  "description": "LinkedIn profile URL for the deep probe (defaults to a public profile).",
        -  "type": "string"
        -}
    • Addedmanage_webhooks
    • Addedpreview_leads
    • Changedsearch_companies29 fields changed
      • changedInput schema / properties / compact / description
        Previous value: -"Default true: 6-field summary per company. Set false for the full raw object."New value: +"Default true: return a small per-company summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields."
      • changedInput schema / properties / company_names / description
        Previous value: -"Restrict to specific company names."New value: +"Restrict to specific company names — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / company_types / description
        Previous value: -"Company types. Allowed values: \"Public Company\", \"Educational\", \"Self Employed\", \"Government Agency\", \"Non Profit\", \"Self Owned\", \"Privately Held\", \"Partnership\"."New value: +"Company types: \"Public Company\",\"Privately Held\",\"Non Profit\",\"Government Agency\",\"Educational\", …"
      • addedInput schema / properties / department_headcount
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Department size, e.g. {\"name\":\"engineering\",\"min\":10,\"max\":100} — realtime only: using it forces the pricier live mode.",
        +  "properties": {
        +    "max": {
        +      "type": "number"
        +    },
        +    "min": {
        +      "type": "number"
        +    },
        +    "name": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "name"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / exclude_domains
        Added value: +{
        +  "description": "Exclude companies by domain (e.g. existing customers).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_ids
        Added value: +{
        +  "description": "Exclude companies by LinkedIn id/URN.",
        +  "items": {
        +    "type": [
        +      "string",
        +      "number"
        +    ]
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / exclude_industries / description
        Previous value: -"Industries to exclude (same taxonomy as industries)."New value: +"Industries to exclude."
      • changedInput schema / properties / exclude_locations / description
        Previous value: -"Locations to exclude."New value: +"HQ locations to exclude."
      • changedInput schema / properties / fallback_from_leads / description
        Previous value: -"Default FALSE. If true and the company search is empty, derive candidate company NAMES by aggregating a keyword lead search. These are lead-derived name counts (source:\"leads_derived\"), NOT real company records, and cost an extra query."New value: +"DEPRECATED — accepted but ignored. Removed. It fabricated lead-derived name aggregates and cost an extra billable query."
      • removedInput schema / properties / fallback_from_leads / type
        Removed value: -"boolean"
      • changedInput schema / properties / get_max_companies / description
        Previous value: -"Also report the total number of matching companies."New value: +"DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking."
      • removedInput schema / properties / get_max_companies / type
        Removed value: -"boolean"
      • addedInput schema / properties / headcount_growth
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Headcount growth in percent — realtime only: using it forces the pricier live mode.",
        +  "properties": {
        +    "max": {
        +      "type": "number"
        +    },
        +    "min": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / headcounts / description
        Previous value: -"Employee headcount buckets. Allowed ONLY: \"1-10\",\"11-50\",\"51-200\",\"201-500\",\"501-1000\",\"1001-5000\",\"5001-10000\",\"10 000+\" (note the space in \"10 000+\")."New value: +"Size buckets. Allowed ONLY: \"1-10\",\"11-50\",\"51-200\",\"201-500\",\"501-1000\",\"1001-5000\",\"5001-10000\",\"10 000+\"."
      • addedInput schema / properties / hiring_on_linkedin
        Added value: +{
        +  "description": "Only companies actively hiring — realtime only: using it forces the pricier live mode.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / industries / description
        Previous value: -"Industries. Must match Generect industry names exactly (e.g. \"Software Development\", \"Financial Services\"). Names are hierarchical. Invalid names are rejected (HTTP 400)."New value: +"Company industries. Must match Generect industry names exactly (e.g. \"Software Development\"); unknown names are rejected with HTTP 400."
      • changedInput schema / properties / keywords / description
        Previous value: -"Free-text keywords (Boolean phrases allowed)."New value: +"Free-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / limit / description
        Previous value: -"Alias for limit_by"New value: +"Alias for limit_by."
      • changedInput schema / properties / limit_by / description
        Previous value: -"Companies to return (1–100, default 25)."New value: +"Rows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call."
      • addedInput schema / properties / linkedins_links
        Added value: +{
        +  "description": "Specific LinkedIn company URLs — realtime only: using it forces the pricier live mode.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / locations / description
        Previous value: -"Locations (countries/regions, e.g. [\"United States\"])."New value: +"HQ locations — cities, states or countries."
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness.",
        +  "enum": [
        +    "auto",
        +    "database",
        +    "realtime"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / num_of_followers / description
        Previous value: -"LinkedIn follower-count buckets."New value: +"LinkedIn follower buckets: \"1-50\",\"51-100\",\"101-1000\",\"1001-5000\",\"5001+\" — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / offset / description
        Previous value: -"Alias for offset_by"New value: +"Alias for offset_by."
      • changedInput schema / properties / offset_by / description
        Previous value: -"Offset for pagination."New value: +"Rows to skip (pagination)."
      • changedInput schema / properties / revenues_range / description
        Previous value: -"Annual revenue range in millions USD, e.g. {\"min\":0.5,\"max\":1001}. Single object, NOT an array."New value: +"Annual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode."
      • addedInput schema / properties / sub_industries
        Added value: +{
        +  "description": "Expand each selected industry to its sub-industries as well (broadens the match).",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / technologies / description
        Previous value: -"Technologies the company uses (BuiltWith taxonomy)."New value: +"Technologies the company uses — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
    • Changedsearch_leads46 fields changed
      • changedInput schema / properties / changed_jobs / description
        Previous value: -"Only leads who recently changed jobs."New value: +"Only leads who recently changed jobs — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / compact / description
        Previous value: -"Default true: return a 9-field summary per lead (name/title/company/industry/location/linkedin_url). Set false for the full raw lead object (skills, experience, etc.). Neither mode includes email — use generate_email."New value: +"Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need skills, education or other deep fields."
      • addedInput schema / properties / company_filters
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Optional: only return leads at companies matching these filters (two-level ICP).",
        +  "properties": {
        +    "company_names": {
        +      "description": "Restrict to specific company names — realtime only: using it forces the pricier live mode.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "company_types": {
        +      "description": "Company types: \"Public Company\",\"Privately Held\",\"Non Profit\",\"Government Agency\",\"Educational\", …",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "department_headcount": {
        +      "additionalProperties": false,
        +      "description": "Department size, e.g. {\"name\":\"engineering\",\"min\":10,\"max\":100} — realtime only: using it forces the pricier live mode.",
        +      "properties": {
        +        "max": {
        +          "type": "number"
        +        },
        +        "min": {
        +          "type": "number"
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "name"
        +      ],
        +      "type": "object"
        +    },
        +    "exclude_domains": {
        +      "description": "Exclude companies by domain (e.g. existing customers).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "exclude_ids": {
        +      "description": "Exclude companies by LinkedIn id/URN.",
        +      "items": {
        +        "type": [
        +          "string",
        +          "number"
        +        ]
        +      },
        +      "type": "array"
        +    },
        +    "exclude_industries": {
        +      "description": "Industries to exclude.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "exclude_locations": {
        +      "description": "HQ locations to exclude.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "headcount_growth": {
        +      "additionalProperties": false,
        +      "description": "Headcount growth in percent — realtime only: using it forces the pricier live mode.",
        +      "properties": {
        +        "max": {
        +          "type": "number"
        +        },
        +        "min": {
        +          "type": "number"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "headcounts": {
        +      "description": "Size buckets. Allowed ONLY: \"1-10\",\"11-50\",\"51-200\",\"201-500\",\"501-1000\",\"1001-5000\",\"5001-10000\",\"10 000+\".",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "hiring_on_linkedin": {
        +      "description": "Only companies actively hiring — realtime only: using it forces the pricier live mode.",
        +      "type": "boolean"
        +    },
        +    "industries": {
        +      "description": "Company industries. Must match Generect industry names exactly (e.g. \"Software Development\"); unknown names are rejected with HTTP 400.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "keywords": {
        +      "description": "Free-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "linkedins_links": {
        +      "description": "Specific LinkedIn company URLs — realtime only: using it forces the pricier live mode.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "locations": {
        +      "description": "HQ locations — cities, states or countries.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "num_of_followers": {
        +      "description": "LinkedIn follower buckets: \"1-50\",\"51-100\",\"101-1000\",\"1001-5000\",\"5001+\" — realtime only: using it forces the pricier live mode.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "revenues_range": {
        +      "additionalProperties": false,
        +      "description": "Annual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode.",
        +      "properties": {
        +        "max": {
        +          "type": "number"
        +        },
        +        "min": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "min",
        +        "max"
        +      ],
        +      "type": "object"
        +    },
        +    "sub_industries": {
        +      "description": "Expand each selected industry to its sub-industries as well (broadens the match).",
        +      "type": "boolean"
        +    },
        +    "technologies": {
        +      "description": "Technologies the company uses — realtime only: using it forces the pricier live mode.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / company_id / description
        Previous value: -"Anchor to a specific LinkedIn company id (returns its employees; this branch is less deterministic and does not enforce lead_industries)."New value: +"Anchor to one company by LinkedIn numeric id."
      • changedInput schema / properties / company_id / type
        Previous value: -"string"New value: +[
        +  "string",
        +  "number"
        +]
      • changedInput schema / properties / company_industries / description
        Previous value: -"Filter by the lead employer's industry (same taxonomy as lead_industries)."New value: +"Industry of the current employer. Must match Generect industry names exactly (e.g. \"Software Development\", \"Financial Services\"); names are hierarchical and unknown names are rejected with HTTP 400 naming the field."
      • changedInput schema / properties / company_link / description
        Previous value: -"Anchor to a specific LinkedIn company URL."New value: +"Anchor to one company by LinkedIn URL."
      • changedInput schema / properties / company_locations / description
        Previous value: -"Filter by the employer HQ location (country/region names)."New value: +"HQ location of the lead's current employer."
      • changedInput schema / properties / company_name / description
        Previous value: -"Anchor to a specific company by name."New value: +"Anchor to one company by name (exclusive with company_link/company_id)."
      • changedInput schema / properties / company_types / description
        Previous value: -"Employer types: \"Public Company\",\"Educational\",\"Self Employed\",\"Government Agency\",\"Non Profit\",\"Self Owned\",\"Privately Held\",\"Partnership\"."New value: +"Employer types: \"Public Company\",\"Privately Held\",\"Non Profit\",\"Government Agency\",\"Educational\",\"Self Employed\",\"Self Owned\",\"Partnership\"."
      • addedInput schema / properties / exclude_company_headcounts
        Added value: +{
        +  "description": "Employer size buckets to exclude.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_company_industries
        Added value: +{
        +  "description": "Employer industries to exclude.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_company_locations
        Added value: +{
        +  "description": "Employer HQ locations to exclude.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / exclude_ids / description
        Previous value: -"sales_ids to exclude — pass the ids of leads already returned in prior calls to paginate/deduplicate."New value: +"Skip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset."
      • addedInput schema / properties / exclude_locations
        Added value: +{
        +  "description": "Lead locations to exclude.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / exclude_names / description
        Previous value: -"Full names to exclude from results."New value: +"Skip leads by full name. KNOWN ISSUE: in database mode any non-empty value collapses the result set to 0 (verified 2026-08-09); it behaves correctly in realtime mode. Prefer exclude_ids, or filter names out yourself after the search."
      • changedInput schema / properties / exclude_title_keywords / description
        Previous value: -"Title keywords to exclude from persona matching. Defaults to [assistant, intern, junior, student, trainee]; pass [] to disable."New value: +"DEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself."
      • removedInput schema / properties / exclude_title_keywords / items
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / exclude_title_keywords / type
        Removed value: -"array"
      • addedInput schema / properties / filter_empty_vars
        Added value: +{
        +  "description": "Drop leads where these fields are empty, e.g. [\"profile_photo\",\"job_started_on\"]. Useful to raise data quality before paying.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / functions / description
        Previous value: -"Job functions (LinkedIn Sales-Nav categories, e.g. [\"Engineering\",\"Operations\",\"Marketing\",\"Sales\",\"Finance\"]). Validated by the API."New value: +"Job functions, e.g. [\"Sales\",\"Marketing\",\"Engineering\"] — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / get_max_leads / description
        Previous value: -"Also report the total number of matching leads (results_count). The number of rows returned is still bounded by limit_by."New value: +"DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking."
      • removedInput schema / properties / get_max_leads / type
        Removed value: -"boolean"
      • changedInput schema / properties / job_title / description
        Previous value: -"Single job title (e.g., \"CEO\"). For multiple titles use job_titles."New value: +"DEPRECATED alias for job_titles. Still honoured: it is merged into job_titles."
      • changedInput schema / properties / job_titles / description
        Previous value: -"One or more target job titles, OR-matched (e.g. [\"CEO\",\"Founder\",\"Owner\",\"President\"]). Preferred over job_title. Assistant/intern/junior/student/trainee are excluded by default; override with exclude_title_keywords."New value: +"Target job titles, OR-matched (e.g. [\"CEO\",\"Founder\",\"Owner\"]). A lead needs to match only one."
      • changedInput schema / properties / keywords / description
        Previous value: -"Free-text keywords matched against the profile (Boolean phrases allowed)."New value: +"Free-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / lead_industries / description
        Previous value: -"Lead personal-industry filter. Must match Generect industry names exactly (e.g. \"Financial Services\", \"IT Services and IT Consulting\"). Names are hierarchical (Financial Services includes Banking/Insurance). Invalid names are rejected (HTTP 400)."New value: +"DEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries."
      • removedInput schema / properties / lead_industries / items
        Removed value: -{
        -  "type": "string"
        -}
      • removedInput schema / properties / lead_industries / type
        Removed value: -"array"
      • changedInput schema / properties / limit / description
        Previous value: -"Alias for limit_by"New value: +"Alias for limit_by."
      • changedInput schema / properties / limit_by / description
        Previous value: -"Total leads to return this call (1–100, default 25). This is a TOTAL cap across all personas. For more, paginate with exclude_ids."New value: +"Rows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call."
      • addedInput schema / properties / linkedin_filter_link
        Added value: +{
        +  "description": "A LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode.",
        +  "type": "string"
        +}
      • changedInput schema / properties / locations / description
        Previous value: -"Lead location filter — country/region names, e.g. [\"United States\",\"Canada\"]."New value: +"Where the lead lives — matches cities, states and countries, e.g. [\"United States\",\"Berlin\"]."
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Data mode. \"database\" = cached, sub-second, cheaper, free counts, core filters only. \"realtime\" = live LinkedIn lookup, 5–60s, pricier, supports every filter. \"auto\" (default) tries database first and only escalates to realtime if a filter you passed is unsupported there — an escalation is reported in the response. Pick \"database\" explicitly when freshness is not critical and cost matters more than freshness.",
        +  "enum": [
        +    "auto",
        +    "database",
        +    "realtime"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / offset / description
        Previous value: -"Alias for offset_by"New value: +"Alias for offset_by."
      • changedInput schema / properties / offset_by / description
        Previous value: -"Offset for pagination (note: ordering is not stable — exclude_ids is more reliable)."New value: +"Rows to skip (pagination)."
      • addedInput schema / properties / past_company_names
        Added value: +{
        +  "description": "Companies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / personas / description
        Previous value: -"Advanced: raw persona tuples [label,[titles],[secondary],[exclusions],seniority?]. Overrides job_title/job_titles."New value: +"Advanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / posted_on_linkedin / description
        Previous value: -"Only leads who recently posted on LinkedIn."New value: +"Only leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode."
      • changedInput schema / properties / seniorities / description
        Previous value: -"Seniority levels (LinkedIn Sales-Nav categories, e.g. [\"Director\",\"VP\",\"Head\",\"Owner\",\"Manager\"]). Validated by the API."New value: +"Seniority at the current employer, e.g. [\"Owner\",\"CXO\",\"VP\",\"Director\",\"Manager\"]. Current position only."
      • addedInput schema / properties / strict
        Added value: +{
        +  "description": "Fields to match strictly, e.g. [\"company_locations\"].",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / timeout_ms / description
        Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
      • changedInput schema / properties / without_company / description
        Previous value: -"Search across all companies (filter-only). Auto-enabled when no company_id/link/name is given; this branch enforces all filters. Ignored when a company anchor is set."New value: +"DEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set."
      • removedInput schema / properties / without_company / type
        Removed value: -"boolean"
      • addedInput schema / properties / years_in_company
        Added value: +{
        +  "description": "Time at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / years_in_position
        Added value: +{
        +  "description": "Time in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
    • Addedstart_bulk_job
    • Addedvalidate_email
  6. 4 tool updates
    • Changedgenerate_email6 fields changed
      • addedInput schema / properties / candidates
        Added value: +{
        +  "description": "Batch mode: resolve many people in one call. Each needs first_name, last_name, domain (middle_name optional).",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "domain": {
        +        "type": "string"
        +      },
        +      "first_name": {
        +        "type": "string"
        +      },
        +      "last_name": {
        +        "type": "string"
        +      },
        +      "middle_name": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "first_name",
        +      "last_name",
        +      "domain"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / domain / description
        Previous value: -"Company domain without protocol (e.g., generect.com)"New value: +"Company domain without protocol, e.g. \"generect.com\" (required in single-person mode)."
      • changedInput schema / properties / first_name / description
        Previous value: -"First name of the person"New value: +"First name (single-person mode)."
      • changedInput schema / properties / last_name / description
        Previous value: -"Last name of the person"New value: +"Last name (single-person mode)."
      • addedInput schema / properties / middle_name
        Added value: +{
        +  "description": "Middle name (optional).",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "first_name",
        -  "last_name",
        -  "domain"
        -]
    • Changedhealth2 fields changed
      • addedInput schema / properties / deep
        Added value: +{
        +  "description": "Run a live API probe (lead-by-link). Consumes a credit. Default false.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / url / description
        Previous value: -"LinkedIn profile URL to validate (defaults to a public profile)"New value: +"LinkedIn profile URL for the deep probe (defaults to a public profile)."
    • Changedsearch_companies15 fields changed
      • changedInput schema / properties / compact / description
        Previous value: -"Return compact summary instead of full JSON"New value: +"Default true: 6-field summary per company. Set false for the full raw object."
      • addedInput schema / properties / company_names
        Added value: +{
        +  "description": "Restrict to specific company names.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_industries
        Added value: +{
        +  "description": "Industries to exclude (same taxonomy as industries).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_locations
        Added value: +{
        +  "description": "Locations to exclude.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / fallback_from_leads / description
        Previous value: -"If no companies, derive from leads by keywords"New value: +"Default FALSE. If true and the company search is empty, derive candidate company NAMES by aggregating a keyword lead search. These are lead-derived name counts (source:\"leads_derived\"), NOT real company records, and cost an extra query."
      • changedInput schema / properties / get_max_companies / description
        Previous value: -"Get maximum companies"New value: +"Also report the total number of matching companies."
      • changedInput schema / properties / headcounts / description
        Previous value: -"Employee headcount ranges. Allowed values ONLY: \"1\", \"2-10\", \"11-50\", \"51-200\", \"201-500\", \"501-1000\", \"1001-5000\", \"5001-10000\", \"10000+\". Note the largest bucket is \"10000+\" (NOT \"10001+\")."New value: +"Employee headcount buckets. Allowed ONLY: \"1-10\",\"11-50\",\"51-200\",\"201-500\",\"501-1000\",\"1001-5000\",\"5001-10000\",\"10 000+\" (note the space in \"10 000+\")."
      • changedInput schema / properties / industries / description
        Previous value: -"Industries. Must match Generect industry names exactly (e.g. \"Software Development\", \"Financial Services\"). Invalid names are rejected by the API."New value: +"Industries. Must match Generect industry names exactly (e.g. \"Software Development\", \"Financial Services\"). Names are hierarchical. Invalid names are rejected (HTTP 400)."
      • changedInput schema / properties / keywords / description
        Previous value: -"Keywords"New value: +"Free-text keywords (Boolean phrases allowed)."
      • changedInput schema / properties / limit_by / description
        Previous value: -"Number of results to return"New value: +"Companies to return (1–100, default 25)."
      • changedInput schema / properties / locations / description
        Previous value: -"Locations (countries, e.g. [\"United States\"])"New value: +"Locations (countries/regions, e.g. [\"United States\"])."
      • addedInput schema / properties / num_of_followers
        Added value: +{
        +  "description": "LinkedIn follower-count buckets.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / offset_by / description
        Previous value: -"Offset for pagination"New value: +"Offset for pagination."
      • addedInput schema / properties / revenues_range
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Annual revenue range in millions USD, e.g. {\"min\":0.5,\"max\":1001}. Single object, NOT an array.",
        +  "properties": {
        +    "max": {
        +      "type": "number"
        +    },
        +    "min": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "min",
        +    "max"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / technologies
        Added value: +{
        +  "description": "Technologies the company uses (BuiltWith taxonomy).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedsearch_leads25 fields changed
      • addedInput schema / properties / changed_jobs
        Added value: +{
        +  "description": "Only leads who recently changed jobs.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / compact / description
        Previous value: -"Return compact summary instead of full JSON"New value: +"Default true: return a 9-field summary per lead (name/title/company/industry/location/linkedin_url). Set false for the full raw lead object (skills, experience, etc.). Neither mode includes email — use generate_email."
      • addedInput schema / properties / company_headcounts
        Added value: +{
        +  "description": "Employer size buckets. Allowed ONLY: \"1-10\",\"11-50\",\"51-200\",\"201-500\",\"501-1000\",\"1001-5000\",\"5001-10000\",\"10 000+\" (note the space in \"10 000+\").",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / company_id / description
        Previous value: -"LinkedIn company id"New value: +"Anchor to a specific LinkedIn company id (returns its employees; this branch is less deterministic and does not enforce lead_industries)."
      • addedInput schema / properties / company_industries
        Added value: +{
        +  "description": "Filter by the lead employer's industry (same taxonomy as lead_industries).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / company_link / description
        Previous value: -"LinkedIn company URL"New value: +"Anchor to a specific LinkedIn company URL."
      • addedInput schema / properties / company_locations
        Added value: +{
        +  "description": "Filter by the employer HQ location (country/region names).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / company_name / description
        Previous value: -"Company name"New value: +"Anchor to a specific company by name."
      • addedInput schema / properties / company_types
        Added value: +{
        +  "description": "Employer types: \"Public Company\",\"Educational\",\"Self Employed\",\"Government Agency\",\"Non Profit\",\"Self Owned\",\"Privately Held\",\"Partnership\".",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_ids
        Added value: +{
        +  "description": "sales_ids to exclude — pass the ids of leads already returned in prior calls to paginate/deduplicate.",
        +  "items": {
        +    "type": [
        +      "string",
        +      "number"
        +    ]
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_names
        Added value: +{
        +  "description": "Full names to exclude from results.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / exclude_title_keywords
        Added value: +{
        +  "description": "Title keywords to exclude from persona matching. Defaults to [assistant, intern, junior, student, trainee]; pass [] to disable.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / functions
        Added value: +{
        +  "description": "Job functions (LinkedIn Sales-Nav categories, e.g. [\"Engineering\",\"Operations\",\"Marketing\",\"Sales\",\"Finance\"]). Validated by the API.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / get_max_leads
        Added value: +{
        +  "description": "Also report the total number of matching leads (results_count). The number of rows returned is still bounded by limit_by.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / job_title / description
        Previous value: -"Job title filter (e.g., CEO, CTO, Engineer)"New value: +"Single job title (e.g., \"CEO\"). For multiple titles use job_titles."
      • addedInput schema / properties / job_titles
        Added value: +{
        +  "description": "One or more target job titles, OR-matched (e.g. [\"CEO\",\"Founder\",\"Owner\",\"President\"]). Preferred over job_title. Assistant/intern/junior/student/trainee are excluded by default; override with exclude_title_keywords.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / keywords
        Added value: +{
        +  "description": "Free-text keywords matched against the profile (Boolean phrases allowed).",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / lead_industries / description
        Previous value: -"Industry filter. Must match Generect industry names exactly (e.g. \"Information Technology and Services\", \"Financial Services\"). Invalid names are rejected by the API."New value: +"Lead personal-industry filter. Must match Generect industry names exactly (e.g. \"Financial Services\", \"IT Services and IT Consulting\"). Names are hierarchical (Financial Services includes Banking/Insurance). Invalid names are rejected (HTTP 400)."
      • changedInput schema / properties / limit_by / description
        Previous value: -"Number of results to return"New value: +"Total leads to return this call (1–100, default 25). This is a TOTAL cap across all personas. For more, paginate with exclude_ids."
      • changedInput schema / properties / locations / description
        Previous value: -"Location filter — country or region names, e.g. [\"United States\", \"Canada\"]"New value: +"Lead location filter — country/region names, e.g. [\"United States\",\"Canada\"]."
      • changedInput schema / properties / offset_by / description
        Previous value: -"Offset for pagination"New value: +"Offset for pagination (note: ordering is not stable — exclude_ids is more reliable)."
      • addedInput schema / properties / personas
        Added value: +{
        +  "description": "Advanced: raw persona tuples [label,[titles],[secondary],[exclusions],seniority?]. Overrides job_title/job_titles.",
        +  "type": "array"
        +}
      • addedInput schema / properties / posted_on_linkedin
        Added value: +{
        +  "description": "Only leads who recently posted on LinkedIn.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / seniorities
        Added value: +{
        +  "description": "Seniority levels (LinkedIn Sales-Nav categories, e.g. [\"Director\",\"VP\",\"Head\",\"Owner\",\"Manager\"]). Validated by the API.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / without_company / description
        Previous value: -"Search leads without filtering by companies"New value: +"Search across all companies (filter-only). Auto-enabled when no company_id/link/name is given; this branch enforces all filters. Ignored when a company anchor is set."
  7. 2 tool updates
    • Changedsearch_companies6 fields changed
      • changedInput schema / properties / company_types / description
        Previous value: -"Company types"New value: +"Company types. Allowed values: \"Public Company\", \"Educational\", \"Self Employed\", \"Government Agency\", \"Non Profit\", \"Self Owned\", \"Privately Held\", \"Partnership\"."
      • changedInput schema / properties / headcounts / description
        Previous value: -"Headcount ranges"New value: +"Employee headcount ranges. Allowed values ONLY: \"1\", \"2-10\", \"11-50\", \"51-200\", \"201-500\", \"501-1000\", \"1001-5000\", \"5001-10000\", \"10000+\". Note the largest bucket is \"10000+\" (NOT \"10001+\")."
      • changedInput schema / properties / industries / description
        Previous value: -"Industries"New value: +"Industries. Must match Generect industry names exactly (e.g. \"Software Development\", \"Financial Services\"). Invalid names are rejected by the API."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Alias for limit_by",
        +  "type": "number"
        +}
      • changedInput schema / properties / locations / description
        Previous value: -"Locations (Countries, e.g \"United States\")"New value: +"Locations (countries, e.g. [\"United States\"])"
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Alias for offset_by",
        +  "type": "number"
        +}
    • Changedsearch_leads5 fields changed
      • changedInput schema / properties / lead_industries / description
        Previous value: -"Industry filter (e.g., Technology, Healthcare)"New value: +"Industry filter. Must match Generect industry names exactly (e.g. \"Information Technology and Services\", \"Financial Services\"). Invalid names are rejected by the API."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Alias for limit_by",
        +  "type": "number"
        +}
      • changedInput schema / properties / locations / description
        Previous value: -"Location filter (e.g., San Francisco, New York)"New value: +"Location filter — country or region names, e.g. [\"United States\", \"Canada\"]"
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Alias for offset_by",
        +  "type": "number"
        +}
      • changedInput schema / properties / without_company / description
        Previous value: -"Search leads without filrest by companies"New value: +"Search leads without filtering by companies"
  8. 2 tool updates
    • Changedsearch_companies4 fields changed
      • addedInput schema / properties / limit_by
        Added value: +{
        +  "description": "Number of results to return",
        +  "type": "number"
        +}
      • addedInput schema / properties / locations
        Added value: +{
        +  "description": "Locations (Countries, e.g \"United States\")",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / max_items
        Removed value: -{
        -  "description": "Maximum items to include in response (local trim)",
        -  "type": "number"
        -}
      • addedInput schema / properties / offset_by
        Added value: +{
        +  "description": "Offset for pagination",
        +  "type": "number"
        +}
    • Changedsearch_leads10 fields changed
      • removedInput schema / properties / industry
        Removed value: -{
        -  "description": "Industry filter (e.g., Technology, Healthcare)",
        -  "type": "string"
        -}
      • addedInput schema / properties / lead_industries
        Added value: +{
        +  "description": "Industry filter (e.g., Technology, Healthcare)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "description": "Number of results to return",
        -  "type": "number"
        -}
      • addedInput schema / properties / limit_by
        Added value: +{
        +  "description": "Number of results to return",
        +  "type": "number"
        +}
      • removedInput schema / properties / location
        Removed value: -{
        -  "description": "Location filter (e.g., San Francisco, New York)",
        -  "type": "string"
        -}
      • addedInput schema / properties / locations
        Added value: +{
        +  "description": "Location filter (e.g., San Francisco, New York)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / max_items
        Removed value: -{
        -  "description": "Maximum items to include in response (local trim)",
        -  "type": "number"
        -}
      • removedInput schema / properties / offset
        Removed value: -{
        -  "description": "Offset for pagination",
        -  "type": "number"
        -}
      • addedInput schema / properties / offset_by
        Added value: +{
        +  "description": "Offset for pagination",
        +  "type": "number"
        +}
      • addedInput schema / properties / without_company
        Added value: +{
        +  "description": "Search leads without filrest by companies",
        +  "type": "boolean"
        +}
  9. 5 tool updates
    • First observedgenerate_email
    • First observedget_lead_by_url
    • First observedhealth
    • First observedsearch_companies
    • First observedsearch_leads

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI tools to search and enrich B2B leads, including finding professional emails, company profiles, and filtering people and companies by various criteria.
    5
    411 npm
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search, enrich, and score B2B leads in real time from a database of 10M+ companies.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to research companies and find contacts with structured data from multiple free sources, including company info, tech stack, and email addresses.
    3
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search a global professional database in plain English, reveal full profiles, and fetch verified work emails, email verification, reverse email lookup, and LinkedIn and company lookups. Searches are free, while most lookups cost credits that are refunded automatically when nothing is found.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.