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

# Search profile view sightings

> Who looked at the team's sender profiles' LinkedIn profiles (read once a day per sender profile), newest first: known people (person_sid) and anonymous rows, with LinkedIn's words and the view count. Scope with sender_profile_sid and a last_seen_at or first_seen_at window; page_size 0 for the counts by is_anonymous and by sender profile. One person: search_people with the signal viewed_our_profile. A view is private context: it decides when to write, the lead is never told we know.

Contract:
- MCP tool `search_profile_view_sightings`, registry package `mcp.signals/profile_view_sightings`, mount `signals.visits`.
- Operation `search`, response envelope `search`.
- Flags: read only.



## OpenAPI

````yaml /api-reference/signals/openapi.yaml post /api/profile-view-sightings/search
openapi: 3.0.3
info:
  title: 'GetSales public contract: gs.service.signals'
  description: >-
    The signals service, its website lane: the team's registered sites with
    their key pages and tracked events, the team switch for the codes in links,
    and what the tracking plane saw: every visit as a session with its pages,
    forms and network, the browsers behind them and the people they were bound
    to; and, since P0 of its LinkedIn leg, who looked at a sender profile's
    LinkedIn profile (the sightings of the premium list, read once a day).


    GENERATED. This document is projected from the Zod MCP tool registry in
    `product/mcp/gs.mcp` (one tool per public endpoint, 1:1). Do not edit it by
    hand; edit the tool definition and regenerate with `pnpm openapi:public`.


    Surface: the public `/api` contract of `gs.service.signals`, 30 operations.
    This is the only OpenAPI document the platform publishes. Internal
    (`/internal`) and health endpoints are deliberately absent: they are not
    part of any contract, they can change without notice, and the service source
    is their only description.


    Conventions:

    - Auth is a bearer JWT, optionally narrowed by the `Team-SID` header.

    - Every success body is an MCP envelope: `success: true` plus one typed
    `operation` shape (`search`, `get`, `create`, `update`, `delete`, `metrics`,
    `group_by`, `action`), and a `meta` block with `trace_id` for support.

    - Every failure is the same `McpError` envelope with a code from a fixed
    16-code taxonomy, so a client maps errors once.

    - Lists page with `page_size` (0 to 500, default 50) plus an opaque forward
    `cursor`; `page_size: 0` returns counts only.

    - On `GET` and `DELETE`, object-valued query parameters (`filter`, `sort`)
    travel as JSON text and array-valued ones repeat as `name[]=value`.

    - The MCP-only `_meta` field (usage analytics) never reaches the backend and
    is not part of this contract.
  version: '1.0'
  contact:
    name: GetSales
    url: https://getsales.io
    email: support@getsales.io
  license:
    name: Proprietary
    url: https://getsales.io/terms
servers:
  - url: https://beta.getsales.io/signals/v1
    description: >-
      Production (the gateway path on the beta ring; the origin is provisioned
      per DEPLOY_MAP.md)
security:
  - BearerJwt: []
    TeamSid: []
tags:
  - name: profile_view_sightings
    description: >-
      Registry package `mcp.signals/profile_view_sightings`, served on MCP mount
      `signals.visits`.
  - name: signal_preferences
    description: >-
      Registry package `mcp.signals/signal_preferences`, served on MCP mount
      `signals.website`.
  - name: signal_settings
    description: >-
      Registry package `mcp.signals/signal_settings`, served on MCP mount
      `signals.website`.
  - name: website_key_pages
    description: >-
      Registry package `mcp.signals/website_key_pages`, served on MCP mount
      `signals.website`.
  - name: website_session_owners
    description: >-
      Registry package `mcp.signals/website_session_owners`, served on MCP mount
      `signals.visits`.
  - name: website_sessions
    description: >-
      Registry package `mcp.signals/website_sessions`, served on MCP mount
      `signals.visits`.
  - name: website_sites
    description: >-
      Registry package `mcp.signals/website_sites`, served on MCP mount
      `signals.website`.
  - name: website_tracked_events
    description: >-
      Registry package `mcp.signals/website_tracked_events`, served on MCP mount
      `signals.website`.
  - name: website_visitors
    description: >-
      Registry package `mcp.signals/website_visitors`, served on MCP mount
      `signals.visits`.
