LinkedIn Email Scraper API
Our LinkedIn email scraper reads the public contact fields of a profile or company and returns them as JSON: the external website, a phone number when listed, and an email when one is genuinely public. This LinkedIn email and lead scraper is honest by design, since a LinkedIn member's email is a private field that almost never appears logged-out.
Why LinkedIn Email data is login-walled
A LinkedIn member's email lives behind the logged-in "Contact info" modal, which needs a first-degree connection, so it is essentially never in the public page. What is public is the external website (companies expose it in their Organization data), so this endpoint returns a website far more often than an email, and the response says so on every call.
Call the LinkedIn Email Scraper API in one request
curl "https://api.linkedinscraperapi.com/api/v1/linkedin/email?url=https://www.linkedin.com/company/microsoft/&api_key=$API_KEY" import requests
BASE = "https://api.linkedinscraperapi.com"
API_KEY = "YOUR_API_KEY"
# Pass a /company/ or /in/ URL (or username= for a person).
data = requests.get(
f"{BASE}/api/v1/linkedin/email",
params={
"url": "https://www.linkedin.com/company/microsoft/",
"api_key": API_KEY,
},
timeout=30,
).json()
# website is the field that actually populates; email is usually null.
print("website:", data["website"])
print("email:", data["email"], "| phone:", data["phone"])
print(data["note"]) # states the member-email wall on every response Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
url | optional | - | A /in/{slug} or /company/{slug} URL. A /company/ URL is detected as a company. One of url or username is required. |
username | optional | - | A bare slug, treated as a person /in/ slug by default. One of url or username is required. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
The JSON the LinkedIn Email Scraper API returns
{
"url": "https://www.linkedin.com/company/microsoft/",
"is_company": true,
"email": null,
"website": "https://news.microsoft.com/",
"phone": null,
"note": "LinkedIn member emails are private (behind the logged-in \"Contact info\" modal) and are essentially never present in the public/logged-out page; only an external website (and rarely a company phone) is publicly exposed."
} | Field | Type | Description |
|---|---|---|
url | string | The canonical profile or company URL the lookup resolved to. |
is_company | boolean | True when the target is a /company/ page, false for a /in/ person profile. |
email | string | A public email when one is exposed (a mailto: link or an email field in the page data). Usually null, since member emails are private. |
website | string | The external website, the first non-LinkedIn URL in the Organization or Person data. The field that most often populates. |
phone | string | A phone number when the page lists one (mostly companies), otherwise null. |
note | string | A plain-language statement of the member-email wall, returned on every response so the scope is never ambiguous. |
Who pulls LinkedIn data, and for what
Company website enrichment
Lead qualification
Contact-channel discovery
CRM website backfill
Compliance-aware prospecting
Data-availability auditing
Why teams build on our LinkedIn Email Scraper API
Our LinkedIn email scraper reads the public Organization or Person data and returns the contact fields that are actually exposed, chiefly the external website, plus a phone or email on the rare pages that list one. Every request runs through residential proxies with retries at a 2.6s median, and every response carries a note stating the member-email wall in plain language, so you never build outreach on a field LinkedIn does not publish.
Profile or company input
External website resolved
Honest scope note
Email and phone when public
Residential-first routing
Honest wall reporting
LinkedIn Email Scraper API measured against the alternatives
| Our API | DIY (requests / headless) | Official LinkedIn API | |
|---|---|---|---|
| Input by profile or company | Yes, /in/ or /company/ URL | Manual fetch and parse | Contact data is consent-gated |
| External website | Resolved from page data | You filter LinkedIn links yourself | Sometimes in authorized Pages data |
| Member email | Null unless truly public, with a note | Not in the logged-out page | Never exposed to general apps |
| Setup | API key only | Residential proxies, headless browser, parsers | Partner approval plus OAuth |
| Honesty about scope | Plain note on every response | You infer it yourself | Documented but scope-limited |
| Anti-bot and proxies | Residential-first, built in | You build and maintain it | Not applicable |
| Behavior when walled | Reports the block honestly | Silent partial or empty record | Returns only authorized fields |
Usage-based pricing, no seats
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
Almost never, and we say so on every response. A LinkedIn member's email sits behind the logged-in "Contact info" modal, which requires a first-degree connection, so it is essentially never present in the public logged-out page. This endpoint returns the contact fields that are actually public, chiefly the external website, and returns email as null when no public address exists. It does not bypass the private Contact-info modal.
It returns url, is_company, email, website, phone, and a note. In practice website is the field that populates, since companies expose their homepage in their Organization data. email and phone come back only when a mailto: or a listed number is genuinely public, and null otherwise. The note states the member-email wall in plain language so the scope is always clear.
Because they have different visibility. A company's external website is part of the public Organization data LinkedIn renders logged-out, so it comes through reliably. A member's email is a private field gated behind a login and a connection, so it is not in the public page. That is why this endpoint returns a website far more often than an email, and why it is honest about the difference rather than implying it can reveal private addresses.
Yes. Pass a /in/ profile URL or a bare username to look up a person, or a /company/ URL to look up a company. The endpoint detects which it is and returns is_company accordingly. For people, website comes from the profile's public links when present; the email remains private in almost all cases.
This endpoint only reads contact fields that are already public, and it is explicit about how little of that is an email. Collecting publicly available business data is generally permitted, but sending is regulated: laws such as the US CAN-SPAM Act require a working opt-out, and the EU GDPR requires a documented lawful basis. Treat any address as a public business contact, message people about genuine business reasons, and honor every unsubscribe. This is general information, not legal advice.
No. You only need a linkedinscraperapi key, passed as the api_key query parameter. There is no LinkedIn login, no cookies, and no Partner Program approval. We read the public logged-out page. The free tier includes 1,000 requests per month.
Median end-to-end response is about 2.6 seconds, which includes residential proxy routing, anti-bot handling, retries, and parsing. One call returns the public contact record plus the scope note.