Skip to main content
Included on the Annual plan

The LP database, now an API.

Search 19,000+ verified institutional investors from Claude, ChatGPT, n8n, Zapier, your CRM, or any HTTP client. JSON over HTTPS — no SDK, no setup tax.

LPbacked LP API — endpoints, limits, authentication

Two endpoints, bearer-token auth, JSON responses. Limits keep the API useful for discovery while protecting our verified dataset — search calls are free, only revealing a specific LP burns a credit, and re-fetching the same LP within 30 days is free.

Per search call
50
results max
Contact reveals
1,000
per 30-day window
Rate limit
60/min
1,000/day
Pagination
offset ≤ 500
deep paging is capped

How it works

Two endpoints. Authentication via a single bearer token. Search returns lightweight matches; fetch a specific LP for full contact data when you're ready to reach out.

GET/api-search

Search LPs

Filter by country, city, firm type, investment type, sector, geography, AUM bucket, year founded, or free-text query. Returns up to 50 lightweight records per call. Free — does not burn a reveal.

  • Full-text search across firm name, About, mandate fields
  • Pagination via limit + offset
  • Comma-separated multi-value filters
GET/api-get-lp/<id>

Reveal full profile

Pull HQ email, HQ phone, address, and team/contacts for a specific LP. Counts as 1 reveal against your 1,000/month quota — but only the first time. Re-fetching the same LP later is free.

  • Idempotent — dedup by LP id
  • Returns full record incl. mandate fields
  • Response includes reveals_used / reveals_limit

Authentication

Generate an API key at app.lpbacked.com → Profile → API (Annual plan required). Pass it as a bearer token on every request:

Authorization: Bearer lpb_live_<32 random chars>

Code samples

import os, requests

API = "https://mjomvzfvvorltoyazmqb.supabase.co/functions/v1"
KEY = os.environ["LPBACKED_API_KEY"]
H = {"Authorization": f"Bearer {KEY}"}

# 1. Search — free, returns lightweight matches
r = requests.get(f"{API}/api-search", headers=H, params={
    "country": "United States",
    "firm_type": "Endowment",
    "sectors": "Climate Tech",
    "limit": 25,
})
results = r.json()["results"]

# 2. Reveal one specific LP (counts as 1 monthly reveal, deduped)
lp = requests.get(f"{API}/api-get-lp/{results[0]['id']}", headers=H).json()
print(lp["hq_email"], lp["contacts_raw"])

Full reference and a parameters table live at app.lpbacked.com/api.

Response shape

/api-search

{
  "results": [
    {
      "id": "9a3c1...",
      "firm_name": "Acme Family Office",
      "firm_type": "Family Office - Single",
      "country": "United States",
      "city": "New York",
      "website": "https://...",
      "linkedin": "https://...",
      "aum_usd_m": 1250,
      "aum_bucket": "$1B–$5B",
      "aum_raw": "1,250",
      "year_founded": "1998",
      "preferred_geographies": "United States, Europe",
      "preferred_investment_types": "Venture Capital - Early Stage, Growth",
      "preferred_sectors": "Healthcare, Biotech, Climate Tech",
      "about": "Multi-generational..."
    }
  ],
  "total": 287,
  "limit": 25,
  "offset": 0,
  "has_more": true
}

/api-get-lp/<id>

{
  "id": "9a3c1...",
  "firm_name": "Acme Family Office",
  "firm_type": "Family Office - Single",
  "country": "United States",
  "city": "New York",
  "address": "...",
  "website": "https://...",
  "linkedin": "https://...",
  "hq_email": "contact@acme.com",
  "hq_phone": "+1 212 555 0100",
  "aum_usd_m": 1250,
  "aum_bucket": "$1B–$5B",
  "year_founded": "1998",
  "about": "...",
  "family_name": "...",
  "preferred_geographies": "...",
  "preferred_investment_types": "...",
  "preferred_sectors": "...",
  "contacts_raw": "Jane Doe, Partner, jane@...",
  "reveals_used": 42,
  "reveals_limit": 1000,
  "charged": true
}

