Search pins
search_compsSearch the connected account's own MappaIQ property data — its listings, sites, comps and quotes. PREFER THIS whenever the user asks to show, pull up, see, find, list or map their properties/listings/sites/comps (e.g. 'show me 5 biggest Weitzman sites', 'what's available in Lewisville'); results come back plotted on a live map preview in the chat, not just a list. Can filter by layer, price range, acreage range, date range, keyword in name/notes/address, custom field key/value, flagged status, or by a GeoJSON polygon geometry to find records inside an area. Returns the total 'count' plus one page of results (default 50, max 500). For a full audit/export of a large set, page through with offset: keep calling with offset += returned until nextOffset is null.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max records to return in this page. Default 50, max 500. | |
| offset | No | Skip this many matching records (for paging through a large result set). Default 0. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| flagged | No | If true, return only flagged records | |
| keyword | No | Free-text search across name, address, city, county, submarket, state, and notes. USE THIS for location questions — 'properties in Lewisville' → keyword:'Lewisville', 'what's in Texas' → keyword:'Texas' (matches TX too). | |
| layerId | No | Filter by layer ID | |
| maxPrice | No | Maximum sale price | |
| minPrice | No | Minimum sale price | |
| afterDate | No | Filter comps after this date (ISO string) | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| assetClass | No | Filter by asset class: Land, Retail, Multifamily, Office, Industrial, Hospitality, Healthcare, Mixed Use, Other | |
| beforeDate | No | Filter comps before this date (ISO string) | |
| maxAcreage | No | Maximum acreage | |
| minAcreage | No | Minimum acreage | |
| withinZone | No | Filter to pins inside a SAVED ZONE on the map, by the zone's name (or comp id). Use this whenever the user says 'inside/within the zone …', 'in my search area', etc. — no GeoJSON needed; the zone's own polygon is used. Ambiguous names return candidates. Works with zones in layers shared with the user too. | |
| externalIds | No | Look up records directly by their externalId (source Record #s from an import). Returns exactly the matching records — use this instead of paging through everything to build an ID map, e.g. before targeted updates or deletes. | |
| customFieldKey | No | Filter by a custom field name (e.g. 'Due Diligence', 'Water Access', 'Status') | |
| withinGeometry | No | GeoJSON geometry to spatially filter comps inside this area | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. | |
| maxPricePerAcre | No | Maximum price per acre | |
| minPricePerAcre | No | Minimum price per acre | |
| customFieldValue | No | Filter by custom field value (e.g. 'Complete', 'Yes', 'Under Contract'). Case-insensitive substring match. |