L

LinkedIn Outreach Platform Agentic Workflow

Read Conversation History — LinkedIn Outreach Platform Agentic Workflow

Searches the inbox for a person by name, opens the first matching thread, and returns the search-result previews plus the full message history

Available free v1.1.0 Browser LLM
$ sidebutton install linkedin
Download ZIP

The read-before-you-write primitive for outreach. LinkedIn's Focused/Other inbox split hides pitches and old threads from the default list, so the only reliable way to find prior contact is the message search — this workflow drives it.

Opens /messaging/?searchTerm=<name>, captures the result list (one entry per matching thread, with sender/date preview), opens the first match, and returns its complete message history.

One person can have multiple threads (connection-note thread + later message thread is a common LinkedIn artifact). The returned search-result block lists all of them with date previews; only the first is opened in full. Re-run with a more specific name, or read the previews, when the block shows more than one thread.

Read-only: nothing is typed, clicked beyond thread selection, or sent.

Steps

  1. 1.
    Navigate to a URL
    url
    https://www.linkedin.com/messaging/?searchTerm={{person_name}}
    browser.navigate
  2. 2.
    Wait
    selector
    main
    timeout
    12000
    browser.wait
  3. 3.
    Wait
    ms
    1500
    browser.wait
  4. 4.
    Extract text from a selector
    selector
    .msg-conversations-container__conversations-list, [class*="conversation-list"]
    as
    thread_list
    browser.extract
  5. 5.
    Click an element
    selector
    li[class*="conversation"]:has-text("{{person_name}}")
    browser.click
  6. 6.
    Wait
    selector
    .msg-s-message-list-content
    timeout
    8000
    browser.wait
  7. 7.
    Wait
    ms
    1000
    browser.wait
  8. 8.
    Extract text from a selector
    selector
    .msg-s-message-list-content
    as
    history
    browser.extract
  9. 9.
    control stop
    message
    |
    control.stop

Workflow definition

schema_version: 1
version: "1.0.0"
last_verified: "2026-08-25"
id: linkedin_thread_history
title: "Read Conversation History"
description: "Searches the inbox for a person by name, opens the first matching thread, and returns the search-result previews plus the full message history"
overview: |
  The read-before-you-write primitive for outreach. LinkedIn's Focused/Other inbox split
  hides pitches and old threads from the default list, so the only reliable way to find
  prior contact is the message search — this workflow drives it.

  Opens `/messaging/?searchTerm=<name>`, captures the result list (one entry per matching
  thread, with sender/date preview), opens the first match, and returns its complete
  message history.

  **One person can have multiple threads** (connection-note thread + later message thread
  is a common LinkedIn artifact). The returned search-result block lists all of them with
  date previews; only the first is opened in full. Re-run with a more specific name, or
  read the previews, when the block shows more than one thread.

  Read-only: nothing is typed, clicked beyond thread selection, or sent.
category:
  level: task
  domain: sales
  reusable: true
params:
  person_name:
    type: string
    description: Name to search for, as shown on their profile (last name alone is often the most precise)
    required: true
policies:
  allowed_domains:
    - "*.linkedin.com"
steps:
  - type: browser.navigate
    url: https://www.linkedin.com/messaging/?searchTerm={{person_name}}
  - type: browser.wait
    selector: main
    timeout: 12000
  - type: browser.wait
    ms: 1500
  - type: browser.extract
    selector: '.msg-conversations-container__conversations-list, [class*="conversation-list"]'
    as: thread_list
  - type: browser.click
    selector: 'li[class*="conversation"]:has-text("{{person_name}}")'
  - type: browser.wait
    selector: .msg-s-message-list-content
    timeout: 8000
  - type: browser.wait
    ms: 1000
  - type: browser.extract
    selector: .msg-s-message-list-content
    as: history
  - type: control.stop
    message: |
      ## Matching threads (previews)
      {{thread_list}}

      ## Full history of first matching thread
      {{history}}