paths:
  /api/profile-view-sightings/search:
    post:
      tags:
        - profile_view_sightings
      summary: Search profile view sightings
      description: >-
        Who looked at the team's sender profiles' LinkedIn profiles (read once a
        day per sender profile), newest first: known people (person_sid) and
        anonymous rows, with LinkedIn's words and the view count. Scope with
        sender_profile_sid and a last_seen_at or first_seen_at window; page_size
        0 for the counts by is_anonymous and by sender profile. One person:
        search_people with the signal viewed_our_profile. A view is private
        context: it decides when to write, the lead is never told we know.


        Contract:

        - MCP tool `search_profile_view_sightings`, registry package
        `mcp.signals/profile_view_sightings`, mount `signals.visits`.

        - Operation `search`, response envelope `search`.

        - Flags: read only.
      operationId: search_profile_view_sightings
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchProfileViewSightingsRequest'
      responses:
        '200':
          description: '`search` success envelope.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchProfileViewSightingsResponse'
        4XX:
          $ref: '#/components/responses/McpClientError'
        5XX:
          $ref: '#/components/responses/McpServerError'
components:
  schemas:
    SearchProfileViewSightingsRequest:
      type: object
      description: Request body of `search_profile_view_sightings`.
      properties:
        filter:
          type: object
          properties:
            sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^sg_pv_
                  description: Profile view sighting sid (sg_pv_...).
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^sg_pv_
                    description: Profile view sighting sid (sg_pv_...).
              additionalProperties: false
              description: Sighting sid(s), sg_pv_ prefix.
            sender_profile_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^ub_sp_
                  description: >-
                    Sender profile sid (ub_sp_..., external: unibox), the sender
                    profile whose list the viewer was on.
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^ub_sp_
                    description: >-
                      Sender profile sid (ub_sp_..., external: unibox), the
                      sender profile whose list the viewer was on.
              additionalProperties: false
              description: >-
                One sender profile's list: the sender profile's card (find the
                sid with search_sender_profiles).
            person_sid:
              type: object
              properties:
                eq:
                  type: string
                  minLength: 18
                  maxLength: 18
                  pattern: ^cr_pp_
                  description: 'Person sid (cr_pp_..., external: playtables).'
                in:
                  type: array
                  items:
                    type: string
                    minLength: 18
                    maxLength: 18
                    pattern: ^cr_pp_
                    description: 'Person sid (cr_pp_..., external: playtables).'
                is_null:
                  type: boolean
              additionalProperties: false
              description: >-
                One person's sightings; is_null false = the viewers the team
                holds as people, is_null true = the ones it does not (anonymous
                rows among them).
            is_anonymous:
              type: object
              properties:
                eq:
                  type: boolean
              additionalProperties: false
              description: >-
                true = a descriptor or no identifier; false = a named viewer,
                held as a person or not.
            first_seen_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
              description: >-
                ISO 8601 bounds on the first sighting: the viewers new in a
                window. Combine bounds in one object.
            last_seen_at:
              type: object
              properties:
                gte:
                  type: string
                lte:
                  type: string
                gt:
                  type: string
                lt:
                  type: string
              additionalProperties: false
              description: >-
                ISO 8601 bounds on the last sighting: the week's window ("this
                week" is gte seven days ago). Combine bounds in one object.
          description: >-
            Field filters, ANDed: {field: {eq | ne | in | nin | gte | lte | gt |
            lt | is_null}}; q inside it is free text. Omit for every row.
        include:
          type: array
          items:
            type: string
            enum:
              - person
            description: 'person: the person''s sid (the card is owed).'
          description: Relations to attach to every item; omit for the bare rows.
        sort:
          type: object
          properties:
            field:
              type: string
              enum:
                - first_seen_at
                - last_seen_at
                - times_seen
              description: The column to order by.
            direction:
              type: string
              enum:
                - asc
                - desc
              description: asc or desc; default desc.
          required:
            - field
          description: One column and its direction; omit for the default order.
        page_size:
          type: integer
          minimum: 0
          maximum: 500
          description: 0..500, default 50; 0 = counts only, 1 = the first row.
        cursor:
          type: string
          nullable: true
          description: pagination.next_cursor of the previous page.
    SearchProfileViewSightingsResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        operation:
          type: string
          enum:
            - search
        items:
          type: array
          items:
            type: object
            properties:
              item:
                type: object
                properties:
                  sid:
                    type: string
                    description: Profile view sighting sid (sg_pv_...).
                  team_sid:
                    type: string
                    description: 'Owning team (ts_tm_..., external: gs.service.id).'
                  sender_profile_sid:
                    type: string
                    description: >-
                      The sender profile whose "Who viewed your profile" list
                      the viewer was on (ub_sp_..., external: unibox). The same
                      person on two sender profiles is two rows: the view is the
                      sender profile's.
                  viewer_key:
                    type: string
                    description: >-
                      The one key of the viewer per sender profile: the member
                      id (digits) for a named viewer, nick:<slug> when the list
                      named them by the public slug alone, anon:<hash> for an
                      anonymous row or a named row with no identifier. Never a
                      URL.
                  is_anonymous:
                    type: boolean
                    description: >-
                      LinkedIn printed a descriptor instead of a name ("Someone
                      at Acme"), or no identifier at all: counted, never
                      resolved, never told to the product.
                  ln_member_id:
                    type: string
                    nullable: true
                    description: >-
                      The canonical member id (the member URN or the profile URN
                      decoded); null for an anonymous or slug-only viewer.
                  ln_nickname:
                    type: string
                    nullable: true
                    description: >-
                      The public profile slug the list carried, lowercased; null
                      when none.
                  person_sid:
                    type: string
                    nullable: true
                    description: >-
                      The team's person the viewer resolved to (cr_pp_...,
                      playtables), by member id then by slug; null while unknown
                      (asked about again at every run for ninety days).
                  display_name:
                    type: string
                    nullable: true
                    description: >-
                      The list's words at the last sighting (the descriptor for
                      an anonymous row); null when none.
                  headline:
                    type: string
                    nullable: true
                    description: >-
                      The viewer's headline as the list printed it; null when
                      none.
                  image_url:
                    type: string
                    nullable: true
                    description: >-
                      The avatar the list carried (not a profile URL); null when
                      none.
                  viewed_at_text:
                    type: string
                    nullable: true
                    description: >-
                      The relative text LinkedIn printed last ("2 days ago"):
                      the list carries no date; null when none.
                  times_seen:
                    type: integer
                    minimum: 1
                    description: >-
                      The first sighting and every re-view since (a listing that
                      moved the viewer up).
                  last_position:
                    type: integer
                    minimum: 0
                    description: >-
                      The row's absolute rank on the list at the last sighting:
                      the collector's stop rule.
                  first_seen_at:
                    type: string
                    description: >-
                      ISO 8601 UTC, when the collector first saw the viewer on
                      this sender profile: the "since" the product can honestly
                      say.
                  previous_seen_at:
                    type: string
                    nullable: true
                    description: >-
                      ISO 8601 UTC, the sighting before the last; null on a
                      viewer seen once.
                  last_seen_at:
                    type: string
                    description: >-
                      ISO 8601 UTC, the last sighting: the default sort and the
                      week's window.
                  last_fact_at:
                    type: string
                    nullable: true
                    description: >-
                      ISO 8601 UTC, the last sighting the ledger and the thread
                      were told about (or that needed no telling); null while
                      the first sighting of a known person is owed, always null
                      for an anonymous or unknown viewer.
                  created_at:
                    type: string
                    description: ISO 8601 UTC.
                  updated_at:
                    type: string
                    description: ISO 8601 UTC.
                required:
                  - sid
                  - team_sid
                  - sender_profile_sid
                  - viewer_key
                  - is_anonymous
                  - ln_member_id
                  - ln_nickname
                  - person_sid
                  - display_name
                  - headline
                  - image_url
                  - viewed_at_text
                  - times_seen
                  - last_position
                  - first_seen_at
                  - previous_seen_at
                  - last_seen_at
                  - last_fact_at
                  - created_at
                  - updated_at
              included:
                type: object
                properties:
                  person:
                    type: object
                    properties:
                      sid:
                        type: string
                    required:
                      - sid
                    description: >-
                      The team's person the viewer resolved to: { sid } today
                      (cr_pp_...), the compact card is owed. Absent for an
                      anonymous viewer or one the team does not hold.
            required:
              - item
              - included
        pagination:
          type: object
          properties:
            next_cursor:
              type: string
              nullable: true
            has_more:
              type: boolean
            total_count:
              type: integer
              nullable: true
          required:
            - next_cursor
            - has_more
            - total_count
        applied_filters:
          type: object
          additionalProperties: {}
        includes:
          type: array
          items:
            type: string
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
        counts:
          type: object
          properties:
            total_count:
              type: integer
              minimum: 0
              description: Sightings matching the filter (full filter scope, not the page).
            groups:
              type: object
              properties:
                is_anonymous:
                  anyOf:
                    - type: object
                      additionalProperties: {}
                    - type: array
                      items: {}
                  description: >-
                    Sightings per is_anonymous, keyed false and true: the named
                    viewers against the anonymous rows; [] when none.
                sender_profile_sid:
                  anyOf:
                    - type: object
                      additionalProperties: {}
                    - type: array
                      items: {}
                  description: Sightings per sender profile (ub_sp_...); [] when none.
              required:
                - is_anonymous
                - sender_profile_sid
          required:
            - total_count
            - groups
      required:
        - success
        - operation
        - items
        - pagination
        - applied_filters
        - includes
        - meta
    McpError:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_failed
                - nothing_to_update
                - not_found
                - relation_not_found
                - invalid_transition
                - limit_exceeded
                - payment_required
                - duplicate_rejected
                - conflict
                - delete_blocked
                - unauthorized
                - forbidden
                - rate_limited
                - internal_error
                - service_unavailable
                - not_implemented
            message:
              type: string
            recoverable:
              type: boolean
            suggestion:
              type: string
            field_errors:
              type: object
              additionalProperties:
                type: array
                items:
                  type: object
                  properties:
                    rule:
                      type: string
                    message:
                      type: string
                  required:
                    - rule
                    - message
            blockers:
              type: array
              items:
                type: object
                properties:
                  type:
                    type: string
                    description: >-
                      Machine-readable blocker type (active_flow, pending_tasks,
                      …).
                  severity:
                    type: string
                    enum:
                      - hard
                      - soft
                    description: >-
                      hard = external action required; soft = acknowledge is
                      enough.
                  description:
                    type: string
                  entity_sid:
                    type: string
                    nullable: true
                  count:
                    type: integer
                  resolution:
                    type: string
                    description: 'Hard: tool name to call. Soft: code for acknowledge[].'
                  resolution_hint:
                    type: string
                required:
                  - type
                  - severity
                  - description
                  - entity_sid
                  - resolution
                  - resolution_hint
            context:
              type: object
              additionalProperties: {}
          required:
            - code
            - message
            - recoverable
        meta:
          type: object
          properties:
            trace_id:
              type: string
              description: UUID v7; same 128-bit value as the X-Trace-Id header.
            span_id:
              type: string
              pattern: ^[0-9a-f]{16}$
              description: 16 hex chars, root span of this request.
            timestamp:
              type: string
              description: ISO 8601 UTC (Y-m-dTH:i:sZ), response time.
            duration_ms:
              type: integer
              minimum: 0
              description: Server-side wall clock.
            team_sid:
              type: string
              nullable: true
              description: >-
                The team this call ran in (the token team, or the team_sid
                override). Null when unauthenticated; absent from pre-2026-08-20
                backends.
            actor_type:
              type: string
              nullable: true
              description: >-
                user | agent | api_key | system. Null when unauthenticated;
                absent from pre-2026-08-20 backends.
          required:
            - trace_id
            - span_id
            - timestamp
            - duration_ms
      required:
        - success
        - error
  responses:
    McpClientError:
      description: >-
        MCP error envelope. `error.code` is one of validation_failed,
        nothing_to_update, not_found, relation_not_found, invalid_transition,
        limit_exceeded, payment_required, duplicate_rejected, conflict,
        delete_blocked, unauthorized, forbidden, rate_limited, not_implemented.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
    McpServerError:
      description: >-
        MCP error envelope with `error.code` internal_error or
        service_unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/McpError'
  securitySchemes:
    BearerJwt:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Access token issued by gs.service.id. Its `access_identity` claim
        carries `team_sid`, `actor_sid` and `actor_type`, and that team scope is
        authoritative.
    TeamSid:
      type: apiKey
      in: header
      name: Team-SID
      description: >-
        Team scope for tokens that do not carry one. Ignored when the token
        already names a team.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.