Property, people & company data,
ready for your AI agents.
Drop Plotted into Claude, ChatGPT, Gemini, Cursor, Codex, or Antigravity in 30 seconds. One key, 24 tools — enrich an address or a person, search profiles nationwide, prospect companies, reveal verified emails & phones. Every endpoint returns clean structured JSON, every tool definition is published, and rate-limit + credit metadata flows back so your agent knows when to slow down.
Connect Plotted to Claude (Desktop or Code)
Plotted ships an MCP (Model Context Protocol) server. Add it once to your Claude desktop config and every Claude conversation can call the API directly — no copy-pasting, no manual JSON.
Edit your Claude desktop config
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"plotted": {
"command": "npx",
"args": ["-y", "@plotted/mcp-server"],
"env": {
"PLOTTED_API_KEY": "plt_live_***"
}
}
}
}
Restart Claude desktop
The Plotted tool icon should appear in the input area. Click it to see all 24 available operations — across property, people, and company data.
Just ask
Claude will pick the right endpoint automatically. Examples:
- Property: "Find absentee owners within 2 miles of 4421 Gulf Shore Blvd N, Naples FL with phone numbers"
- People: "Find VPs of Engineering at fintech companies in California and reveal their emails"
- Company: "Enrich Stripe — industry, headcount, and linked employees"
- Bridge: "Who owns 4421 Gulf Shore Blvd N, and where does that person work?"
Found 42 trust-owned parcels with phone numbers within 1 mile. The top 3 by assessed value:
- NAPLES BAY HOLDINGS TRUST — 4421 Gulf Shore Blvd N · $4.2M · (239) ***-1247
- DAVIS FAMILY REVOCABLE TRUST — 4501 Gulf Shore Blvd N · $3.8M · (614) ***-2103
- SHORE LANDING HOLDINGS TRUST — 4429 Gulf Shore Blvd N · $3.1M · (212) ***-9921
Connect Plotted to ChatGPT
Build a Custom GPT that uses Plotted as its action source. ChatGPT will call any of the 24 endpoints based on user prompts — works in ChatGPT Plus, Team, and Enterprise.
Create a new Custom GPT
In ChatGPT → Explore GPTs → Create → switch to the Configure tab.
Add a Plotted action
Scroll down to Actions → Create new action → in the Schema box, paste this URL:
https://plotted.to/openapi.json
ChatGPT auto-imports all 24 operations.
Add your API key
Under Authentication → pick API Key → Bearer → paste your plt_live_***.
Suggested system prompt
You are a U.S. property, people, and company research assistant powered by Plotted (150M+ property records + nationwide professional profiles). Property & addresses: - Use /v1/geocode to resolve an address to lat/lon when needed. - Use /v1/parcels/nearby for radius searches around a point. - Use /v1/views/absentee, /v1/views/trust, /v1/views/homeowners for curated lead segments. - Combine filters: state, county, is_trust, has_contact, year_built_min/max, value_min/max, beds_min, baths_min, sqft_min/max. - For bulk enrichment, use /v1/match (up to 10,000 addresses per call). Enrichment, people & companies: - Use /v1/enrich/address (address_id or address+zip) for the people, contacts, and distress at an address. - Use /v1/person/enrich (email, phone, name+zip, or linkedin URL) for a person + their LinkedIn professional profile. - Use /v1/person/search (anchor: company, name, or linkedin_url; refine with title, role, industry, region) to find people. - Use /v1/company/enrich (name or ein) for business registry officers/agent + LinkedIn firmographics. - Call /v1/openapi any time for the full endpoint catalog. Always cite parcel row_id when referencing specific properties. Redact phone/email digits in output unless the user explicitly asks for the unmasked value.
Connect Plotted to Gemini (Vertex AI or AI Studio)
Gemini's function-calling API accepts our endpoint definitions directly. Drop the Plotted tool declarations into your agent and Gemini will invoke them automatically.
Define the Plotted tool
import google.generativeai as genai plotted_tool = { "function_declarations": [ { "name": "plotted_nearby_parcels", "description": "Find parcels within radius_mi of a lat/lon. Filters: is_trust, has_contact, owner, year_built_min/max, value_min/max, beds_min, baths_min, sqft_min/max.", "parameters": { "type": "object", "properties": { "lat": {"type": "number"}, "lon": {"type": "number"}, "radius_mi": {"type": "number"}, "is_trust": {"type": "boolean"}, "has_contact": {"type": "boolean"} }, "required": ["lat", "lon", "radius_mi"] } } # ... add the other 15 endpoints (or fetch via /openapi.json) ] } model = genai.GenerativeModel("gemini-2.0-pro", tools=[plotted_tool])
Handle the function call
import requests, os PLOTTED_KEY = os.environ["PLOTTED_KEY"] def call_plotted(name, args): endpoint_map = { "plotted_nearby_parcels": "/v1/parcels/nearby", # ... } r = requests.get( "https://api.plotted.to" + endpoint_map[name], params=args, headers={"Authorization": f"Bearer {PLOTTED_KEY}"} ) return r.json() response = model.generate_content( "Find trust-owned parcels within 1mi of 26.142, -81.795 with phone numbers" ) # If response.candidates[0].content.parts[0].function_call exists, call_plotted() and send back
Connect Plotted to Cursor (and any MCP-compatible IDE)
Cursor 0.42+ supports MCP servers natively. Same config as Claude Desktop. Lets you ask the AI inside your editor to enrich CSVs, generate property lookups, or build queries.
Open Cursor Settings → Features → Model Context Protocol
Or edit ~/.cursor/mcp.json directly. Add this block:
{
"mcpServers": {
"plotted": {
"command": "npx",
"args": ["-y", "@plotted/mcp-server"],
"env": { "PLOTTED_API_KEY": "plt_live_***" }
}
}
}
Restart Cursor, then ask in chat
Example: "Take the addresses in selected.csv, call Plotted's /v1/match for each, and add the owner_name + phone columns." Cursor handles the rest.
Codex, Antigravity, Windsurf, VS Code & every other MCP client
Same server everywhere — point the tool at @plotted/mcp-server. Config locations per platform:
- Antigravity (IDE & CLI) —
~/.gemini/config/mcp_config.json(samemcpServersJSON as above), or IDE agent panel···→ Manage MCP Servers → View raw config - Windsurf —
~/.codeium/windsurf/mcp_config.json(same JSON) - VS Code (Copilot agent mode) —
.vscode/mcp.jsonunder a"servers"key - Continue, Zed, Cline, Roo Code — same
mcpServersJSON - OpenAI Codex — TOML, shown below
[mcp_servers.plotted] command = "npx" args = ["-y", "@plotted/mcp-server"] [mcp_servers.plotted.env] PLOTTED_API_KEY = "plt_live_***"
Or one command: codex mcp add plotted --env PLOTTED_API_KEY=plt_live_*** -- npx -y @plotted/mcp-server
OpenAPI 3.1 — works with anything
If your AI tooling doesn't have a dedicated integration above, point it at our OpenAPI spec. Most agent frameworks (LangChain, LlamaIndex, AutoGPT, CrewAI, Pydantic AI, etc.) consume OpenAPI as a first-class input.
OpenAPI 3.1 spec
https://plotted.to/openapi.json
Auto-imports all 24 operations, request/response schemas, error envelopes, and the auth scheme (Bearer token).
LangChain
from langchain_community.tools.openapi.utils.openapi_utils import OpenAPISpec from langchain_community.agent_toolkits.openapi.toolkit import RequestsToolkit from langchain_community.utilities.requests import RequestsWrapper spec = OpenAPISpec.from_url("https://plotted.to/openapi.json") toolkit = RequestsToolkit( requests_wrapper=RequestsWrapper(headers={"Authorization": "Bearer " + KEY}), spec=spec, ) agent.tools.extend(toolkit.get_tools())
LlamaIndex
from llama_index.tools.openapi import OpenAPIToolSpec spec = OpenAPIToolSpec( url="https://plotted.to/openapi.json", auth_headers={"Authorization": "Bearer " + KEY}, ) tools = spec.to_tool_list()
Direct curl from any prompt-engineering harness
curl https://api.plotted.to/v1/parcels/nearby \ -G -d "lat=26.142&lon=-81.795&radius_mi=1&is_trust=true" \ -H "Authorization: Bearer $KEY"
Built for agentic workflows from day one.
Not just an API. Every design choice was made for AI agents reading and reasoning over the response.
Stable row_id primary key
Every parcel has a permanent integer ID. Agents can cite, deep-link, and re-fetch records across sessions without ambiguity.
Cost & remaining credits in every response
meta.credits_used and meta.credits_remaining on every call. The agent can plan a budget and back off when it's running low.
Stable, machine-friendly errors
Error responses carry a stable code string (insufficient_credits, rate_limited). Agents can branch on them, no string parsing.
Bulk endpoints that scale
POST 10,000 addresses to /v1/match in one call. Lets the agent enrich a whole spreadsheet in one tool call instead of 10K.
Paginated, indexed lookups
Endpoints are indexed for the common patterns and cursor-paginated, so an agent pulls just the page it needs instead of scanning 150M rows.
Free /v1/health
No auth, no credits. Agents can verify the integration without burning a credit on every check.