Engage

Prospect Finder

Search 270M+ people and companies, re-run saved searches, then enrich the right prospects and add them to the CRM. Uses your workspace credits.

The Prospect Finder uses your workspace credits (the same monthly credits as the AI actions — GET /credits for the balance). People search is free; company search costs 1 credit per page; revealing a person (email, phone, employment) costs 1 credit — already-revealed people are free and failed reveals are refunded. Without enough credits a paid call answers 402 and nothing is charged. The usual flow: search, pick, POST /finder/enrich with the results, then enroll the new contacts in a sequence.

In a chat
Copy a ready promptPaste it in any AI: it reads the docs and follows the rules of the API.
Open in Claude or ChatGPTA new conversation with the prompt already written.
This page as MarkdownFor an AI that cannot open links: paste the text itself.
In your editor
Claude Code or CodexAdd this line to CLAUDE.md or AGENTS.md.Meetzy API reference (read before calling the API): https://www.meetzy.ai/llms-full.txt
CursorSettings › Indexing & Docs › Add Doc, then type @Meetzy in the chat.https://www.meetzy.ai/llms-full.txt
Connect Meetzy as tools (MCP)The AI can then read and change your CRM itself — Claude Code:claude mcp add --transport http meetzy https://meetzy.me/api/mcp/mcp
Same for Codexcodex mcp add meetzy --url https://meetzy.me/api/mcp/mcp
GET/finder/credits

Finder credits

Credits left this month, total, and what each kind of search costs: people search free, company search 1 credit per page, revealing a person or a company 1 credit each.

Scope: read
Request
curl "https://meetzy.me/api/v1/finder/credits" \
  -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/finder/credits", {
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://meetzy.me/api/v1/finder/credits",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json()
Response200
{
  "status": "SUCCESS",
  "remaining": 500,
  "total": 500,
  "month": "2026-10",
  "costInfo": {
    "peopleSearch": "FREE (unlimited)",
    "companySearch": "1 credit per page (25 results)",
    "personEnrichment": "1 credit per person (gets email, phone, details)",
    "companyEnrichment": "1 credit per company",
    "addToLeads": "FREE"
  }
}
GET/finder/saved-searches

Saved searches

Searches saved in the app, with a summary of their filters. Re-run one with saved_search_id.

Scope: read

Query parameters

categorystring
people or companies.

Answer: the searches, each with its id, name, category and a readable summary of its filters (titles, locations, sizes…).

Request
curl "https://meetzy.me/api/v1/finder/saved-searches" \
  -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/finder/saved-searches", {
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://meetzy.me/api/v1/finder/saved-searches",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json()
Response200

See the notes on the left.

POST/finder/search

Search people or companies

Credits: free for people, 1 credit per page of 25 for companies. Returns up to limit results (it pages for you). Each person comes with an id to pass to POST /finder/enrich — emails and phones are not included until you enrich. Works with a read-only key.

Scope: read

Body

modestring
people (default, free) or companies (1 credit / page).
saved_search_idstring
Re-run a saved search.
person_titlesstring[]
Job titles (Head of Sales). Similar titles included unless include_similar_titles: false.
person_senioritiesstring[]
owner, founder, c_suite, partner, vp, head, director, manager, senior, entry, intern.
person_departmentsstring[]
Departments.
person_locationsstring[]
Where people are (France, Paris, France). person_not_locations excludes.
person_namestring
A name.
keywordsstring[]
Keywords.
email_statusstring[]
verified, guessed, unavailable.
organization_namestring
Company name.
organization_domainsstring[]
Company domains.
organization_locationsstring[]
Company HQ locations. organization_not_locations excludes.
organization_employee_rangesstring[]
Headcount ranges: "11,50", "51,200", "201,500"…
organization_keyword_tagsstring[]
Industries / keywords: saas, fintech, retail…
funding_stagesstring[]
Funding stages.
revenue_minnumber
Minimum revenue (revenue_max too).
currently_using_any_of_technology_uidsstring[]
Technologies used (also …_all_of_…, currently_not_using_any_of_…).
organization_job_titlesstring[]
Companies hiring for these titles (with organization_job_locations, organization_num_jobs_range_min/max, organization_job_posted_at_range_min/max).
founded_year_mininteger
Founded after (founded_year_max too).
latest_funding_amount_minnumber
Funding filters: latest_funding_amount_min/max, total_funding_min/max, latest_funding_date_min/max.
limitinteger
How many results you want. Default 25.
pageinteger
Start page.

People already in your CRM or already revealed are skipped (skippedDuplicates). Last names are often hidden until you enrich — pass them as they are.

Request
curl -X POST "https://meetzy.me/api/v1/finder/search" \
  -H "Authorization: Bearer $MEETZY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "people",
    "person_titles": [
      "Head of Sales",
      "VP Sales"
    ],
    "person_locations": [
      "France"
    ],
    "organization_employee_ranges": [
      "51,200",
      "201,500"
    ],
    "organization_keyword_tags": [
      "saas"
    ],
    "limit": 25
  }'
