> ## Documentation Index
> Fetch the complete documentation index at: https://flows-docs.edges.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Sales Navigator Search People

> Search for LinkedIn profiles using Sales Navigator and enrich them with additional data

The People Search flow is a preset workflow that starts with a Sales Navigator profile search, followed by optional enrichment steps. This flow is ideal for lead generation, prospecting, and building enriched contact databases.

## Flow Steps

The flow executes steps in the following order:

1. **Sales Navigator Search** (required): Searches for people profiles based on your Sales Navigator search URL

2. <Accordion title="Optional enrichment steps (can include any combination)">
     * **`linkedIn-extract-people-skills`**: Extracts skills data from profiles
     * **`linkedIn-extract-people-experiences`**: Extracts experience data from profiles
     * **`linkedIn-extract-people-educations`**: Extracts education data from profiles
     * **`salesnavigator-visit-profile`**: Visits each profile to extract additional data, including interests (always executed after the search if included)
     * **`linkedin-extract-people`**: Extracts detailed LinkedIn profile information (sections, experiences, skills, highlights)
     * **`linkedin-extract-company`**: Extracts company information for each profile's current company
     * **`fullenrich-enrich-people`**: Enriches profiles with contact information (emails and/or phone numbers). Credit costs: 2 credits for emails, 20 credits for phones, 22 credits for both.
   </Accordion>

<Warning>
  Outputs from `extract-linkedIn-people-skills`, `extract-linkedIn-people-experiences` and `extract-linkedIn-people-educations` take precedence over those of `linkedin-extract-people` when present.
</Warning>

<Tip>
  Some steps have dependencies on other steps. For example, `fullenrich-enrich-people` requires profile data from previous steps. If you include a step that has dependencies, the required steps will be automatically activated even if you don't explicitly include them in your request body.
</Tip>

<Accordion title="Custom Data">
  Each item in the `inputs` array can include an optional **`custom_data`** object. The only valid key inside `custom_data` is **`meta`**. Use `meta` to attach a free-form object (e.g. your own IDs, tags, or context) that will be passed through and available in the flow output.

  **Example:**

  ```json theme={null}
  "inputs": [
    {
      ...
      "custom_data": {
        "meta": {
          "foo": "bar",
          "crm_id": 1234
        }
      }
    }
  ]
  ```

  <Info>
    We currently require **`meta`** as a workaround to ship this capability; a more solid implementation will follow soon without breaking changes.
  </Info>
</Accordion>

**Examples**:

<AccordionGroup>
  <Accordion title="Basic search with managed identities">
    ```bash theme={null}
    curl --request POST \
      --url https://api.edges.run/v1/flows/salesnavigator-search-people/run/async \
      --header 'Content-Type: application/json' \
      --header 'X-API-Key: <your-api-key>' \
      --data '{
      "inputs": [
        {
          "sales_navigator_profile_search_url": "https://www.linkedin.com/sales/search/people?keywords=software%20engineer&geoRegion=us:0"
        }
      ],
      "identity_mode": "managed"
    }'
    ```
  </Accordion>

  <Accordion title="Full enrichment flow with custom steps">
    ```bash theme={null}
    curl --request POST \
      --url https://api.edges.run/v1/flows/salesnavigator-search-people/run/async \
      --header 'Content-Type: application/json' \
      --header 'X-API-Key: <your-api-key>' \
      --data '{
      "steps": [
        "salesnavigator-visit-profile",
        "linkedin-extract-people",
        "linkedin-extract-company",
        "fullenrich-enrich-people"
      ],
      "parameters": {
        "salesnavigator-search-people": {
          "max_results": 500,
          "exclude_viewed_leads": true
        },
        "salesnavigator-visit-profile": {
          "extract_interests": true
        },
        "linkedin-extract-people": {
          "sections": true,
          "experiences": true,
          "skills": true,
          "highlights": true
        },
        "fullenrich-enrich-people": {
          "enrich_level": "emails_and_phones"
        }
      },
      "inputs": [
        {
          "sales_navigator_profile_search_url": "https://www.linkedin.com/sales/search/people?keywords=CTO&geoRegion=us:0"
        }
      ],
      "identity_ids": ["44444444-4444-4444-4444-444444444444"]
    }'
    ```
  </Accordion>

  <Accordion title="With webhook callback">
    ```bash theme={null}
    curl --request POST \
      --url https://api.edges.run/v1/flows/salesnavigator-search-people/run/async \
      --header 'Content-Type: application/json' \
      --header 'X-API-Key: <your-api-key>' \
      --data '{
      "inputs": [
        {
          "sales_navigator_profile_search_url": "https://www.linkedin.com/sales/search/people?keywords=VP%20Sales"
        }
      ],
      "identity_mode": "managed",
      "callback": {
        "url": "https://your-app.com/webhook/flow-results",
        "headers": {
          "Authorization": "Bearer your-webhook-token"
        }
      }
    }'
    ```
  </Accordion>
</AccordionGroup>

<Info>
  Instead of polling for results, you can use webhooks to receive automatic notifications when this flow completes. Learn more about [webhook payloads and handling](/api/callbacks).
</Info>


## OpenAPI

````yaml POST /flows/salesnavigator-search-people/run/async
openapi: 3.1.0
info:
  title: ED Automation Flows API
  description: This is the Flows API documentation for ED Automation
  version: dev
servers:
  - url: https://api.edges.run/v1
security:
  - XApiKeyAuth: []
paths:
  /flows/salesnavigator-search-people/run/async:
    post:
      tags:
        - flows
      summary: Run salesnavigator-search-people flow asynchronously
      description: Used to create and run a given flow preset.
      operationId: flowSalesnavigatorSearchPeopleAsync
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                steps:
                  type: array
                  items:
                    type: string
                    enum:
                      - linkedin-extract-people-experiences
                      - linkedin-extract-people-skills
                      - linkedin-extract-people-educations
                      - salesnavigator-visit-profile
                      - linkedin-extract-people
                      - linkedin-extract-company
                      - fullenrich-enrich-people
                  description: >-
                    Optional list of step to run. If not provided, only the
                    required steps will be run.
                parameters:
                  type: object
                  properties:
                    salesnavigator-search-people:
                      type: object
                      properties:
                        max_results:
                          type: integer
                          title: Maximum Leads
                          default: 100
                          maximum: 2500
                          minimum: 1
                          description: Maximum number of profile to extract per input.
                          xAutoPaginate: true
                          x-display-widget: numeric
                        exclude_crm_contacts:
                          type: boolean
                          title: Exclude CRM contacts.
                          default: false
                          description: Exclude CRM contacts
                          x-display-widget: checkbox
                        exclude_viewed_leads:
                          type: boolean
                          title: Exclude Viewed Leads.
                          default: false
                          description: >-
                            Remove viewed Leads from search; note that this
                            option only works if there's a 'Visit' step in your
                            workflow.
                          x-display-widget: checkbox
                      additionalProperties: false
                      default: {}
                    linkedin-extract-people-experiences:
                      type: object
                      properties: {}
                      additionalProperties: false
                      default: {}
                    linkedin-extract-people-skills:
                      type: object
                      properties: {}
                      additionalProperties: false
                      default: {}
                    linkedin-extract-people-educations:
                      type: object
                      properties: {}
                      additionalProperties: false
                      default: {}
                    salesnavigator-visit-profile:
                      type: object
                      properties:
                        extract_interests:
                          type: boolean
                          title: Extract Interests
                          default: false
                          description: Extract Interests
                          x-display-widget: checkbox
                      additionalProperties: false
                      default: {}
                    linkedin-extract-people:
                      type: object
                      properties:
                        sections:
                          type: boolean
                          title: Sections
                          default: true
                          description: >-
                            Extract sections data. When enabled, returns:
                            `education`, `languages`, `volunteer_experiences`,
                            `summary`, `company_name`, `job_title`,
                            `linkedin_company_url`.
                          x-display-widget: checkbox
                        experiences:
                          type: boolean
                          title: Experiences
                          default: false
                          description: >-
                            Extract a partial list of professional experiences:
                            includes only the user's most recent or
                            representative experiences.
                          x-display-widget: checkbox
                        skills:
                          type: boolean
                          title: Skills
                          default: false
                          description: >-
                            Extract a partial list of skills: includes only a
                            selection of the user's main competencies, not the
                            full set - this list can be empty even if the user
                            has skills listed on their profile.
                          x-display-widget: checkbox
                        highlights:
                          type: boolean
                          title: Highlights
                          default: false
                          description: >-
                            Extract highlights data. When enabled, returns:
                            `linkedin_company_url`, `connection_degree`,
                            `number_followers`, `number_connections`,
                            `linkedin_thread_id`.
                          x-display-widget: checkbox
                      additionalProperties: false
                      default: {}
                    linkedin-extract-company:
                      type: object
                      properties: {}
                      additionalProperties: false
                      default: {}
                    fullenrich-enrich-people:
                      type: object
                      properties:
                        enrich_level:
                          type: string
                          title: Enrich Level
                          default: emails_and_phones
                          description: The level you want to enrich.
                          enum:
                            - emails
                            - phones
                            - emails_and_phones
                          x-display-widget: select
                      additionalProperties: false
                      default: {}
                  additionalProperties: false
                inputs:
                  type: array
                  items:
                    $ref: '#/components/schemas/FlowSalesnavigatorSearchPeopleInput'
                  minItems: 1
                  maxItems: 1000
                identity_ids:
                  type: array
                  description: >-
                    An array of Identity UUIDs linked to identities (e.g.
                    LinkedIn) used to execute the Action. You must provide at
                    least one valid UID with access to the integration. Do not
                    use account_uid values — only user_uid is supported.
                  items:
                    type: string
                    format: uuid
                  nullable: true
                  example:
                    - 44444444-4444-4444-4444-444444444444
                identity_mode:
                  type: string
                  enum:
                    - direct
                    - auto
                    - managed
                  default: direct
                  nullable: true
                  description: >-
                    If "auto", the Action will use any identities from the
                    current workspace (unless you have provided a list of
                    identity_ids). "managed" will use the Edges pool of
                    identities for an extra credit cost
                callback:
                  type: object
                  properties:
                    url:
                      type: string
                      description: >-
                        URL to send the results to. The Action will send a POST
                        request with the results to this URL. The request will
                        include a JSON body with the results of the Action.
                      nullable: true
                      pattern: ^(https?:\/\/[^\s]+)$
                      example: https://example.com/callback
                    headers:
                      type: object
                      description: Headers to include in the callback request.
                      additionalProperties:
                        type: string
                    'on':
                      type: string
                      description: >-
                        Define when you want to receive callbacks. "all" will
                        send callbacks to stream outputs, "final" will send a
                        single callback when all inputs are processed or an
                        error occured on the run.
                      enum:
                        - all
                        - final
                      default: all
                  required:
                    - url
              additionalProperties: false
              required:
                - inputs
      responses:
        '200':
          $ref: '#/components/responses/FlowAsyncResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '424':
          $ref: '#/components/responses/FailedDependency'
        '500':
          $ref: '#/components/responses/InternalServerError'
      callbacks:
        onSave:
          '{$request.body#/callback/url}':
            post:
              responses:
                '200':
                  description: Callback successfully processed
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      type: object
                      properties:
                        flow_run:
                          type: object
                          properties:
                            flow_run_uid:
                              type: string
                              format: uuid
                              description: Run UUID
                            step_uid:
                              type: string
                              format: uuid
                              description: Output Step UUID
                              nullable: true
                            status:
                              type: string
                              enum:
                                - CREATED
                                - INVALID
                                - QUEUED
                                - SCHEDULED
                                - BLOCKED
                                - STOPPED
                                - RUNNING
                                - FAILED
                                - PARTIAL_SUCCEEDED
                                - SUCCEEDED
                              description: Flow status
                            scheduled_flow_run_uid:
                              type: string
                              format: uuid
                              description: >-
                                If the flow run is scheduled, this field
                                indicates the scheduled flow run UUID.
                              nullable: true
                          required:
                            - flow_run_uid
                            - status
                        error:
                          $ref: '#/components/schemas/APIError'
                        results_count:
                          type: integer
                          description: Number of results in the current callback
                        results:
                          type: array
                          items:
                            $ref: >-
                              #/components/schemas/FlowSalesnavigatorSearchPeopleOutput
                          description: Results of the current callback
                      required:
                        - run
              method: post
              type: path
            path: '{$request.body#/callback/url}'
components:
  schemas:
    FlowSalesnavigatorSearchPeopleInput:
      type: object
      properties:
        sales_navigator_profile_search_url:
          pattern: >-
            /^https:\/\/(?:(www|[a-z]{2})\.)?linkedin\.com\/sales\/search\/people.+/
          type: string
          format: uri
          description: >-
            A Sales Navigator Profile Search URL should start with
            'https://www.linkedin.com/sales/search/people'
          x-primary: true
          x-help: >-
            A Sales Navigator Profile Search URL should start with
            'https://www.linkedin.com/sales/search/people'
          x-variations:
            - sales_navigator_profile_search_url
            - sales_navigator_employees_url
        custom_data:
          type: object
          additionalProperties: true
          description: Custom data (ex-metadata)
          properties:
            meta: {}
      additionalProperties: false
      required:
        - sales_navigator_profile_search_url
    APIError:
      title: APIError
      description: >-
        Represents an error returned by the API. This schema defines the
        standard structure of error messages to ensure consistent error handling
        across the application.
      type: object
      properties:
        error_label:
          type: string
          nullable: true
        error_scope:
          type: string
          enum:
            - input
            - integ
            - param
            - config
          nullable: true
        error_ref:
          type: string
          examples:
            - ERR-12345
          nullable: true
        message:
          type: string
        status_code:
          type: integer
          nullable: true
        params:
          type: object
          patternProperties:
            ^[^_].*:
              anyOf:
                - type: string
                - type: number
                - type: boolean
                - type: 'null'
                - type: array
                  items:
                    type: string
          additionalProperties: false
          nullable: true
        data:
          type: object
          nullable: true
          additionalProperties: true
          description: Additional data about the error
      additionalProperties: false
    FlowSalesnavigatorSearchPeopleOutput:
      type: object
      properties:
        custom_data:
          type: object
          additionalProperties: true
          description: Custom data (ex-metadata)
          properties:
            meta: {}
        linkedin_profile_handle: {}
        first_name: {}
        last_name: {}
        full_name: {}
        birth_date: {}
        headline: {}
        summary: {}
        languages: {}
        skills: {}
        sales_navigator_profile_id: {}
        linkedin_profile_id: {}
        linkedin_profile_url: {}
        profile_country: {}
        profile_language: {}
        location: {}
        profile_image_url: {}
        job_title: {}
        educations: {}
        school_name: {}
        linkedin_school_url: {}
        volunteer_experiences: {}
        number_connections: {}
        experiences: {}
        company_name: {}
        linkedin_company_url: {}
        linkedin_company_id: {}
        number_followers: {}
        linkedin_people_post_search_url: {}
        connection_degree: {}
        open_to_work: {}
        linkedin_thread_id: {}
        past_company_name: {}
        past_job_title: {}
        past_sales_navigator_company_id: {}
        past_linkedin_company_id: {}
        past_linkedin_company_url: {}
        connected_at: {}
        company_specialties: {}
        company_tagline: {}
        company_linkedin_company_id: {}
        company_description: {}
        company_type: {}
        company_founded_on: {}
        company_website: {}
        company_linkedin_company_phone: {}
        company_sales_navigator_company_url: {}
        company_industries: {}
        company_industries_v1: {}
        company_industry: {}
        company_linkedin_job_search_url: {}
        company_followers_count: {}
        company_number_employees: {}
        company_employees_range: {}
        company_linkedin_employees_url: {}
        company_sales_navigator_employees_url: {}
        company_country: {}
        company_geographic_area: {}
        company_city: {}
        company_postal_code: {}
        company_headquarters: {}
        company_locations: {}
        company_number_of_locations: {}
        company_last_funding_investors: {}
        company_crunchbase_company_url: {}
        company_last_funding_date: {}
        company_last_funding_type: {}
        company_last_funding_raised: {}
        company_last_funding_currency: {}
        company_logo_url: {}
        company_domain: {}
        company_location: {}
        company_linkedin_school_id: {}
        company_linkedin_page_claimed: {}
        company_updated_at: {}
        company_affiliates: {}
        sales_navigator_company_id: {}
        sales_navigator_search_url: {}
        sales_navigator_profile_url: {}
        sales_navigator_company_url: {}
        viewed: {}
        tenure_start: {}
        tenure_end: {}
        tenure_length: {}
        recently_hired: {}
        recently_promoted: {}
        current_company: {}
        emails: {}
        email: {}
        phones: {}
        email_status: {}
        email_status_normalized: {}
    BadRequest:
      title: APIError
      description: >-
        Represents an error returned by the API. This schema defines the
        standard structure of error messages to ensure consistent error handling
        across the application.
      type: object
      properties:
        error_label:
          type: string
          nullable: true
        error_scope:
          type: string
          enum:
            - input
            - integ
            - param
            - config
          nullable: true
        error_ref:
          type: string
          nullable: true
          example: ERR-12345
        message:
          type: string
        status_code:
          type: integer
          nullable: true
        params:
          type: object
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
              - type: 'null'
              - type: array
                items:
                  type: string
          nullable: true
        data:
          type: object
          nullable: true
          additionalProperties: true
          description: Additional data about the error
      additionalProperties: false
    FailedDependency:
      title: APIError
      description: >-
        Represents an error returned by the API. This schema defines the
        standard structure of error messages to ensure consistent error handling
        across the application.
      type: object
      properties:
        error_label:
          type: string
          nullable: true
        error_scope:
          type: string
          enum:
            - input
            - integ
            - param
            - config
          nullable: true
        error_ref:
          type: string
          nullable: true
          example: ERR-12345
        message:
          type: string
        status_code:
          type: integer
          nullable: true
        params:
          type: object
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
              - type: 'null'
              - type: array
                items:
                  type: string
          nullable: true
        data:
          type: object
          nullable: true
          additionalProperties: true
          description: Additional data about the error
      additionalProperties: false
    InternalServerError:
      title: APIError
      description: >-
        Represents an error returned by the API. This schema defines the
        standard structure of error messages to ensure consistent error handling
        across the application.
      type: object
      properties:
        error_label:
          type: string
          nullable: true
        error_scope:
          type: string
          enum:
            - input
            - integ
            - param
            - config
          nullable: true
        error_ref:
          type: string
          nullable: true
          example: ERR-12345
        message:
          type: string
        status_code:
          type: integer
          nullable: true
        params:
          type: object
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
              - type: 'null'
              - type: array
                items:
                  type: string
          nullable: true
        data:
          type: object
          nullable: true
          additionalProperties: true
          description: Additional data about the error
      additionalProperties: false
  responses:
    FlowAsyncResponse:
      description: Successful response
      content:
        application/json:
          schema:
            description: Successful response
            type: object
            properties:
              uid:
                type: string
                format: uuid
              workflow:
                type: object
                properties:
                  uid:
                    type: string
                  metadata:
                    type: object
                    properties:
                      account_rotation:
                        type: boolean
                        default: true
                        nullable: true
                    additionalProperties: false
                additionalProperties: false
            additionalProperties: false
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequest'
    FailedDependency:
      description: Failed Dependency
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/FailedDependency'
    InternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InternalServerError'
  securitySchemes:
    XApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key

````