LinkedIn Outreach Platform Agentic Workflow
Build Profile Brief — LinkedIn Outreach Platform Agentic Workflow
Opens a profile, triggers lazy-loaded sections, and returns a compact JSON brief: current role, career arc, posting language and topics, contact-type guess, and tailoring hooks for a first message
sidebutton install linkedin The lightweight research pass that runs before writing to someone. Where
linkedin_lead_health produces a full ICP scorecard for batch enrichment, this returns
just what message-tailoring needs, fast: who the person is TODAY (headlines go stale —
a 2019-era developer contact may be a business angel now), what they post about and in
which language, and two or three concrete hooks worth referencing.
The contact_type guess matters most: writing buyer copy to an investor, conference
organizer, or agency owner is the classic mistake this step exists to catch.
Read-only; extraction plus one LLM pass, no interaction with the profile.
Steps
- 1. Navigate to a URL
- url
- {{profile_url}}
browser.navigate - 2. Wait
- selector
- main
- timeout
- 12000
browser.wait - 3. Scroll the page
- direction
- down
- amount
- 1400
browser.scroll - 4. Wait
- ms
- 800
browser.wait - 5. Scroll the page
- direction
- down
- amount
- 1400
browser.scroll - 6. Wait
- ms
- 800
browser.wait - 7. Scroll the page
- direction
- down
- amount
- 1400
browser.scroll - 8. Wait
- ms
- 800
browser.wait - 9. Scroll the page
- direction
- down
- amount
- 1400
browser.scroll - 10. Wait
- ms
- 800
browser.wait - 11. Extract text from a selector
- selector
- main
- as
- profile_blob
browser.extract - 12. llm generate
- as
- brief
- prompt
- >
llm.generate - 13. control stop
- message
- {{brief}}
control.stop
Workflow definition
schema_version: 1
version: "1.0.0"
last_verified: "2026-08-25"
id: linkedin_profile_brief
title: "Build Profile Brief"
description: "Opens a profile, triggers lazy-loaded sections, and returns a compact JSON brief: current role, career arc, posting language and topics, contact-type guess, and tailoring hooks for a first message"
overview: |
The lightweight research pass that runs before writing to someone. Where
`linkedin_lead_health` produces a full ICP scorecard for batch enrichment, this returns
just what message-tailoring needs, fast: who the person is TODAY (headlines go stale —
a 2019-era developer contact may be a business angel now), what they post about and in
which language, and two or three concrete hooks worth referencing.
The `contact_type` guess matters most: writing buyer copy to an investor, conference
organizer, or agency owner is the classic mistake this step exists to catch.
Read-only; extraction plus one LLM pass, no interaction with the profile.
category:
level: task
domain: sales
reusable: true
params:
profile_url:
type: string
description: Full LinkedIn profile URL (e.g. https://www.linkedin.com/in/username/)
required: true
policies:
allowed_domains:
- "*.linkedin.com"
steps:
- type: browser.navigate
url: "{{profile_url}}"
- type: browser.wait
selector: main
timeout: 12000
- type: browser.scroll
direction: down
amount: 1400
- type: browser.wait
ms: 800
- type: browser.scroll
direction: down
amount: 1400
- type: browser.wait
ms: 800
- type: browser.scroll
direction: down
amount: 1400
- type: browser.wait
ms: 800
- type: browser.scroll
direction: down
amount: 1400
- type: browser.wait
ms: 800
- type: browser.extract
selector: main
as: profile_blob
- type: llm.generate
as: brief
prompt: >
You are preparing a compact briefing on a LinkedIn profile so a founder can write
one well-tailored first message. Parse the raw profile text below.
Respond with RAW JSON ONLY — no prose, no markdown fences. Leave a field null
rather than guessing. Schema:
{
"profile_url": "{{profile_url}}",
"name": "string",
"headline": "string",
"location": "string | null",
"current_role": {
"title": "string",
"company": "string",
"since": "YYYY-MM | null",
"what_the_company_does": "one sentence, plain words"
},
"other_current_hats": ["side ventures, board seats, portfolios, newsletters, events they run"],
"career_arc": "one sentence: where they came from and what changed",
"posting": {
"language": "en | de | mixed | unknown",
"cadence": "daily | weekly | sporadic | dormant | unknown",
"topics": ["string", "..."]
},
"contact_type": "buyer | operator | channel | multiplier | organizer | peer | unclear",
"contact_type_reason": "one sentence",
"tailoring_hooks": ["2-3 concrete, current facts worth referencing in a message — never generic"],
"watchouts": ["things that would make a standard pitch land badly, e.g. anti-sales posts, investor role, stale headline"]
}
contact_type definitions: buyer = owns a queue/budget at an operating company;
operator = product/PM person who would run the tool; channel = agency, consultancy,
dev shop, fractional exec who could resell or white-label; multiplier = investor,
analyst, coach, community owner with reach; organizer = runs conferences or events;
peer = builds a competing or adjacent product.
## Raw profile text
---
{{profile_blob}}
---
- type: control.stop
message: "{{brief}}"