Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Contact 2nd and 3rd Degree LinkedIn Connections (API Method)

The degree label tells you how far someone is from you. It does not decide whether you can reach them. Look up their work email and skip the connection gate.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

1st, 2nd and 3rd are distance labels. They count the steps between you and another member, and LinkedIn uses them to decide which buttons you see.

Per LinkedIn's help page (October 2026), here is the whole system:

LabelWho it isWhat LinkedIn offers you
1stAccepted your invitation, or you accepted theirsSend a message
2ndConnected to one of your 1st-degree peopleSend a connection invitation
3rdConnected to one of your 2nd-degree peopleA 3rd-degree icon; the page lists no contact option
Out of networkEveryone elseLimited profile view; InMail, if the option is available

The label changes as your network grows. Accept a new connection and some of their contacts move up a degree.

The label is a social path. It says nothing about whether you can email someone. This guide takes a list of 2nd and 3rd degree targets and reaches them on a channel LinkedIn does not gate.

TL;DR

  • Takes about 10 minutes: 3 to size the audience for free, 7 to look up one person.
  • Spends 0 records to size a list, then 1 record per person looked up. A 25-person test uses up to 25 of the 1,000 free records.
  • You get a work email and an email_status. Filter on the status before you send.

Prerequisites

  • A LeadOcean API key from app.leadocean.io. The free plan has no card and 1,000 records.
  • export LEADOCEAN_API_KEY=... in your shell.
  • curl and jq.
  • Public profile URLs of the people you want, or a title and country to search by.

Step 1: Know which label you are dealing with

Open the profile and read the badge next to the name. The badge decides your LinkedIn options, so pick the channel before you spend time.

  • 1st: message them on LinkedIn. You do not need their email.
  • 2nd: you can invite them. Expect to wait for them to accept.
  • 3rd or out of network: LinkedIn offers an icon, or paid InMail where available. This is where email wins.

The competing guides stop here. The useful question is what to do for the 2nd, 3rd and out-of-network group. Email works the same for all three, because it ignores the degree.

Step 2: Size the audience before you pull anything

Sizing is free. Rebuild the search as a LeadOcean filter and read meta.total. Send count=true as a query parameter, with limit 1 in the body.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["US"],
    "limit": 1
  }' | jq '.meta'

meta.total is capped at 100,000. For an uncapped total from an AI assistant, the free leadocean_count_leads MCP tool answers the same question. On 2026-10-21 it returned this for the filters above:

json
{
  "total": 129494,
  "totalIsExact": true,
  "totalAll": 350517,
  "distinctCompanies": 58121
}

total counts people with a verified, catch_all_valid or catch_all email. totalAll is the same filters with no email condition. Enum values are exact strings, so check them with leadocean_list_enum_values if a search comes back empty.

Step 3: Search by the same filters you use on LinkedIn

Your LinkedIn search has title, location and company filters. The LeadOcean body takes the same ideas as flat arrays. Pull a small page first.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": ["Head of Sales"],
    "country": ["US"],
    "jobLevel": ["VP"],
    "limit": 25
  }'

limit runs from 1 to 100. Page with cursor. One search pages to 10,000 rows. If meta.depthCapped is true, narrow the filters instead of paging further.

This step spends 1 record per person returned. 25 rows is 25 records.

Step 4: Enrich a person you already found on LinkedIn

If you already have the profile URL, skip the search. Enrich takes exactly one of linkedin_url, email, phone or person_id. Set reveal_email to get the address back.

bash
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "linkedin_url": "https://www.linkedin.com/in/jane-doe-acme",
    "reveal_email": true
  }'

An enrichment that finds nobody is a 404 and costs nothing. Revealing the email costs no extra record. The profile does not need to be a connection of yours. The URL is only a lookup key.

For a phone number, call GET /v2/people/phone. It costs 1 record per call, including a call that finds nothing.

Step 5: Check the status, then send

Read email_status before you put an address in a sequence. verified and catch_all_valid are the values to send to. catch_all is sendable with care. risky, invalid, role and spam_trap are not.

Bounced emails are not refunded, so the filter is your protection. A reasonable first send is verified only, to a small batch, from a mailbox you have warmed.

Keep the LinkedIn side honest too. If someone is 2nd degree and replies by email, a short LinkedIn invitation afterward is fine. Use the channel they answered on.

What you get

The enrich call in Step 4 returns this. It is the response shape from the API reference, with placeholder values, not a real person.

json
{
  "success": true,
  "data": {
    "profile_data": { "profile_full_name": "Jane Doe", "profile_headline": "VP Sales at Acme" },
    "contact_data": {
      "has_email": true,
      "email_status": "verified",
      "email_type": "work",
      "contact_emails": [
        { "email": "jane.doe@acme.com", "type": "work", "status": "verified" }
      ],
      "contact_phones": [{ "phone": "+1 415 555 0133", "type": "mobile" }],
      "contact_current_experiences": [
        { "job_title": "VP Sales", "company_name": "Acme", "company_domain": "acme.com" }
      ]
    }
  }
}

contact_emails and contact_phones appear only with reveal_email. Search rows carry has_email and email_status as flags, not the address.

Since 2026-10-17, enrich also returns career history in resume_data: past roles, education and certifications, each when held. Past employers carry no company_id yet. That is useful for a first line that is not "I saw your profile".

Troubleshooting

ErrorCauseFix
401Missing or wrong x-api-keyCheck $LEADOCEAN_API_KEY is exported and sent in the header
429Above the plan's rate limit (5 requests a second on Free, 200 on Agency)Honor Retry-After, or throttle the loop
402The 1,000 free records are spentUpgrade to Solo or Agency. Paid plans slow down at their fair-use pace instead of stopping
Empty dataA filter value is not an exact enum stringResolve it with leadocean_list_enum_values, for example VP, not vp
404 on enrichNobody matched that inputFree. Try the email or person_id instead of the URL
Export refusedOver 50,000 rows a request or 500,000 a daySplit the export into smaller filtered runs. Bulk CSV is not on Free

FAQ

Can I message 2nd and 3rd degree people without InMail?

On LinkedIn, the help page (October 2026) lists an invitation for 2nd degree and InMail for out-of-network people, where available. Email is the route that does not depend on either.

Do I need to be connected to get a work email?

No. LeadOcean looks up the person from a public URL or a search. Your connection status is not an input.

How many records does one contact cost?

One record per person you receive. Counts, empty pages and 404 enrichments cost nothing. See pricing.

What if I only want to see my own 1st-degree list?

That is a LinkedIn feature. LeadOcean has no access to your network graph. For the no-connection case, read how to get contact info without a connection. For the premium tool side, see how Sales Navigator works and whether it provides email addresses.

Reach 2nd and 3rd degree people by email, not InMail

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →