---
title: "Search LinkedIn profiles"
method: POST
path: "/search/li-users"
---

# Search LinkedIn profiles

`POST /search/li-users`

Full-text search across LinkedIn profile fields using BM25 ranking. Returns full profile data including employment, education, skills, and contact info. Requires PROFESSIONAL service. Credits: 1 per result returned.

## Request body

- SearchLiUsersRequest
  - `query` string, nullable, required — Full-text search query across LinkedIn profile fields. Searches: full_name, headline, current_title, current_titles, current_title_at_company, titles, title_at_company, past_title_at_company, campuses, majors, major_at_campus, expertise, certifications. Supports: string (BM25 search), null (filter-only)
  - `maxResults` integer — Maximum number of results to return (default: 100, max: 1000)
  - `first` integer — Alias for maxResults (takes precedence if both provided)
  - `filters` union — Optional filters for narrowing LinkedIn profile search results. Supports filtering on: linkedin_url, first_name, last_name, full_name, city, state, country, seniority_level, connections_count, follower_count, current_title, current_company, current_companies, current_title_at_company, current_tenure_months, is_currently_employed, companies, title_at_company, tenure_buckets, industries, total_experience_years, num_positions, max_company_employees, past_companies, past_title_at_company, campuses, majors, graduation_years, emails, email_domains, expertise, certifications, languages, has_patents, has_publications, bountylab_user_id, is_linked. Full-text searchable fields: full_name, headline, current_title, current_titles, current_title_at_company, titles, title_at_company, past_title_at_company, campuses, majors, major_at_campus, expertise, certifications. Filter structure: - Field filters: { field: "fieldName", op: "Eq"|"In"|"Gte"|"Lte"|"Contains", value: string|number|boolean|array } - Composite filters: { op: "And"|"Or", filters: [...] } Supported operators: - String fields: Eq, NotEq, In, NotIn, Glob, IGlob - Number fields: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte - Boolean fields: Eq, NotEq - Array string fields: Contains, ContainsAny, NotContains - Array number fields: Contains, ContainsAny, AnyLt, AnyLte, AnyGt, AnyGte
    - object
      - `field` string, required — Field name to filter on
      - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
      - `value` union, required — Filter value (type depends on field and operator)
        - string
        - number
        - boolean
        - string[]
        - number[]
    - object
      - `op` 'And' | 'Or', required — Composite operator
      - `filters` object[], required — Array of field filters
        - `field` string, required — Field name to filter on
        - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
        - `value` union, required — Filter value (type depends on field and operator)
          - string
          - number
          - boolean
          - string[]
          - number[]
    - object
      - `op` 'And' | 'Or', required — Composite operator
      - `filters` union[], required — Array of filters
        - union
          - object
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
          - object
            - `op` 'And' | 'Or', required — Composite operator
            - `filters` object[], required — Array of field filters
              - …
  - `rankBy` union
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Attr', required
      - `name` string, required
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Const', required
      - `value` number, required
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'BM25', required
      - `field` string, required
      - `query` string, required
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Sum', required
      - `exprs` union[], required
        - union
          - object
            - `type` 'Attr', required
            - `name` string, required
          - object
            - `type` 'Const', required
            - `value` number, required
          - object
            - `type` 'BM25', required
            - `field` string, required
            - `query` string, required
          - object
            - `type` 'Sum', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Mult', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Div', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Max', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Min', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Log', required
            - `base` number, required
            - `expr` union, required
              - …
          - object
            - `type` 'Saturate', required
            - `expr` union, required
              - …
            - `midpoint` number, required
            - `exponent` number
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Mult', required
      - `exprs` unknown[], required
        - unknown
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Div', required
      - `exprs` unknown[], required
        - unknown
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Max', required
      - `exprs` union[], required
        - union
          - object
            - `type` 'Attr', required
            - `name` string, required
          - object
            - `type` 'Const', required
            - `value` number, required
          - object
            - `type` 'BM25', required
            - `field` string, required
            - `query` string, required
          - object
            - `type` 'Sum', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Mult', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Div', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Max', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Min', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Log', required
            - `base` number, required
            - `expr` union, required
              - …
          - object
            - `type` 'Saturate', required
            - `expr` union, required
              - …
            - `midpoint` number, required
            - `exponent` number
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Min', required
      - `exprs` union[], required
        - union
          - object
            - `type` 'Attr', required
            - `name` string, required
          - object
            - `type` 'Const', required
            - `value` number, required
          - object
            - `type` 'BM25', required
            - `field` string, required
            - `query` string, required
          - object
            - `type` 'Sum', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Mult', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Div', required
            - `exprs` unknown[], required
              - …
          - object
            - `type` 'Max', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Min', required
            - `exprs` union[], required
              - …
          - object
            - `type` 'Log', required
            - `base` number, required
            - `expr` union, required
              - …
          - object
            - `type` 'Saturate', required
            - `expr` union, required
              - …
            - `midpoint` number, required
            - `exponent` number
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Log', required
      - `base` number, required
      - `expr` union, required
        - object
          - `type` 'Attr', required
          - `name` string, required
        - object
          - `type` 'Const', required
          - `value` number, required
        - object
          - `type` 'BM25', required
          - `field` string, required
          - `query` string, required
        - object
          - `type` 'Sum', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Mult', required
          - `exprs` unknown[], required
            - unknown
        - object
          - `type` 'Div', required
          - `exprs` unknown[], required
            - unknown
        - object
          - `type` 'Max', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Min', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Log', required
          - `base` number, required
          - `expr` union, required
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
        - object
          - `type` 'Saturate', required
          - `expr` union, required
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `midpoint` number, required
          - `exponent` number
    - object — Custom ranking formula (AST expression). Use Turbopuffer column names directly (e.g. connections_count, follower_count, total_experience_years). Applied as client-side post-processing to re-rank results.
      - `type` 'Saturate', required
      - `expr` union, required
        - object
          - `type` 'Attr', required
          - `name` string, required
        - object
          - `type` 'Const', required
          - `value` number, required
        - object
          - `type` 'BM25', required
          - `field` string, required
          - `query` string, required
        - object
          - `type` 'Sum', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Mult', required
          - `exprs` unknown[], required
            - unknown
        - object
          - `type` 'Div', required
          - `exprs` unknown[], required
            - unknown
        - object
          - `type` 'Max', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Min', required
          - `exprs` union[], required
            - union
              - …
        - object
          - `type` 'Log', required
          - `base` number, required
          - `expr` union, required
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
        - object
          - `type` 'Saturate', required
          - `expr` union, required
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
            - object
              - …
          - `midpoint` number, required
          - `exponent` number
      - `midpoint` number, required
      - `exponent` number
  - `enablePagination` boolean — Enable cursor-based pagination to fetch results across multiple requests
  - `after` string — Cursor for pagination (from previous response pageInfo.endCursor)
  - `includeAttributes` object — Optional enrichment attributes to include in results
    - `github` boolean — Include linked GitHub user profile with DevRank for linked li-users

## Response `200`

Search results retrieved successfully

- SearchLiUsersResponse
  - `liUsers` LiUserSearchResult[], required — Array of LinkedIn profile search results with relevance scores
    - `id` string, required — Turbopuffer document ID
    - `linkedin_url` string, required — LinkedIn profile URL
    - `first_name` string, nullable — First name
    - `last_name` string, nullable — Last name
    - `full_name` string, nullable — Full name
    - `headline` string, nullable — LinkedIn headline
    - `city` string, nullable — City
    - `state` string, nullable — State/province
    - `country` string, nullable — Country
    - `seniority_level` string, nullable — Seniority level
    - `connections_count` number, nullable — Number of LinkedIn connections
    - `follower_count` number, nullable — Number of LinkedIn followers
    - `current_title` string, nullable — Current job title
    - `current_company` string, nullable — Current company
    - `current_companies` string[], nullable — Current companies
    - `current_titles` string[], nullable — Current titles across all positions
    - `current_title_at_company` string[], nullable — Current title @ company pairs
    - `current_tenure_months` number, nullable — Current tenure in months
    - `is_currently_employed` boolean, nullable — Whether currently employed
    - `companies` string[], nullable — All companies (current + past)
    - `titles` string[], nullable — All titles (current + past)
    - `title_at_company` string[], nullable — All title @ company pairs
    - `tenure_buckets` string[], nullable — Tenure buckets
    - `industries` string[], nullable — Industries
    - `total_experience_years` number, nullable — Total years of experience
    - `num_positions` number, nullable — Number of positions held
    - `max_company_employees` number, nullable — Max company employee count
    - `past_companies` string[], nullable — Past companies
    - `past_title_at_company` string[], nullable — Past title @ company pairs
    - `campuses` string[], nullable — Educational institutions
    - `majors` string[], nullable — Fields of study
    - `major_at_campus` string[], nullable — Major @ campus pairs
    - `graduation_years` number[], nullable — Graduation years
    - `emails` string[], nullable — Email addresses
    - `email_domains` string[], nullable — Email domains
    - `expertise` string[], nullable — Areas of expertise
    - `certifications` string[], nullable — Professional certifications
    - `languages` string[], nullable — Languages spoken
    - `has_patents` boolean, nullable — Whether person has patents
    - `has_publications` boolean, nullable — Whether person has publications
    - `bountylab_user_id` string, nullable — Linked BountyLab user ID (32-char hex)
    - `is_linked` boolean, nullable — Whether linked to a GitHub user in BountyLab
    - `score` number — BM25 relevance score (higher is more relevant)
    - `github` object — Linked GitHub user profile with DevRank (when includeAttributes.github = true)
      - `id` string, required — BountyLab internal ID
      - `githubId` string, required — GitHub node ID
      - `login` string, required — GitHub username
      - `displayName` string, nullable — User display name
      - `bio` string, nullable — User biography
      - `company` string, nullable — Company name
      - `location` string, nullable — User location
      - `websiteUrl` string, nullable — User website URL
      - `socialAccounts` object[], nullable — Social media accounts
        - `provider` string, required
        - `url` string, required
      - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
      - `resolvedCountry` string, nullable — Resolved country from location
      - `resolvedState` string, nullable — Resolved state/region from location
      - `resolvedCity` string, nullable — Resolved city from location
      - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
      - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
      - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
      - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
      - `devrank` object — Developer ranking data (only present when includeAttributes.devrank = true)
        - `crackedScore` number, required
        - `tier` string, required
        - `rawScore` number, required
        - `trust` number, required
        - `pc` number, required
        - `followersIn` number, required
        - `followingOut` number, required
        - `community` integer, required
        - `createdAt` string, required
        - `updatedAt` string, required
      - `professional` ProfessionalProfile — LinkedIn professional profile data (only present when includeAttributes.professional = true)
        - `firstName` string, nullable, required — First name
        - `lastName` string, nullable, required — Last name
        - `linkedinUrl` string, required — LinkedIn profile URL
        - `title` string, nullable, required — Current job title
        - `headline` string, nullable, required — Professional headline
        - `organization` string, nullable, required — Current organization/company
        - `currentIndustry` string, nullable, required — Current industry sector
        - `city` string, nullable, required — City
        - `state` string, nullable, required — State or province
        - `country` string, nullable, required — Country
        - `location` string, nullable, required — Full location string
        - `seniorityLevel` string, nullable, required — Seniority level (e.g., Senior, Manager)
        - `seniority` string, nullable, required — Seniority classification
        - `functionalArea` string, nullable, required — Functional area (e.g., Engineering, Product)
        - `expertise` string[], nullable, required — Areas of expertise
        - `certifications` string[], nullable, required — Professional certifications
        - `awards` string[], nullable, required — Professional awards
        - `memberships` string[], nullable, required — Professional organization memberships
        - `departments` string[], nullable, required — Departments worked in
        - `patents` string[], nullable, required — Patents held
        - `publications` string[], nullable, required — Publications authored
        - `priorIndustries` string[], nullable, required — Previous industries worked in
        - `languages` string[], nullable, required — Languages spoken
        - `connectionsCount` number, nullable, required — Number of LinkedIn connections
        - `followerCount` number, nullable, required — Number of LinkedIn followers
        - `education` ProfessionalEducation[], required — Education history
          - `campus` string, nullable, required — Name of the educational institution
          - `major` string, nullable, required — Field of study or degree program
          - `specialization` string, nullable, required — Area of specialization
          - `startDate` string, nullable, required — Start date (YYYY-MM-DD format)
          - `endDate` string, nullable, required — End date (YYYY-MM-DD format)
        - `experience` ProfessionalExperience[], required — Work experience history
          - `company` string, nullable, required — Company or organization name
          - `title` string, nullable, required — Job title or position
          - `summary` string, nullable, required — Description of role and responsibilities
          - `location` string, nullable, required — Work location
          - `industry` string, nullable, required — Industry sector
          - `startDate` string, nullable, required — Start date (YYYY-MM-DD format)
          - `endDate` string, nullable, required — End date (YYYY-MM-DD format, null if current)
          - `isCurrent` boolean, nullable, required — Whether this is the current position
      - `aggregates` UserAggregates — Aggregate metrics (only present when includeAttributes.aggregates = true)
        - `totalStars` number, required — Total stars received across all owned repositories
  - `count` number, required — Number of profiles returned
  - `pageInfo` object — Pagination info (only present if enablePagination: true was set in request)
    - `hasNextPage` boolean, required — Whether there are more items available
    - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)

## Other responses

- `400` — Bad request - invalid search query, parameters, or filter validation failed
- `401` — Unauthorized - API key missing
- `403` — Forbidden - Invalid API key or PROFESSIONAL service access denied
- `500` — Internal server error - search service failure or unexpected error

---

[API](https://skmtc.net/bountylaboratories/apis/bounty-lab-public-api.md) · [All operations](https://skmtc.net/bountylaboratories/apis/bounty-lab-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bountylaboratories/bounty-lab-public-api/versions/910f8a49ca9e/schema)