const res = await fetch("https://meetzy.me/api/v1/finder/search", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "mode": "people",
    "person_titles": [
      "Head of Sales",
      "VP Sales"
    ],
    "person_locations": [
      "France"
    ],
    "organization_employee_ranges": [
      "51,200",
      "201,500"
    ],
    "organization_keyword_tags": [
      "saas"
    ],
    "limit": 25
  }),
});
const data = await res.json();
import os, requests

res = requests.post(
    "https://meetzy.me/api/v1/finder/search",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
    json={
        "mode": "people",
        "person_titles": ["Head of Sales", "VP Sales"],
        "person_locations": ["France"],
        "organization_employee_ranges": ["51,200", "201,500"],
        "organization_keyword_tags": ["saas"],
        "limit": 25
    },
)
data = res.json()
Response201
{
  "status": "SUCCESS",
  "mode": "people",
  "results": [
    {
      "id": "64f1a2b3c4d5e6f7a8b9c0d1",
      "name": "Camille",
      "first_name": "Camille",
      "last_name": null,
      "title": "Head of Sales",
      "seniority": "head",
      "departments": [
        "sales"
      ],
      "city": "Paris",
      "country": "France",
      "email": null,
      "email_status": "verified",
      "linkedin_url": "https://www.linkedin.com/in/…",
      "photo_url": null,
      "organization": {
        "name": "Payfit",
        "domain": "payfit.com",
        "industry": "Software",
        "employees": 900,
        "website": "https://payfit.com"
      }
    }
  ],
  "total": 12480,
  "page": 1,
  "perPage": 25,
  "creditsUsed": 0,
  "skippedDuplicates": 3
}
POST/finder/enrich

Reveal prospects and add them to the CRM

Credits: 1 credit per prospect revealed — people already revealed in your workspace are free, failed reveals are refunded. Reveals email, phone and employment for each prospect and adds them as contacts (with their company). Send all the prospects of a search in one call, with the id from the search.

Scope: write

Body

prospectsobject[]required
Each { id, first_name, last_name, email?, linkedin_url?, organization_name?, domain?, type? } — id from the search, type person (default) or company. Pass null for an unknown last name.
add_to_leadsboolean
Add them to the CRM. Default true.
target_criteriastring
Your ideal prospect, for relevance scoring.

leadId is the CRM contact id — use it for emails, sequences and LinkedIn. Each addedToLeads entry has a status: added, already_exists, skipped_no_contact (nothing to reach them with) or failed. 402 when there are not enough credits.

Request
curl -X POST "https://meetzy.me/api/v1/finder/enrich" \
  -H "Authorization: Bearer $MEETZY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prospects": [
      {
        "id": "64f1a2b3c4d5e6f7a8b9c0d1",
        "first_name": "Camille",
        "last_name": null,
        "organization_name": "Payfit"
      }
    ],
    "add_to_leads": true
  }'
const res = await fetch("https://meetzy.me/api/v1/finder/enrich", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "prospects": [
      {
        "id": "64f1a2b3c4d5e6f7a8b9c0d1",
        "first_name": "Camille",
        "last_name": null,
        "organization_name": "Payfit"
      }
    ],
    "add_to_leads": true
  }),
});
const data = await res.json();
import os, requests

res = requests.post(
    "https://meetzy.me/api/v1/finder/enrich",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
    json={
        "prospects": [
            {
                "id": "64f1a2b3c4d5e6f7a8b9c0d1",
                "first_name": "Camille",
                "last_name": None,
                "organization_name": "Payfit"
            }
        ],
        "add_to_leads": True
    },
)
data = res.json()
Response201
{
  "status": "SUCCESS",
  "enriched": [
    {
      "name": "Camille Laurent",
      "first_name": "Camille",
      "last_name": "Laurent",
      "title": "Head of Sales",
      "email": "camille@payfit.com",
      "phone": "+33612345678",
      "linkedin": "https://www.linkedin.com/in/…",
      "company": "Payfit",
      "companyDomain": "payfit.com",
      "companyIndustry": "Software",
      "companySize": 900,
      "city": "Paris",
      "country": "France",
      "type": "person",
      "creditUsed": true,
      "alreadyEnriched": false,
      "leadId": "e43414d6-f56f-42be-a64c-a836d6015efc"
    }
  ],
  "addedToLeads": [
    {
      "name": "Camille Laurent",
      "status": "added",
      "leadId": "e43414d6-f56f-42be-a64c-a836d6015efc",
      "message": "Added to leads"
    }
  ],
  "totalEnriched": 1,
  "creditsUsed": 1,
  "creditsRemaining": 499
}