L

LinkedIn Outreach Platform Agentic Workflow

LinkedIn: Lead Health Check — LinkedIn Outreach Platform Agentic Workflow

>-

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

Steps

  1. 1.
    Navigate to a URL
    url
    {{profile_url}}
    browser.navigate
  2. 2.
    Wait
    selector
    main
    timeout
    12000
    browser.wait
  3. 3.
    Wait
    selector
    main a[href*="/in/"], main a[href*="/company/"]
    timeout
    10000
    browser.wait
  4. 4.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  5. 5.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  6. 6.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  7. 7.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  8. 8.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  9. 9.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  10. 10.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  11. 11.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  12. 12.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  13. 13.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  14. 14.
    Scroll the page
    direction
    down
    amount
    1200
    browser.scroll
  15. 15.
    Wait
    selector
    main
    timeout
    1000
    browser.wait
  16. 16.
    Extract text from a selector
    selector
    main
    as
    profile_blob
    browser.extract
  17. 17.
    llm generate
    prompt
    >
    as
    assessment
    llm.generate
  18. 18.
    control stop
    message
    {{assessment}}
    control.stop

Workflow definition

schema_version: 1
version: 0.1.0
last_verified: '2026-04-19'
id: linkedin_lead_health
title: 'LinkedIn: Lead Health Check'
description: >-
  Opens a LinkedIn profile, scrolls to trigger lazy-loaded sections (about,
  experience, education, skills, activity), extracts the full profile, and
  asks the LLM to evaluate the lead against the AICTPO ICP. Returns structured
  JSON with raw profile data, detected signals, ICP evaluation (score/tier),
  and suggested outreach angle + opener. Designed for batch enrichment of
  Max's 1st-degree connections.
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
  icp_context:
    type: string
    description: Optional override for ICP definition. Defaults to AICTPO v3 ICP baked into prompt.
    required: false
  max_scrolls:
    type: string
    description: Number of scroll steps to trigger lazy-load. Default 6.
    required: false
policies:
  allowed_domains:
    - '*.linkedin.com'
