Skip to content
linkedindataapi.com
LinkedIn Data API · Python & TypeScript · 20269 min read·Updated 2026-11-05

No-Cookie LinkedIn Data API in Python & TypeScript: Enrich Profiles, Posts & Jobs at Scale (2026)

Why browser automation and `li_at` session cookies get banned within 48 hours—and how to build an async 500-RPM LinkedIn profile & company enrichment pipeline in Python (`httpx`) and TypeScript at $0.40–$1.00 per 1,000 lookups.

$0.40–$1.00 / 1K Profiles & Companies · $0.08–$0.20 / 1K Search Leads · 100% No-Cookie

Instant Quickstart · Copy & Run in 30 Seconds

Async Batch LinkedIn Profile Enrichment with Zero-Charge 404 & 402 Guard

Execute in Live Playground →
import asyncio
import httpx

API_BASE = "https://api.linkedindataapi.com"

async def fetch_profile(client: httpx.AsyncClient, sem: asyncio.Semaphore, slug: str, api_key: str):
    async with sem:
        r = await client.get(
            f"{API_BASE}/v1/profile",
            params={"username": slug},
            headers={"x-api-key": api_key},
            timeout=15.0,
        )
        if r.status_code == 404:
            return {"username": slug, "status": "not_found", "credits_cost": 0}
        if r.status_code == 402:
            body = r.json()
            raise RuntimeError(f"Out of credits ({body.get('credits_remaining')} left). Top up: {body.get('topup_url')}")
        r.raise_for_status()
        return r.json()["data"]

async def enrich_batch(slugs: list[str], api_key: str):
    sem = asyncio.Semaphore(10)
    async with httpx.AsyncClient() as client:
        return await asyncio.gather(*(fetch_profile(client, sem, s, api_key) for s in slugs))

if __name__ == "__main__":
    results = asyncio.run(enrich_batch(["satyanadella", "sama", "patrickc"], "b2b_live_your_api_key"))
    for p in results:
        print(p.get("full_name"), "->", p.get("headline"))

Key Engineering Takeaways (TL;DR)

  • ✓Never risk employee LinkedIn accounts with `li_at` cookies or headless Playwright browsers—`GET /v1/profile` is 100% cookie-free and residential-proxy-free.
  • ✓Built-in 4-provider automatic failover (`Tier C`) rejects `******` masked headlines and `<450B` empty skeletons before charging a single credit.
  • ✓Strict Zero-Charge Guarantee: HTTP 404 Not Found, empty search arrays, and 5xx/timeout errors always cost 0 Credits (`x-credits-cost: 0`).
  • ✓Programmatic HTTP 402 handling: inspect `credits_remaining` and `topup_url` (`https://linkedindataapi.com/dashboard/topup`) to alert RevOps before pipelines pause.

2. High-Throughput Async Python (`httpx`) & TypeScript Enrichment Pipeline

Use bounded concurrency (`asyncio.Semaphore(15)`) and inspect `x-credits-remaining` + HTTP 402 `topup_url` for resilient CRM & AI SDR enrichment:

Async Batch LinkedIn Profile Enrichment with Zero-Charge 404 & 402 Guard

Enrich hundreds of LinkedIn URLs or usernames concurrently in Python (`httpx`) or TypeScript:

curl "https://api.linkedindataapi.com/v1/profile?url=https://www.linkedin.com/in/satyanadella" \
  -H "x-api-key: b2b_live_your_api_key"

Interactive Engineering Workbench · GET /v1/profile

Verify real-time latency, enrichment unit math & JSON schema

2,000 profiles/day
1,000 companies/day
10,000 items/day
HTTP Calls/Day
3,400
Up to 600 RPM
Hot Cache Latency
~14 ms p50
PostgreSQL 16 + Redis
Cookie Risk
0 Cookies
No li_at required
Estimated Monthly Pipeline Cost (30 Days)
$59.70/ mo with Business bonus ($150.00 base rate)
Daily consumption: 50,000 Credits ($5.00/day)
LinkedInDataAPI (with volume bonus):$59.70 / mo
Proxycurl / Clearbit ($20+ / 1K):$6300.00 / mo
Failed / 404 request fee:$0.00 (0 Credits)

Frequently Asked Questions

Can I pass a full `https://www.linkedin.com/in/...` URL instead of extracting the username first?
Yes. Pass `?url=https://www.linkedin.com/in/satyanadella` to either `/v1/profile` or `/api/v2/linkedin` (Proxycurl drop-in alias) and the gateway normalizes URL parameters, trailing slashes, and encoded characters automatically.
Does LinkedInDataAPI return personal emails or phone numbers?
No. To ensure strict GDPR/CCPA compliance, LinkedInDataAPI only returns public professional profile, company, post, and job metadata, automatically scrubbing personal emails, phone numbers, and birth dates.