Checked buying signals and ranked lead lists for your agent. Never contacts anyone.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free. The status (queued, running, done or failed) and, once done, the result of a background job: a playbook call or a long playbook round. While a playbook runs, `partial` is its ranked list so far: `tier` says how far it got (listed: every candidate ranked on the facts already in hand; screened: the top ones passed the fit screen; researched: the top ones' signals checked) and `progress` the counts. Show it to the user as a first look; the final result replaces it. Use when: a call returned `job`, "is my playbook done", "is my ranking done", "status of my job". Skip when: no call has returned a job id. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
The job id a call returned
Tool list last changed Oct 25, 2026.
Free. The status (queued, running, done or failed) and, once done, the result of a background job: a playbook call or a long playbook round. While a playbook runs, `partial` is its ranked list so far: `tier` says how far it got (listed: every candidate ranked on the facts already in hand; screened: the top ones passed the fit screen; researched: the top ones' signals checked) and `progress` the counts. Show it to the user as a first look; the final result replaces it. Use when: a call returned `job`, "is my playbook done", "is my ranking done", "status of my job". Skip when: no call has returned a job id. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
| Argument | Type | Description |
|---|---|---|
| id* | string | The job id a call returned |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The job id a call returned"
}
}
}Price in paid mode: $7.50 on a discover for the same seller from the last 7 days, $25.00 when it has to run its own sweep. Never more than max_usd. Mode: `paid` (the default when the balance covers one result) runs SalesMap's own search, models and paid data sources, free sources first, at the price above. `free` (the default otherwise) is $0: the calling agent runs the searches and judgments returned as `work`, and SalesMap reads and checks every source. `mode` overrides the default. Finds the accounts a seller should sell to now, writes the sales playbook, and lists the relevant events coming up that fit the seller's buyers, in one call. From the seller's website (or the user's own list of companies in `companies`, up to 50) it runs discover: drafts the ICP from the site (or takes one), finds candidate companies from free sources (competitors' customer pages, web search, Hacker News, YC, press wires, ATS boards, SEC Form D), reads each one's job board, news, tools and AI-adoption signals, checks every signal against its source page and ranks (prioritizes) them, fresh signal clusters and warm ways in first. `ranked` is the rest of the researched list beyond the ones written up, in order with each one's rank, compact: per account its fit, buyer role, signal families with the strongest signal, `readyNow` and `checkFirst` (the gaps: unknown or out-of-band size, no checked signal or none showing a need, no fit shown in its facts, no way in). `listed` is every other company it found, by tier (screened: home page read for fit; listed: ranked only on where it was found) then score: never researched, checked or charged, 25 inline. Then it writes up the accounts that qualified, up to five (at least the top three), highest ranked first, as a Markdown playbook (`moreQualified` names any qualified past the five): per company its fit, why now (the signals that passed their check, with links and dates), who to reach (a warm path from the user's network, else the buyer role), the angle, Check first, its checked ties to upcoming events (sponsor, speaker, host or exhibitor) and a first-email draft. Under the accounts: relevant events coming up that fit the seller's buyers (each page and date checked; nobody is confirmed to attend). The write-up is checked claim by claim against the signals and the seller's offer; after one whole-write-up repair, an email that still fails is withheld in full. Returns the Markdown with a short summary per company; locally it is also saved to a file at `path`. Takes minutes; research is cached, so a rerun is fast. It writes up the user's discover for the same seller and criteria from the last 7 days when there is one (`reusedDiscover`); otherwise `reuse` says why it searched again. Use when: "find accounts for <seller site>", "who should I sell to", "who should <seller site> sell to right now", "which accounts are in market", "rank my list of target accounts", "which of my own accounts should I work first", "who in my network can introduce me to a buyer", "who do I know at <company>", "write me a playbook for <seller site>", "give me a sales playbook for <seller>", "top 3 accounts with openers", "who should I email this week and what do I say", "draft outreach for my best accounts". Skip when: the question is one fact about one company (what software or vendors it runs, its DNS records or certificate logs, whether it ships an MCP server or is serious about LLMs), one news item, quote, claim or row to verify or fact-check, a draft of the user's own to check, whether an address is valid or deliverable, a mobile or phone number, LinkedIn profiles pulled or scraped, mutuals found by browsing LinkedIn, an RSVP or registration, events, conferences or meetups to attend on their own (the playbook lists them only beside its accounts), a watchlist of lost deals, facts about the user's own company to save or remember, or anything sent or written into a CRM (Salesforce, HubSpot) as leads: this never contacts anyone or writes anywhere but its own file. Each account also returns its fit, watch-outs, Check first gaps, evidence and complete checked opener in structured fields, and `delivered` when it has a sourced in-band size, a checked signal or warm path and a complete checked email. Observed (checked signals), Inferred (fit, objections, angle, roles) and drafts are labelled apart in the file. Openers are drafts for the user to edit, not facts about the people. `evidence`: passages the user found on a public page (its URL, the quote verbatim, the date as printed); each is checked against its page before it counts as a signal on that company, and is never what makes an account charged. Each failed passage comes back under `evidence` with the rule it failed. Paid mode, with `context.user.linkedinUrl` saved: who to reach also lists up to 3 buyers per account (9 in all) whose past employer (overlapping years) or school matches the user's own, read through treg's hosted BlitzAPI under the budget hold and matched in code. Without connections or shared history, the result says it is cold outreach. `context` takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running. On the hosted server a finished playbook also returns `link`: its page on salesmap.site, the same layout for every seller, which only signed-in members of the user's workspace can open (a member can make a public copy there that names no one). Give the user the link. In paid mode: charged per result returned from the user's credits, never for a miss (the paid data sources it uses, TheirStack and Monid, are our cost): at most `max_usd` (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with `stopped: "budget"`, charged only for that; `budget` says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's ask-before-spending threshold (default $1) asks the user first through the client (MCP elicitation); a client without that gets a `confirm` result with the cost and a one-use token, and a repeat call with the same arguments and `confirm_token` runs it. On the hosted server it runs as a background job: a round that takes longer than about 25 seconds returns `job` (its id and status) instead, and the free `job` tool returns its status and, once done, this call's result. In paid mode one call does it all, with no rounds. In free mode each round returns `work` and continuation.input until there is none. While SalesMap's models or search are unavailable, a paid call carries on as a free one, says so in `notice` and charges nothing. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
| Argument | Type | Description |
|---|---|---|
| icp | object | |
| days | integer | |
| hard | array | |
| mode | string | paid: SalesMap searches and judges, with every paid data source, charged per result. free: $0, the calling agent runs the searches and judgments returned as `work`. Default paid when the balance covers one result, else free (SalesMap model checks in free mode: up to $1 a day); keep it unchanged across work rounds (continuation.input carries it). |
| limit | integer | |
| resume | string | Free-mode work rounds: continuation.input's id for the earlier rounds' answers, so `searches` needs only this round's |
| seller* | string | |
| context | object | |
| max_usd | number | Most this call may spend, in USD; default its quote. A call quoted over it is refused. |
| mobiles | boolean | Also looks up the shown buyers' verified mobile numbers (paid mode). A number is shown only when it is not on the user's do-not-call list. |
| vendors | array | |
| evidence | array |
Free. What a call to a SalesMap tool is expected to cost, before running it, against what the workspace can spend now (credits and limits). Not a charge: the most the call can charge, which it reserves (or its max_usd); it is charged per result returned, never more. Use when: "how much will this cost", "can I afford a playbook for these 20 accounts", "what would a playbook cost". Skip when: the user wants their balance or limits without a call in mind. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
| Argument | Type | Description |
|---|---|---|
| tool* | string | The tool to quote, e.g. rank |
| input | object | That tool's arguments, as in a call to it |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"tool"
],
"properties": {
"tool": {
"type": "string",
"description": "The tool to quote, e.g. rank"
},
"input": {
"type": "object",
"default": {},
"description": "That tool's arguments, as in a call to it",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
}
}Price: free. Saves and reads the user's facts about their own company, kept in the user's SalesMap workspace (one entry per seller site, seen by that workspace only): who they are, company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions, do-not-contact. playbook starts from it. Returns the saved profile, the key fields still missing (ICP, buyer roles) and a question for each. Also returns `signals`, the buying signals playbook's account search looks for: the saved `needPatterns`, `signalFamilies` and `signalTypes`, `addMore` (the signal types it can detect, in 8 families: save the families the user switches on as `signalFamilies`, and discover drafts 2 or 3 signals for each; or a type by id as `signalTypes`) and, with the ICP and buyer roles known and no patterns saved, `draft`: the drafting prompt for the calling agent's model, which returns this seller's drafted signals. Use when: "remember that we sell to …", "save or update my ICP / buyer roles / customers", "our competitors are …", "don't target these accounts", "what do you know about my company / my profile", before the first list for a seller. Skip when: the question is about a prospect company, not the user's own, or about a watch on closed-lost deals and which are ready again. The saved fields are the user's inputs, not findings. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
| Argument | Type | Description |
|---|---|---|
| seller* | string | The user's own company site, e.g. getklira.com |
| context | object | Fields to save, merged into the saved profile field by field. Omit to read. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"seller"
],
"properties": {
"seller": {
"type": "string",
"minLength": 3,
"description": "The user's own company site, e.g. getklira.com"
},
"context": {
"type": "object",
"properties": {
"icp": {
"type": "string",
"maxLength": 1000,
"description": "Who the ideal customer is: company type, industry, size, stage, region"
},
"won": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Deals won (domains or names): the pattern to find more of"
},
"hard": {
"type": "array",
"items": {
"enum": [
"size",
"fit",
"intent"
],
"type": "string"
},
"maxItems": 3,
"description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it"
},
"lost": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Deals lost or churned (domains or names), with why if known"
},
"user": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"role": {
"type": "string",
"maxLength": 120
},
"linkedinUrl": {
"type": "string",
"pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
"description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model"
}
},
"description": "Who the user is: their name, role at the seller and LinkedIn profile URL"
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Anything else the user said that should shape the list"
},
"company": {
"type": "string",
"maxLength": 200,
"description": "The seller company's name"
},
"product": {
"type": "string",
"maxLength": 1000,
"description": "What the seller sells, in a sentence or two"
},
"regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Regions or countries the seller sells into"
},
"ycBatch": {
"type": "string",
"maxLength": 40,
"description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out"
},
"segments": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\""
},
"customers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Current customers, as domains (acme.com) or names: never targeted"
},
"employees": {
"type": "object",
"properties": {
"max": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"min": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
},
"description": "Headcount band the seller can close, when the user has said"
},
"investors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model"
},
"openDeals": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies in an open deal (domains): left out"
},
"warmPaths": {
"type": "array",
"items": {
"type": "object",
"required": [
"company",
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 200,
"minLength": 3
},
"confirmedAt": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
},
"maxItems": 500,
"description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
},
"buyerRoles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\""
},
"exclusions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies or kinds of company to leave out"
},
"competitors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Competitors, as domains or names: never targeted"
},
"signalTypes": {
"type": "array",
"items": {
"enum": [
"job_posting_buyer_role",
"job_posting_mentions_tool",
"hiring_surge_function",
"headcount_growth",
"role_reopened",
"layoffs",
"hiring_freeze",
"function_attrition",
"employee_sentiment_drop",
"funding_round",
"funding_use_of_funds_match",
"debt_financing",
"ipo_filing",
"acquires_company",
"company_acquired",
"spin_off_carve_out",
"geo_expansion",
"partnership_announced",
"partnership_ended",
"prospect_loses_client",
"revenue_decline",
"distress_bankruptcy",
"earnings_call_mention",
"annual_report_insight",
"company_register_change",
"product_launch",
"website_relaunch",
"site_section_added",
"pricing_change",
"legal_page_change",
"new_public_repo_by_topic",
"own_incident_spike",
"public_symptom_visible",
"own_customer_reviews_negative",
"event_sponsorship",
"compliance_pursuit",
"regulation_deadline",
"regulatory_exposure",
"platform_policy_change",
"data_breach",
"peer_company_incident",
"litigation",
"positive_media",
"negative_media",
"award_recognition",
"tech_adoption_adjacent",
"competitor_installed",
"competitor_newly_adopted",
"overlapping_tools_in_category",
"recent_software_purchases",
"outbound_domains_registered",
"mcp_server_published",
"hf_org_paid_plan",
"bug_bounty_ai_scope",
"new_exec_buyer_role",
"exec_departure",
"first_hire_in_function",
"competitor_outage_deprecation",
"competitor_acquired_closed",
"competitor_logo_removed",
"competitor_positioning_change",
"competitor_banned_or_sanctioned",
"social_post_about_problem",
"podcast_or_talk_appearance",
"exec_public_appearance",
"named_project_underway",
"customer_peer_reference"
],
"type": "string"
},
"maxItems": 15,
"description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none"
},
"doNotContact": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies the user said never to contact (domains)"
},
"needPatterns": {
"type": "array",
"items": {
"type": "object",
"required": [
"need",
"where",
"proof"
],
"properties": {
"need": {
"type": "string",
"maxLength": 160,
"minLength": 3
},
"proof": {
"type": "string",
"maxLength": 300,
"minLength": 3
},
"where": {
"type": "array",
"items": {
"enum": [
"jobs",
"tools",
"news",
"site",
"ai_adoption"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1
},
"family": {
"enum": [
"hiring",
"company_events",
"product_site",
"news_compliance",
"tools",
"people_moves",
"competitor_events",
"public_intent"
],
"type": "string"
}
}
},
"maxItems": 24,
"minItems": 1,
"description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank"
},
"signalFamilies": {
"type": "array",
"items": {
"enum": [
"hiring",
"company_events",
"product_site",
"news_compliance",
"tools",
"people_moves",
"competitor_events",
"public_intent"
],
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all"
}
},
"description": "Fields to save, merged into the saved profile field by field. Omit to read."
}
}
}Free. Sets the user's own monthly spending limit for SalesMap in USD (rolling 30 days); null removes it. Until set: $250 once the workspace has topped up, else $100. There is no daily or weekly limit. No call ever spends past the limit or the credit balance. Also the confirm amount: a paid call quoted over it asks the user first (default $1; 0 asks every time; null never asks). Returns the limits with what's spent and left. Use when: "set a monthly budget", "cap my spend at $50 a month", "raise my limit", "remove the limit", "stop asking me before each call". Skip when: the user only wants to see their limits, not change them. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
| Argument | Type | Description |
|---|---|---|
| confirmUsd | any | USD; paid calls quoted over it need the user's yes first; 0 means every call; null means none; omitted, it is kept |
| monthlyUsd | any | USD; null removes this limit; omit to keep it |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirmUsd": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "USD; paid calls quoted over it need the user's yes first; 0 means every call; null means none; omitted, it is kept"
},
"monthlyUsd": {
"anyOf": [
{
"type": "number",
"exclusiveMinimum": 0
},
{
"type": "null"
}
],
"description": "USD; null removes this limit; omit to keep it"
}
}
}Free. Who the user is on SalesMap and what they can do: their name and email, the workspace and their role in it, how they signed in, the credit balance, the monthly spending limit (rolling 30 days; null = no limit) with what's spent and left, the amount above which a paid call asks first, the seller profiles saved and the LinkedIn connections uploaded, links to top up and to upload connections, and which tools are free. It holds no ids. Use when: "who am I", "which account is this", "how much budget do I have left", "what are my limits", before a large paid call. Skip when: the user wants the price of one specific call. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in <field>Flags with the attack family.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}| Passages the user found on a public page (domain, url, verbatim quote, date as printed); each is checked before it counts |
| searches | object | With callerSearch: each `work` id → the JSON its prompt returned, including every earlier round's answers |
| champions | array |
| companies | array |
| customers | array |
| openDeals | array |
| connectors | array |
| evaluators | array |
| connections | object |
| callerSearch | boolean | Ignored on this server: `mode` decides who searches. |
| doNotContact | array |
| includeShown | boolean |
| confirm_token | string | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
| priorContacts | array |
| previousConnections | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"seller"
],
"properties": {
"icp": {
"type": "object",
"required": [
"who",
"focus",
"segments",
"minEmployees",
"maxEmployees",
"buyerRoles",
"exclusions",
"titlePatterns",
"keywords"
],
"properties": {
"who": {
"type": "string",
"maxLength": 400,
"minLength": 1
},
"focus": {
"type": "string",
"maxLength": 600,
"minLength": 1
},
"seller": {
"type": "object",
"properties": {
"stage": {
"anyOf": [
{
"type": "string",
"maxLength": 80
},
{
"type": "null"
}
]
},
"funding": {
"anyOf": [
{
"type": "string",
"maxLength": 160
},
{
"type": "null"
}
]
},
"headcount": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "null"
}
]
}
}
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"minLength": 2
},
"maxItems": 12
},
"segments": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 10
},
"buyerRoles": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 10
},
"exclusions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 10
},
"industries": {
"type": "array",
"items": {
"type": "string",
"minLength": 2
},
"maxItems": 12
},
"maxEmployees": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"minEmployees": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"titlePatterns": {
"type": "array",
"items": {
"type": "string",
"minLength": 2
},
"maxItems": 8,
"minItems": 1
},
"descriptionPatterns": {
"type": "array",
"items": {
"type": "string",
"minLength": 2
},
"maxItems": 8
}
}
},
"days": {
"type": "integer",
"default": 90,
"maximum": 90,
"minimum": 7
},
"hard": {
"type": "array",
"items": {
"enum": [
"size",
"fit",
"intent"
],
"type": "string"
},
"maxItems": 3
},
"mode": {
"enum": [
"free",
"paid"
],
"type": "string",
"description": "paid: SalesMap searches and judges, with every paid data source, charged per result. free: $0, the calling agent runs the searches and judgments returned as `work`. Default paid when the balance covers one result, else free (SalesMap model checks in free mode: up to $1 a day); keep it unchanged across work rounds (continuation.input carries it)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1
},
"resume": {
"type": "string",
"description": "Free-mode work rounds: continuation.input's id for the earlier rounds' answers, so `searches` needs only this round's"
},
"seller": {
"type": "string"
},
"context": {
"type": "object",
"properties": {
"icp": {
"type": "string",
"maxLength": 1000,
"description": "Who the ideal customer is: company type, industry, size, stage, region"
},
"won": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Deals won (domains or names): the pattern to find more of"
},
"hard": {
"type": "array",
"items": {
"enum": [
"size",
"fit",
"intent"
],
"type": "string"
},
"maxItems": 3,
"description": "Strict cut-offs the user chose: \"size\" drops companies without a sourced size inside the band, \"fit\" drops those without a source-supported use case, \"intent\" drops those with no buying signal or way in. Unnamed ones only rank and flag. Ask once at onboarding; a call's own `hard` overrides it"
},
"lost": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Deals lost or churned (domains or names), with why if known"
},
"user": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"role": {
"type": "string",
"maxLength": 120
},
"linkedinUrl": {
"type": "string",
"pattern": "^https?:\\/\\/([a-z]{2,3}\\.)?linkedin\\.com\\/in\\/[^/?#\\s]+\\/?$",
"description": "s99: the user's own LinkedIn profile URL. In paid mode the playbook reads their past jobs and schools from it once (treg's hosted API) and matches them with its buyers' in code for shared-history paths; kept in the workspace, never sent to a model"
}
},
"description": "Who the user is: their name, role at the seller and LinkedIn profile URL"
},
"notes": {
"type": "string",
"maxLength": 2000,
"description": "Anything else the user said that should shape the list"
},
"company": {
"type": "string",
"maxLength": 200,
"description": "The seller company's name"
},
"product": {
"type": "string",
"maxLength": 1000,
"description": "What the seller sells, in a sentence or two"
},
"regions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Regions or countries the seller sells into"
},
"ycBatch": {
"type": "string",
"maxLength": 40,
"description": "The seller's Y Combinator batch, e.g. \"W23\"; read from the seller's YC page when left out"
},
"segments": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\""
},
"customers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Current customers, as domains (acme.com) or names: never targeted"
},
"employees": {
"type": "object",
"properties": {
"max": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"min": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
},
"description": "Headcount band the seller can close, when the user has said"
},
"investors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Optional: the seller's own investors (firms or angels), e.g. \"Sequoia Capital\", beside the ones discover finds and confirms from public pages itself; matched in code against each account's pages, funding news and the investors' portfolio pages, never sent to a model"
},
"openDeals": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies in an open deal (domains): left out"
},
"warmPaths": {
"type": "array",
"items": {
"type": "object",
"required": [
"company",
"path"
],
"properties": {
"path": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"company": {
"type": "string",
"maxLength": 200,
"minLength": 3
},
"confirmedAt": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
},
"maxItems": 500,
"description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
},
"buyerRoles": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\""
},
"exclusions": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies or kinds of company to leave out"
},
"competitors": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Competitors, as domains or names: never targeted"
},
"signalTypes": {
"type": "array",
"items": {
"enum": [
"job_posting_buyer_role",
"job_posting_mentions_tool",
"hiring_surge_function",
"headcount_growth",
"role_reopened",
"layoffs",
"hiring_freeze",
"function_attrition",
"employee_sentiment_drop",
"funding_round",
"funding_use_of_funds_match",
"debt_financing",
"ipo_filing",
"acquires_company",
"company_acquired",
"spin_off_carve_out",
"geo_expansion",
"partnership_announced",
"partnership_ended",
"prospect_loses_client",
"revenue_decline",
"distress_bankruptcy",
"earnings_call_mention",
"annual_report_insight",
"company_register_change",
"product_launch",
"website_relaunch",
"site_section_added",
"pricing_change",
"legal_page_change",
"new_public_repo_by_topic",
"own_incident_spike",
"public_symptom_visible",
"own_customer_reviews_negative",
"event_sponsorship",
"compliance_pursuit",
"regulation_deadline",
"regulatory_exposure",
"platform_policy_change",
"data_breach",
"peer_company_incident",
"litigation",
"positive_media",
"negative_media",
"award_recognition",
"tech_adoption_adjacent",
"competitor_installed",
"competitor_newly_adopted",
"overlapping_tools_in_category",
"recent_software_purchases",
"outbound_domains_registered",
"mcp_server_published",
"hf_org_paid_plan",
"bug_bounty_ai_scope",
"new_exec_buyer_role",
"exec_departure",
"first_hire_in_function",
"competitor_outage_deprecation",
"competitor_acquired_closed",
"competitor_logo_removed",
"competitor_positioning_change",
"competitor_banned_or_sanctioned",
"social_post_about_problem",
"podcast_or_talk_appearance",
"exec_public_appearance",
"named_project_underway",
"customer_peer_reference"
],
"type": "string"
},
"maxItems": 15,
"description": "Catalog signal types the user added from the \"add more\" list (s97), by id (seller_profile's `signals.addMore`); discover looks for each as a need pattern on top of `needPatterns`, or of its drafted ones when there are none"
},
"doNotContact": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 500,
"description": "Companies the user said never to contact (domains)"
},
"needPatterns": {
"type": "array",
"items": {
"type": "object",
"required": [
"need",
"where",
"proof"
],
"properties": {
"need": {
"type": "string",
"maxLength": 160,
"minLength": 3
},
"proof": {
"type": "string",
"maxLength": 300,
"minLength": 3
},
"where": {
"type": "array",
"items": {
"enum": [
"jobs",
"tools",
"news",
"site",
"ai_adoption"
],
"type": "string"
},
"maxItems": 5,
"minItems": 1
},
"family": {
"enum": [
"hiring",
"company_events",
"product_site",
"news_compliance",
"tools",
"people_moves",
"competitor_events",
"public_intent"
],
"type": "string"
}
}
},
"maxItems": 24,
"minItems": 1,
"description": "What a buying need for the seller's offer looks like (s94): each a need, where it shows (jobs, tools, news, site, ai_adoption) and the proof that counts. The drafted ones the user kept plus any they described in their own words (s97). Discover drafts them when left out and returns them to review; only signals matching one rank"
},
"signalFamilies": {
"type": "array",
"items": {
"enum": [
"hiring",
"company_events",
"product_site",
"news_compliance",
"tools",
"people_moves",
"competitor_events",
"public_intent"
],
"type": "string"
},
"maxItems": 8,
"minItems": 1,
"description": "The signal families the user switched on (the families of `signals.addMore`, by id). Discover drafts 2 or 3 need patterns for each, worded for the seller's offer, and drops patterns in a family switched off; left out, it drafts 5 to 8 across all"
}
}
},
"max_usd": {
"type": "number",
"description": "Most this call may spend, in USD; default its quote. A call quoted over it is refused.",
"exclusiveMinimum": 0
},
"mobiles": {
"type": "boolean",
"description": "Also looks up the shown buyers' verified mobile numbers (paid mode). A number is shown only when it is not on the user's do-not-call list."
},
"vendors": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 500
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"required": [
"domain",
"url",
"quote",
"date"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"date": {
"type": "string",
"description": "The event date as printed on the page, or YYYY-MM-DD"
},
"quote": {
"type": "string",
"maxLength": 600,
"minLength": 20
},
"domain": {
"type": "string"
}
}
},
"maxItems": 10,
"description": "Passages the user found on a public page (domain, url, verbatim quote, date as printed); each is checked before it counts"
},
"searches": {
"type": "object",
"description": "With callerSearch: each `work` id → the JSON its prompt returned, including every earlier round's answers",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"champions": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 2000
},
"companies": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50
},
"customers": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5000
},
"openDeals": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5000
},
"connectors": {
"type": "array",
"items": {
"type": "object",
"required": [
"text",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"text": {
"type": "string",
"maxLength": 5000000
},
"exportedAt": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
},
"maxItems": 20
},
"evaluators": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 2000
},
"connections": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 5000000
},
"exportedAt": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
},
"callerSearch": {
"type": "boolean",
"description": "Ignored on this server: `mode` decides who searches."
},
"doNotContact": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 5000
},
"includeShown": {
"type": "boolean"
},
"confirm_token": {
"type": "string",
"description": "The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments."
},
"priorContacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"domain",
"at"
],
"properties": {
"at": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"domain": {
"type": "string"
}
}
},
"maxItems": 5000
},
"previousConnections": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 5000000
},
"exportedAt": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
}
}
}
}