steps:
  - type: browser.navigate
    url: '{{profile_url}}'
  - type: browser.wait
    selector: main
    timeout: 12000
  - type: browser.wait
    selector: main a[href*="/in/"], main a[href*="/company/"]
    timeout: 10000

  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000
  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000
  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000
  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000
  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000
  - type: browser.scroll
    direction: down
    amount: 1200
  - type: browser.wait
    selector: main
    timeout: 1000

  - type: browser.extract
    selector: main
    as: profile_blob

  - type: llm.generate
    prompt: >
      You are evaluating a LinkedIn profile as a potential AICTPO lead.


      ## AICTPO ICP (v3, 2026-04-18)

      {{icp_context}}

      Primary ICP: scaleups 100–1000 employees, 30–200 engineers, mature B2B SaaS,
      DACH-first (Berlin/Munich/Vienna/Zurich/Hamburg), UK/NL/Nordics secondary.

      Primary buyer title: Director of QA, Director of Engineering, pragmatic EM
      with $5K–$20K/mo tool budget. Secondary buyer: founder-CTO at <30-eng startups.

      Deprioritize: F500/enterprise IT (procurement too slow), agencies, regulated
      verticals (banking/health/defense), hobbyists, bootcamps.

      Proof assets available: GoStudent pilot (74 jobs, 97.3% success, scaling to
      10 agents then 20–50), aictpo.com dogfooding (agent-shipped PRs merged by
      human), Volha Svistunova testimonial (Director of Product at GoStudent —
      only use for Product-leader segment).

      Squad SKU: €499/mo, 4 agents (SE+QA+PM+SD), 2-week shadow-mode, refundable.


      ## Scoring rubric (total 0–11)

      - title_fit (0–3): 3 = Director of QA/Eng at scaleup (buyer); 2.5 = CTO/VP
        Eng (influencer who owns buyer); 2 = CPO/VP Product; 1.5 = adjacent exec
        (COO, CIO); 1 = eng manager / tech lead; 0 = unrelated/irrelevant
      - size_fit (0–3): 3 = 100–1000 emp; 2.5 = 50–100; 2 = 1000+; 1.5 = <50;
        1 = <10; 0 = solo/unclear
      - geo (0–2): 2 = DACH; 1.5 = UK/NL/Nordics; 1 = US; 0.5 = other; 0 = unclear
      - recency (0–1): 1 = active/posting within 90 days; 0.8 = within 1 year;
        0.5 = dormant/no activity visible
      - warmth (0–2): 2 = strong mutual signal (shared employer, evident collaboration);
        1.5 = many mutual connections or shared industry events; 1 = some mutuals;
        0.5 = weak/none visible

      Tiers: A = 9–11, B = 6–8, C = 4–5, D < 4.


      ## Raw profile data

      Profile URL: {{profile_url}}


      Main content (newline-delimited; line 1 = name, then pronouns, headline,
      location, connections, About, Activity, Experience, Education, Skills,
      Languages, Interests. Parse this to fill the schema below.):

      ---

      {{profile_blob}}

      ---


      ## Your task

      Respond with RAW JSON ONLY — no prose before, no markdown fences, no
      comments. Match this exact schema (leave a field null if data is not
      visible on the profile rather than guessing):


      {
        "profile_url": "{{profile_url}}",
        "name": "string",
        "headline": "string",
        "location": "string | null",
        "connection_degree": "1st | 2nd | 3rd | out-of-network | unknown",
        "mutual_connections_count": number | null,
        "followers": "string | null",
        "has_open_to_work_banner": boolean,
        "has_provides_services": boolean,
        "has_hiring_banner": boolean,
        "about_summary": "first 500 chars of about section, or null",
        "current_role": {
          "title": "string",
          "company": "string",
          "employment_type": "string | null",
          "start_date": "YYYY-MM | null",
          "duration": "e.g. 1 yr 3 mos | null",
          "location": "string | null",
          "description_snippet": "first 200 chars or null"
        },
        "prior_roles": [
          {"title": "string", "company": "string", "start": "YYYY-MM | null", "end": "YYYY-MM | null", "duration": "string | null"}
        ],
        "prior_roles_count": number,
        "total_years_experience": number | null,
        "career_arc_signal": "repeat-CTO | first-time-CTO | IC-to-leader | founder | specialist | unclear",
        "education": [
          {"institution": "string", "degree": "string | null", "field": "string | null", "end": "YYYY | null"}
        ],
        "top_skills": ["string", "..."],
        "recent_activity": {
          "posted_within_90d": boolean,
          "recent_topics": ["string", "..."],
          "engagement_level": "active | sporadic | dormant | unknown"
        },
        "languages": ["string", "..."],
        "detected_signals": {
          "likely_dach": boolean,
          "likely_scaleup": boolean,
          "likely_buyer": boolean,
          "likely_influencer_only": boolean,
          "just_joined_role_90d": boolean,
          "posting_about_ai": boolean,
          "posting_about_hiring": boolean,
          "posting_about_qa_or_backlog": boolean,
          "stealth_mode": boolean,
          "too_big_for_icp": boolean,
          "too_small_for_icp": boolean
        },
        "icp_evaluation": {
          "cluster": "CTO | VP-Eng | Dir-Eng | QA-lead | CPO | VP-Product | PM-senior | Founder | COO | Investor | Other",
          "segment": "Founder-CTO-small | Scaleup-CTO | Enterprise-CTO | CPO-scaleup | Founder-PM | QA-lead-scaleup | not-icp | unclear",
          "company_size_estimate": "<50 | 50-100 | 100-1000 | 1000+ | unknown",
          "geography": "DACH | UK | NL | Nordics | US | Other | unknown",
          "score": {
            "title_fit": 0,
            "size_fit": 0,
            "geo": 0,
            "recency": 0,
            "warmth": 0,
            "total": 0
          },
          "tier": "A | B | C | D"
        },
        "outreach": {
          "suggested_angle": "founder-to-founder-pilot | intro-request-to-buyer | volha-namedrop-capacity | forward-to-cto | dogfood-evidence | not-now",
          "opening_line": "one sentence tailored to this specific person — reference something concrete from their profile, not a template",
          "flags": ["string", "..."],
          "followup_notes": "2-3 sentence rationale for the tier and angle"
        },
        "confidence": 0.0,
        "extraction_notes": "anything the LLM could not reliably extract or had to infer"
      }
    as: assessment

  - type: control.stop
    message: '{{assessment}}'