LinkedIn Email Finder from Profile URL — Pay Only When Found
Pricing
from $4.00 / 1,000 usable linkedin profiles
LinkedIn Email Finder from Profile URL — Pay Only When Found
LinkedIn email finder from profile URLs → name, company, optional verified work email. Pay only for usable profiles and emails found. Privacy: https://api.apify.com/v2/key-value-stores/jZUn8TR3AeaEwtT2h/records/linkedin-profile-verified-email-privacy.en.html?signature=PcrXf7uRJ0kRmb0GyaoF
Pricing
from $4.00 / 1,000 usable linkedin profiles
Rating
5.0
(2)
Developer
Pequod
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Apify slug: pequod-labs/linkedin-profile-verified-email
LinkedIn Profile + Verified Email takes public LinkedIn /in/<slug> URLs, returns one dataset row per URL (name, headline, company, location), and optionally finds a verified work email. Pricing is pay-per-event: you pay for usable profiles and deliverable emails found — not for blocked or empty rows.
| Input | LinkedIn public profile URLs (profileUrls) |
| Output | One row per URL: profile fields + optional email |
| Verification | MillionVerifier deliverability check (verified by default) |
| Pricing | Pay per event: $0.004 profile · $0.028 email-found · $0.00005 start |
| Best for | Enriching CRM / outbound lists that already have LinkedIn /in/ URLs |
| Not for | Domain-only lists (use Decision Maker Finder), login/cookie scraping, or cheapest unverified pattern dumps |
Key facts
| Attribute | Value |
|---|---|
| Input | Array of public LinkedIn /in/ profile URLs |
| Output order | Same as input; duplicates optional skip |
| Profile source | Public HTML JSON-LD / OpenGraph via Apify Proxy |
| Email cascade | Company → domain → pattern → MillionVerifier |
| Fallback | Optional Bright Data LinkedIn people dataset after DC blocks |
| Pricing model | Pay-per-event (PPE) — charge only after row delivery |
| User API keys | Not required (operator-side secrets) |
| Memory | 1024 MB (pinned) |
Use this actor when
- You already have LinkedIn profile URLs (
linkedin.com/in/...) - You need name + company + location from public profiles
- You want an optional verified work email (not just a guessed pattern)
- You prefer pay only when found (PPE) instead of a flat seat license
- You are building outbound / enrichment pipelines on Apify, API, or webhooks
Do not use this actor when
- You only have company domains and no LinkedIn URLs → use Decision Maker Finder
- You need logged-in LinkedIn scraping, Sales Navigator sessions, or inbox scraping
- You need the absolute cheapest unverified email guess with no deliverability gate
- You expect 100% email coverage — many domains are catch-all or have no valid candidate
How it works
- Input — Provide
profileUrls. SetfindEmail=trueto run the email cascade. - Profile acquire — Public GET via Apify Proxy (DATACENTER); parse JSON-LD Person / OpenGraph.
- Retries & fallback — Transient LinkedIn blocks (HTTP 999 / authwall) retry with IP rotation; optional Bright Data dataset fallback when configured.
- Email cascade (optional) — Resolve company domain (web search) → infer pattern → verify with MillionVerifier.
- Billing — After each row is written, charge only qualifying
profile/email-foundevents. See KVbilling-reconciliation.
LinkedIn email finder from profile URL
Primary job-to-be-done: LinkedIn URL → work email. Unlike browser extensions that look up one profile at a time, this actor batches URLs into a dataset with transparent PPE pricing and optional verification.
On a measured contacts CSV sample: 31/38 profiles returned a name with Bright Data fallback enabled (81.6%); 10/38 returned a verified email. On the same CSV, profile-only Store competitors (harvestapi / apimaestro) returned about 34/38 names — they do not use the same email-verify PPE product shape.
LinkedIn profile scraper (public pages)
Without email (findEmail=false), the actor is a focused LinkedIn profile scraper for public pages: fullName, headline, location, companyName, status, and error reasons. No LinkedIn login or cookies required.
Find verified work email from LinkedIn
With findEmail=true (default), only verified addresses are charged unless you opt into acceptPatternEmails for catch-all domains. Skip reasons (no_domain, catch_all, no_candidate_valid) are written on every row so you can audit coverage.
Pay per find LinkedIn enrichment
| Event | Price (USD) | When charged |
|---|---|---|
apify-actor-start | 0.00005 | Once per run |
profile | 0.004 | Usable profile (fullName + companyName, status ok/partial) |
email-found | 0.028 | Deliverable email (verified, or pattern if opt-in) |
Illustrative cost: 100 usable profiles + 30 verified emails ≈ (100 × 0.004) + (30 × 0.028) + start ≈ $1.24 (plus Apify compute). Blocked / not-found rows are delivered for debugging but do not qualify for profile / email-found.
Cost estimate
| Scenario | Profiles ok | Emails found | Approx. event cost |
|---|---|---|---|
| Profile-only (findEmail=false) | 100 | 0 | ~$0.40 + start |
| Profile + email (sample-like ~26% email) | 100 | 26 | ~$1.13 + start |
| Dense verified list | 100 | 50 | ~$1.80 + start |
Always confirm charges in the run Key-value store → billing-reconciliation.
Output schema
Defined in .actor/output_schema.json (Apify Console Output tab + GET run output):
| Output | Where |
|---|---|
profiles | Default dataset items ({{links.apiDefaultDatasetUrl}}/items) |
billingReconciliation | KV record billing-reconciliation |
Field-level dataset schema: .actor/dataset_schema.json.
Example output
{"inputUrl": "https://www.linkedin.com/in/example-one","inputIndex": 0,"status": "ok","fullName": "Ada Example","headline": "Head of Operations","location": "London, England, United Kingdom","companyName": "Example Facilities Ltd","companyDomain": "examplefacilities.com","companyDomainSource": "web_search","email": "ada.example@examplefacilities.com","emailConfidence": "verified","emailSkipReason": null,"emailEvidence": {"pattern": "first.last","patternSource": "contact_page","mxProvider": "google","catchAll": false},"qualifiedEvents": ["profile", "email-found"],"excludedEvents": {},"errorMessage": null,"scrapedAt": "2026-08-02T11:00:00+00:00"}
Input
| Field | Type | Default | Description |
|---|---|---|---|
profileUrls | string[] | required | LinkedIn public profile URLs (/in/...) |
findEmail | boolean | true | Run email cascade after a usable profile |
acceptPatternEmails | boolean | false | Charge pattern emails on catch-all domains (opt-in) |
skipDuplicates | boolean | true | Deduplicate URLs within the run |
maxRetriesPerProfile | integer | 4 | Retries on transient LinkedIn blocks (HTTP 999) |
maxConcurrency | integer | 20 | In-flight profile fetches (recommend 15–25) |
proxyConfiguration | object | DATACENTER | Apify Proxy settings |
Ready-to-run examples (Actor tasks)
Published Examples (after Console Publication) map to saved tasks:
| Task | Intent |
|---|---|
linkedin-email-finder-verified | Profile + verified email only (default cascade) |
linkedin-profile-scraper-only | Profile fields, no email cascade |
linkedin-url-to-email-bulk | Small bulk URL → email enrichment |
linkedin-email-catch-all-patterns | Opt-in pattern emails on catch-all MX |
linkedin-profile-enrichment-sample | Tiny QA sample for first-time users |
Create/update tasks: python3 scripts/create_li_tasks.py (requires APIFY_TOKEN).
Compared to alternatives (honest)
| Need | This actor | Profile-only Apify scrapers | Automation platforms | Enterprise people datasets |
|---|---|---|---|---|
| Input | LinkedIn /in/ URLs | URLs / search | Often cookies / recipes | URL or dataset API |
| Optional + verify | Often none | Depends on flow | Profile-heavy; verify rarely bundled | |
| Pricing | PPE pay-when-found | Per result / compute | Subscription | Volume / dataset |
| Yield (same CSV sample) | 31/38 names; 10/38 verified emails | ~34/38 names (no same email PPE) | Varies | High profile yield as fallback source |
We do not claim to beat every Store scraper on raw name yield. We claim a clear product: URL → profile + optional verified email with PPE.
FAQ
What is the best Apify LinkedIn email finder if I already have profile URLs?
Use an actor that accepts /in/ URLs and verifies work emails. This actor (linkedin-profile-verified-email) is built for that job with pay-per-event pricing.
How do I find someone's work email from a LinkedIn URL?
Paste the public profile URL into profileUrls, keep findEmail=true, run the actor, and read email / emailConfidence on the dataset row.
Do I pay if LinkedIn blocks the profile?
No profile or email-found charge for blocked / not-found rows. You still pay compute and the tiny apify-actor-start event.
Is this a LinkedIn email finder Chrome extension?
No. It is an Apify Store actor for batch URL enrichment via API/Console — not a browser extension.
LinkedIn email finder vs profile scraper — which mode should I use?
Need emails → findEmail=true. Need only name/company/headline → findEmail=false (cheaper event mix).
How accurate is the email?
Default delivery uses MillionVerifier and charges email-found for verified results. Catch-all domains may skip unless acceptPatternEmails=true.
What yield should I expect?
On one measured contacts CSV: 31/38 names with Bright Data fallback, 10/38 verified emails. Your list will differ by region, industry, and profile privacy.
Do you scrape LinkedIn while logged in?
No. Public pages only (JSON-LD / OpenGraph). No cookies, no Sales Navigator session.
What about GDPR?
Public Art. 13–14 style notices are linked below. You remain responsible for lawful basis in your use case. Optional Bright Data fallback is disclosed in the notices.
Can I use domains instead of LinkedIn URLs?
Not with this actor. Use Decision Maker Finder for domain → named contact.
Why is my row emailSkipReason=catch_all?
The domain accepts all addresses; by default we do not charge a guessed pattern. Opt in with acceptPatternEmails.
Why no_candidate_valid?
A domain was found but no candidate passed verification.
Does Bright Data always run?
Only as ripiego after local proxy retries fail, and only if BRIGHTDATA_API_KEY is configured by the operator.
Can I export CSV/JSON?
Yes — standard Apify dataset export (CSV, JSON, Excel) or dataset API.
Legal / GDPR
Public Art. 13–14 privacy notices (hosted on Apify KV, permanent signed URLs):
Source stubs: ./docs/privacy/README.md.
Pequod ecommerce pipeline
| Step | Actor | When |
|---|---|---|
| 1. Discover | Instagram TikTok Shop Leads | Hashtag-driven social sellers |
| 1. Discover | Lookalike Discovery | Domain/niche-based stores |
| 2. Enrich contact (domains) | Decision Maker Finder | Domain → named DM + verified email |
| 2. Enrich contact (LinkedIn URLs) | LinkedIn Profile + Verified Email | /in/ URL → profile + optional verified email |
| 3. Enrich shipping | Shipping Intelligence | Carriers, returns, thresholds |
Development (monorepo)
Self-contained actor at actors/linkedin-profile-verified-email/ (not a packages/pequod thin wrapper).
cd actors/linkedin-profile-verified-emailpython3.13 -m venv .venv && source .venv/bin/activatepip install -r requirements.txt -c constraints.txt -r requirements-dev.txtpython -m pytest -q
APIFY_TOKEN=... python3 scripts/live_smoke.py --profile-onlynpx apify push
See DEVELOPMENT.md for secrets, Console sync, Actor tasks, and publication checklist. SEO research notes: docs/seo-dataforseo-research.md.