Errors

StatusCodeWhen
400bad_requestMalformed path or query (e.g. invalid UUID)
401invalid_keyMissing, malformed, revoked, or non-annual key
403annual_requiredTrying to create a key without an active annual subscription
404not_foundLP id does not exist
405method_not_allowedWrong HTTP verb for the endpoint
429rate_limitedPer-minute or per-day request cap hit (respect Retry-After)
429reveal_limit_exceededMonthly contact-reveal cap hit; resets on a 30-day rolling window
500query_failedInternal error; include X-Request-Id when reporting

Every response carries an X-Request-Id header. Include it when reporting issues so we can find the call in our logs. 429 responses include Retry-After, X-RateLimit-Limit, and X-RateLimit-Window.

Security

How we store keys

  • Keys are generated server-side using a cryptographically secure RNG (24 random bytes, 32 base64 characters).
  • We store only the SHA-256 hash. Plaintext is shown to you once at creation and never persisted on our end.
  • Validation happens on every request with explicit subscription-status + plan checks.
  • All requests are rate-limited per user; contact reveals use an atomic per-user lock to prevent burst overrun.
  • Reveal accounting is deduped by LP id across all your keys — re-fetching is always free within the 30-day window.

What you should do

  • Never commit keys to source control. Use environment variables (LPBACKED_API_KEY) or a secrets manager.
  • Use one key per integration. Easier to rotate if a single client is compromised.
  • Rotate routinely. Generate a new key, swap it in, then revoke the old one — revocation is immediate.
  • Don't expose keys in front-end code. The API is server-to-server; calling it from a browser puts the key in plaintext on every page.
  • Report leaks immediately. Revoke from your Profile, then email support@lpbacked.com.

FAQ

Who can use the LPbacked API?

API access is included with the Annual plan ($1,495/year). Trial and Monthly subscribers do not have API access.

How are API limits enforced?

Each Annual subscriber gets 50 results per search call, 1,000 contact reveals per 30-day rolling window, 60 requests per minute, and 1,000 requests per day. Search calls are free; only fetching a specific LP profile counts against the reveal quota.

What counts as a contact reveal?

Calling GET /api-get-lp/<id> burns one reveal against your monthly cap. Re-fetching the same LP within the 30-day window is free (deduped by LP id across all your keys).

Does the API work with Claude, ChatGPT, MCP, or AI agents?

Yes. The API is plain JSON over HTTPS with bearer-token auth. Any AI runtime that can make HTTP requests can use it, including Claude (via MCP wrappers), ChatGPT custom GPTs, n8n, Zapier, LangChain, and Python/JS agent frameworks.

How do I rotate or revoke an API key?

Generate a new key at app.lpbacked.com/profile (API tab), then revoke the old one from the same page. Revoked keys stop working immediately.

AI-native by design

Search-then-reveal mirrors how AI agents reason

Cast a wide net with a filtered search, narrow on relevance, then pull full contact details for the few prospects you actually want to email. Pair the API with your favorite agent runtime, give it your thesis, and let it build a qualified LP shortlist.

Sourcing agent

Give Claude or ChatGPT your fund thesis and let it iterate searches against the database — "find single-family offices in Switzerland backing climate tech with >$500M AUM" — then hand you the qualified shortlist.

CRM enrichment

Sync LP records into HubSpot, Attio, or Salesforce via n8n / Zapier. Trigger a contact reveal only when a prospect moves into your warm pipeline so you stay within your monthly cap.

Slack / Discord bots

`/lp endowment renewable energy` returns 10 matches inline. Your team triages LP sourcing inside the tools they already use.

Want the longer read — competitor comparison, pricing breakdown, and how 85% of dealmakers are already using AI in fundraising? See LP Database API: Source Limited Partners with AI Agents.

$1,495/year. API included.

No per-call charges, no separate API tier. Every Annual subscriber gets a key, the limits above, and free upgrades as we ship new endpoints.

Higher limits or commercial redistribution? Enterprise inquiry