Skip to content

search_people

Search the people graph. Combines people-specific filters (prospect_query) with company-specific filters (account_query) to find prospects at target companies.

  • “Find data engineers at fintech companies with 200–1,000 employees in California.”
  • “Get me everyone who attended TechCrunch 2024 in the security industry.”
  • Any structured discovery query that doesn’t fit ai_prospecting’s ranked output.

Queries use a recursive CompositeFilter:

  • Composite: {"and": [...]}, {"or": [...]}, {"not": [...]}.
  • Leaf condition: {"field": "<name>", "op": "<operator>", "value": "<val>"}.

Operators. gt, gte, lt, lte, eq, neq, like, ilike, str_contains, str_contains_any, in, not_in, is_null, is_not_null, exists, not_exists.

Common field types.

TypeWhereExample
Personaprospect_query{"field": "data engineer", "op": "exists"} — call get_personas first.
Eventprospect_query{"field": "Event - TechCrunch 2024", "op": "exists"} — call get_events first.
Technologyeither{"field": "AWS", "op": "exists"}
Seniorityeither{"field": "seniority_executive", "op": "exists"}
Industryaccount_query{"field": "industry", "op": "eq", "value": "telecommunications"} — call get_industries first.
Company sizeaccount_query{"field": "size", "op": "in", "value": ["201-500"]}
Locationbothcontact_country / contact_region (prospect); location_country / location_region (account).
ParameterTypeRequiredDescription
prospect_queryobjectYesCompositeFilter over the people graph.
account_queryobjectNoCompositeFilter over the company graph. Defaults to match-all.
prospect_display_queriesstring[]NoFields to return per prospect.
account_display_queriesstring[]NoFields to return per matched account.

Display fields. Prospect: contact_linkedin_url, contact_linkedin_id, full_name, job_title, contact_country, contact_region, seniority_executive, seniority_director, seniority_teamlead, seniority_ic. Account: company_linkedin_url, company_linkedin_id, company_website, name, size, industry, location_country, location_region, seniority_*.

JSON with a dataset handle, preview_rows (first ~20), facets (top-N value counts per country / industry / seniority / size), total_count (Forschung’s true server-side match count), fetched_count, and truncated.

When the result exceeds 100 rows, the response includes a cost_warning field reminding the agent that contact_data_enrichment will trigger the two-phase consent flow.

  • Large results are returned as a dataset — never inlined.
  • To enrich the matched contacts, pass dataset_id to contact_data_enrichment (it reads rows server-side).
  • For slicing or pagination, use query_datasets.