For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
DashboardGet API Key
GuidesAPI ReferenceCommon Patterns
  • Getting Started
    • Welcome
    • Introduction
    • Quickstart
    • Authentication
  • Core Concepts
    • Sessions & Cookies
    • Profiles
    • Messaging
    • Posts & Engagement
    • Connections
    • Search
    • SalesNav
    • SalesNav Filters
  • Playbooks
    • Multi-Step Workflows
    • Query Patterns
  • Workflow Guides
    • Lead Discovery
    • Warm Outreach
    • Content Intelligence
    • Company Research
    • Job Market Intelligence
    • Webhooks
  • Integration
    • MCP Server
    • WebSocket Relay
DashboardGet API Key
On this page
  • Lead Discovery & Qualification
  • Step 1: Search for People at the Target Company
  • Step 2: Enrich Profiles in Batch
  • Step 3: Check Relationship & Messaging Eligibility
  • Step 4: Get Recent Posts for Conversation Starters
  • Step 5: Get Contact Info (1st-Degree Only)
  • Complete Agent Script
  • SalesNav Alternative
  • Error Handling
  • Related
Workflow Guides

Lead Discovery

Was this page helpful?
Previous

Warm Outreach

Next
Built with

Lead Discovery & Qualification

This guide walks through finding decision-makers at a target company, enriching their profiles, checking messaging eligibility, and gathering conversation starters from their recent posts.

Step 1: Search for People at the Target Company

Use keywords to find people with specific titles at a company:

$curl -s "$BASE/api/search/people?keywords=CTO&company=Acme%20Corp&count=10" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER"

The company parameter auto-resolves to a LinkedIn company ID. Combine with network=S to filter for 2nd-degree connections (warmer leads):

$curl -s "$BASE/api/search/people?keywords=VP+Engineering&company=Stripe&network=S&count=20" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER"

If search returns 0 results, try broader keywords or remove the company filter. Some companies have unusual LinkedIn names — use GET /api/search/companies?keywords=Acme to find the exact name first.

Step 2: Enrich Profiles in Batch

Fetch full profiles for your top candidates in a single request:

$curl -s -X POST "$BASE/api/profiles/read" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "profiles": [
> {"vanityName": "john-doe-123"},
> {"vanityName": "jane-smith-456"},
> {"vanityName": "alex-johnson-789"}
> ]
> }'

This returns full name, headline, location, current positions, education, and entity URN for each profile. Up to 25 profiles per request.

Step 3: Check Relationship & Messaging Eligibility

Find out which candidates you can message directly:

$curl -s -X POST "$BASE/api/relationships/read" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "profiles": [
> {"vanityName": "john-doe-123"},
> {"vanityName": "jane-smith-456"}
> ]
> }'

Key fields in the response:

FieldMeaning
connected: true1st-degree — you can message directly
openProfile: trueOpen Profile — you can message without connecting
canConnect: trueYou can send a connection request
pendingInvitationSent: trueYou already sent a request — do not send again

Step 4: Get Recent Posts for Conversation Starters

Check what your top candidates are posting about — this gives you personalized conversation openers:

$curl -s "$BASE/api/posts?profileUrl=https://www.linkedin.com/in/john-doe-123/&limit=5" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER"

Look for:

  • Posts with high engagement (likeCount, commentCount) — these are topics they care about
  • Recent posts (within the last week) for timely references
  • Shared content that reveals interests or challenges

Step 5: Get Contact Info (1st-Degree Only)

If the candidate is a 1st-degree connection, get their email and other contact details:

$curl -s "$BASE/api/profile/john-doe-123/contact" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER"

Complete Agent Script

Here is the full flow as a sequential script:

$export BASE=https://li.scaleabm.org
$export KEY=voy_YOUR_API_KEY
$export USER=your-username
$
$# 1. Search
$RESULTS=$(curl -s "$BASE/api/search/people?keywords=VP+Engineering&company=Notion&network=S&count=10" \
> -H "Authorization: Bearer $KEY" -H "X-User-Id: $USER")
$echo "$RESULTS" | jq '.data.results[] | {name: .fullName, title: .headline, vanity: .vanityName}'
$
$# 2. Enrich top 3
$PROFILES=$(curl -s -X POST "$BASE/api/profiles/read" \
> -H "Authorization: Bearer $KEY" -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{"profiles":[{"vanityName":"candidate-1"},{"vanityName":"candidate-2"},{"vanityName":"candidate-3"}]}')
$
$# 3. Check relationships
$RELS=$(curl -s -X POST "$BASE/api/relationships/read" \
> -H "Authorization: Bearer $KEY" -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{"profiles":[{"vanityName":"candidate-1"},{"vanityName":"candidate-2"},{"vanityName":"candidate-3"}]}')
$
$# 4. Get posts for the best candidate
$POSTS=$(curl -s "$BASE/api/posts?profileUrl=https://www.linkedin.com/in/candidate-1/&limit=5" \
> -H "Authorization: Bearer $KEY" -H "X-User-Id: $USER")
$echo "$POSTS" | jq '.posts[] | {text: .postContent[:100], likes: .likeCount}'

SalesNav Alternative

For richer data and advanced filters, use SalesNav search:

$curl -s -X POST "$BASE/api/salesnav/search" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{"keywords": "VP Engineering fintech London", "maxResults": 25}'

SalesNav returns additional data like lead activity timeline and company insights. See SalesNav for the full API.

Error Handling

ScenarioResolution
Search returns 0 resultsBroaden keywords or remove company filter
Profile returns 422Profile may be restricted (LinkedIn 403)
Relationship check failsProfile may be blocked or deactivated
Posts endpoint times outReduce limit or try again

Related

  • Profiles — Full profile endpoint reference
  • Search — Search parameters and pagination
  • Warm Outreach Guide — Next step: connect and message