/v3/search/peopleLooking for the legacy endpoint? Access it here
Webhook result: Email results Phone results
| Endpoint | POST /v3/search/people |
| Credit cost | 0.2 credits / result |
| Response | Synchronous — up to 10,000 results per request |
| When to use | Build a filtered list of contacts matching your target persona |
Example use case: Find VP-level Sales leaders at US SaaS companies with 200–1000 employees who changed jobs in the last 90 days.
curl -X POST "https://api.ocean.io/v3/search/people" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"peopleFilters": {
"seniorities": ["VP", "C-Level"],
"departments": ["Sales"]
},
"companiesFilters": {
"primaryLocations": { "includeCountries": ["us"] },
"companySizes": ["201-500", "501-1000"],
"industries": { "industries": ["SaaS"] }
},
"size": 10
}'import requests
response = requests.post(
'https://api.ocean.io/v3/search/people',
headers={'X-Api-Token': 'YOUR_API_TOKEN'},
json={
'peopleFilters': {
'seniorities': ['VP', 'C-Level'],
'departments': ['Sales'],
},
'companiesFilters': {
'primaryLocations': {'includeCountries': ['us']},
'companySizes': ['201-500', '501-1000'],
'industries': {'industries': ['SaaS']},
},
'size': 10,
},
)
data = response.json()const response = await fetch('https://api.ocean.io/v3/search/people', {
method: 'POST',
headers: { 'X-Api-Token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
peopleFilters: {
seniorities: ['VP', 'C-Level'],
departments: ['Sales'],
},
companiesFilters: {
primaryLocations: { includeCountries: ['us'] },
companySizes: ['201-500', '501-1000'],
industries: { industries: ['SaaS'] },
},
size: 10,
}),
});
const data = await response.json();Example response:
{
"people": [
{
"id": "abc123",
"name": "Jane Doe",
"jobTitle": "VP of Sales",
"seniorities": ["VP"],
"departments": ["Sales"],
"domain": "example.com",
"country": "us",
"linkedinUrl": "https://linkedin.com/in/jane-doe-123"
}
],
"searchAfter": ["abc123"],
"total": 3210
}Store the id field from each result — you'll need it to reveal emails or enrich the person.
Use searchAfter to paginate. See Pagination for details.
apiToken string x-api-token string size integer "Owner""Founder""Board Member""C-Level""Partner""VP""Head""Director""Manager""Other"country string Required abbreviation string Required country string Required abbreviation string Required city string Required country string country string Required abbreviation string Required city string Required country string country string Required abbreviation string Required "Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other""Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other""country""departments""firstName""jobTitle""jobTitleEnglish""lastName""linkedinUrl""location""name""photo""seniorities""summary""country""departments""firstName""jobTitle""jobTitleEnglish""lastName""linkedinUrl""location""name""photo""seniorities""summary"changedPositionAfter string changedPositionBefore string updatedWithinMonths integer from integer to integer from integer to integer "0-1""2-10""11-50""51-200""201-500""501-1000""1001-5000""5001-10000""10001-50000""50001-100000""100001-500000""500000+"ecommerce boolean from integer to integer from integer to integer "0-1M""1-10M""10-50M""50-100M""100-500M""500-1000M"">1000M"from integer to integer from integer to integer from integer to integer from integer to integer from integer to integer from integer to integer from integer to integer "Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other"from integer to integer mode enum "anyOf""allOf"mode enum "anyOf""allOf"from integer to integer "Seed""Series A""Angel""Series B""Series Unknown""Pre-Seed""Grant""Series C""Convertible Note""Debt Financing""Non-Equity Assistance""Undisclosed""Series D""Corporate Round""Equity Crowdfunding""Product Crowdfunding""Series E""Private Equity""Secondary Market""Initial Coin Offering""Post-IPO Equity""Series F""Post-IPO Debt""Series H""Series G""Post-IPO Secondary""Series I""Series J"from string to string country string Required abbreviation string Required country string Required abbreviation string Required city string Required country string country string Required abbreviation string Required postalCode string city string Required country string country string Required abbreviation string Required postalCode string latitude number Required longitude number Required radius integer Required country string Required abbreviation string Required country string Required abbreviation string Required city string Required country string country string Required abbreviation string Required postalCode string city string Required country string country string Required abbreviation string Required postalCode string latitude number Required longitude number Required radius integer Required from integer to integer from integer to integer "linkedin""x""facebook""instagram""youtube""xing""tiktok""linkedin""x""facebook""instagram""youtube""xing""tiktok""linkedin""x""facebook""instagram""youtube""xing""tiktok"minCount integer minRelevance enum "A""B""C"maxRelevance enum "A""B""C"asPercentage boolean Required from number to number "Three months""Six months""Twelve months"asPercentage boolean Required from number to number "Three months""Six months""Twelve months""Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other"asPercentage boolean Required from number to number "Three months""Six months""Twelve months""Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other"updatedWithinMonths integer "companySize""countries""departmentSizes""description""emails""faxes""impressum""industries""industryCategories""keywords""legalName""linkedinIndustry""locations""logo""medias""mobileApps""name""phones""primaryCountry""revenue""rootUrl""technologies""technologyCategories""webTraffic""yearFounded""companySize""countries""departmentSizes""description""emails""faxes""impressum""industries""industryCategories""keywords""legalName""linkedinIndustry""locations""logo""medias""mobileApps""name""phones""primaryCountry""revenue""rootUrl""technologies""technologyCategories""webTraffic""yearFounded"companyMatchingMode enum "precise""broad"peoplePerCompany integer jobTitleThreshold number searchAfter string 200 Successful Responseid string Required domain string Required name string firstName string lastName string country string state string location string linkedinUrl string "Owner""Founder""Board Member""C-Level""Partner""VP""Head""Director""Manager""Other""Accounting and Finance""Board""Business Support""Customer Relations""Design""Editorial Personnel""Engineering""Founder/Owner""Healthcare""HR""Legal""Management""Manufacturing""Marketing and Advertising""Operations""PR and Communications""Procurement""Product""Quality Control""R&D""Sales""Security""Supply Chain""Other"photo string jobTitle string jobTitleEnglish string currentJobDescription string domain string jobTitle string dateFrom string dateTo string description string linkedinCompanyHandle string summary string status enum Required "verified""notFound""inProgress"address string Required status enum Required "verified""guessed""catchAll""notFound"updatedAt string connectionsCount integer followersCount integer headline string "0-1""2-10""11-50""51-200""201-500""501-1000""1001-5000""5001-10000""10001-50000""50001-100000""100001-500000""500000+"logo string name string "0-1M""1-10M""10-50M""50-100M""100-500M""500-1000M"">1000M"employeeCountOcean integer date string "Seed""Series A""Angel""Series B""Series Unknown""Pre-Seed""Grant""Series C""Convertible Note""Debt Financing""Non-Equity Assistance""Undisclosed""Series D""Corporate Round""Equity Crowdfunding""Product Crowdfunding""Series E""Private Equity""Secondary Market""Initial Coin Offering""Post-IPO Equity""Series F""Post-IPO Debt""Series H""Series G""Post-IPO Secondary""Series I""Series J"moneyRaisedInUsd integer cbUrl string relevance enum "A""B""C"detail string Required total integer searchAfter string creditsUsed number Required 400 Bad Requestdetail enum Required "Conflicting API tokens provided in query parameters and headers"402 Payment Requireddetail enum Required "Insufficient credits"403 Forbiddendetail enum Required "API token should be provided in headers or query parameters""Current API token is not registered in our database"404 Not found422 Validation Errormsg string Required type string Required input any How do I get email addresses for the people I find?
Collect the id values from search results and pass them to Reveal Emails. Email reveal is async and draws from the same credit pool.
Can I search for people at a specific company?
Yes — use companiesFilters.includeDomains to target specific company domains (e.g., { "includeDomains": ["stripe.com", "twilio.com"] }).
What is peoplePerCompany?
Setting "peoplePerCompany": 1 returns at most one person per company domain. Useful when building a prospecting list and you don't want multiple contacts from the same company unless you request them explicitly.
How do I find people who recently changed jobs?
Use peopleFilters.changedPositionAfter with a year-month string. For example, "changedPositionAfter": "2025-02" returns only people who started a new role from February 2025 onwards — a strong buying signal.