Proxycurl Is Gone: The Best Proxycurl Alternative for LinkedIn Data in 2026 (Migration Guide)
If you maintain an app that enriches companies or candidates with LinkedIn data, you have probably already hit the wall: Proxycurl is gone. The API thousands of products quietly hard-coded simply stopped answering.
This guide is the practical version of "what now." It covers exactly what happened, what to look for in a Proxycurl alternative, a neutral comparison of the LinkedIn-data options on the market in 2026, and an honest read on where our own LinkedIn API fits — including where it does not.
TL;DR: Proxycurl (Nubela) wound down on July 4, 2025 after LinkedIn sued it and a court entered a permanent injunction. It is not coming back, and its successor deliberately does not scrape LinkedIn. The fastest Proxycurl replacement depends on what you actually pull: per-record data vendors (Bright Data, Coresignal, People Data Labs) suit bulk enrichment; marketplace and per-request tools (Apify, ScrapingDog) suit flexible scraping; and Serpent API is the simple per-call option, strongest for LinkedIn company firmographics and jobs, with best-effort public profile basics. Whichever you pick, wrap it in a thin adapter so the next shutdown is a config change, not a rewrite.
What happened to Proxycurl
Proxycurl was, for years, the default "LinkedIn API" for developers. It exposed company, person, and job data through a clean REST interface, and a huge number of CRMs, sales-intelligence tools, recruiting products, and side projects built directly on top of it.
In January 2025, LinkedIn — owned by Microsoft — sued Nubela Pte. Ltd., the company behind Proxycurl, in the U.S. District Court for the Northern District of California (LinkedIn Corporation v. Nubela Pte. Ltd. et al, case 3:25-cv-00828). The complaint alleged breach of LinkedIn's User Agreement and violations of the Computer Fraud and Abuse Act (CFAA), among other claims. A central allegation was that Proxycurl created large numbers of fake accounts to reach data — including non-public data — and resold it through its API.
The matter resolved with a court-entered permanent injunction requiring Proxycurl to stop accessing LinkedIn and to delete the LinkedIn data it had collected. The team posted a farewell and ceased operations on July 4, 2025, citing the practical reality of fighting a litigant with effectively unlimited resources. Their follow-on project is a separate competitive-intelligence effort that, by design, does not scrape LinkedIn.
The takeaways for anyone planning a migration are blunt:
- It is permanent. This was not an outage or a pricing change. The product is shut down under a court order, and the founders have moved on.
- The data was deleted. There is no archive to fall back on, so historical Proxycurl payloads you cached are all you have from that source.
- The legal landscape is real, not theoretical. The case is a reminder that how data is obtained matters as much as what the data is.
Why everyone is searching for a replacement
The reason "Proxycurl alternative" spiked overnight is simple: the dependency was invisible until it broke. Teams that integrated Proxycurl two or three years ago often had a single function — enrich_company() or get_profile() — that everything else called. When the endpoint went dark, lead-enrichment pipelines, recruiter dashboards, and onboarding flows all failed at once, frequently in products whose current engineers had never touched that integration.
Most of those teams need one or more of three things back:
- Company data (firmographics) — employee count, industry, size band, founded year, HQ location, website, logo, description. This powers lead enrichment, account scoring, and CRM hygiene.
- People data — public profile basics for a person, used in recruiting and sales intelligence. This is the hardest category to replace cleanly and the one with the most legal sensitivity.
- Jobs data — public job postings by company, keyword, and location, used for hiring-intent signals, market mapping, and recruiting tools.
The honest framing for the rest of this guide: company and jobs data are broadly replaceable today; deep per-person profiles are the category to scope carefully, both technically and legally.
What to look for in a Proxycurl alternative
Before you compare logos, decide what actually matters for a dependency that just taught you a painful lesson about concentration risk. Four criteria do most of the work.
1. Reliability and data freshness
Stale firmographics quietly poison downstream scoring. Ask how current the company and jobs data is, whether profile fields are populated consistently or sparsely, and what happens on a miss — a clean empty result is far easier to handle than a timeout or a 500. Test your own real inputs, not the vendor's demo URLs.
2. Pricing model: per-call vs per-record
This is where total cost actually diverges. Broadly there are two models. Per-call (or per-request) pricing charges for each API request you make, which is predictable and pairs naturally with pay-as-you-go. Per-record (or per-match / dataset-license) pricing charges for each row of data returned or licensed, which can be efficient for bulk enrichment but expensive and harder to forecast for spiky, real-time lookups. Map your real call pattern onto each model before trusting any headline number — a "cheap" per-record rate can lose to flat per-call pricing once you account for multi-record responses and minimums.
3. Scope honesty
A provider that claims to return everything for everyone is the one to distrust. The useful question is "what is your richest dataset?" Company firmographics, job postings, and deep person profiles are different problems with different reliability. Pick a provider whose strongest category matches your most important use case, and discount any field a vendor will not show you in a live test.
4. Resilience to a single-vendor shutdown
Proxycurl's lesson is architectural, not commercial. The teams that hurt most were the ones that hard-coded one vendor everywhere. The fix is generic engineering: put a thin adapter / abstraction layer between your application and your data provider so the provider is a configuration value, not a dependency baked into a hundred call sites. We cover the pattern in the migration section below. Build it once now and the next shutdown — there will be one — becomes a config change.
The best LinkedIn API alternatives in 2026 (comparison table)
Here is a neutral snapshot of the LinkedIn-data options developers most often shortlist as a Proxycurl replacement. Each is an independent company with its own model; this is a market overview, not an endorsement or a ranking, and pricing/positioning shift, so always verify current terms directly with the vendor.
| Provider | Strongest fit | Pricing model | Notes |
|---|---|---|---|
| Bright Data | Company & people datasets at scale | Per-record datasets / usage-based, volume tiers | Enterprise-grade breadth; higher entry cost and more setup |
| Coresignal | Firmographic & employee datasets (B2B data licensing) | Per-record / annual data license | Bulk data and feeds; less a single real-time lookup API |
| People Data Labs | Person & company enrichment | Per-match / per-record, plan tiers | Identifier-driven enrichment from licensed datasets |
| Apify | Flexible, build-your-own scraping | Usage / compute + platform plan | Marketplace "Actors" you run and maintain yourself |
| ScrapingDog | Per-request LinkedIn endpoints | Credit packs / monthly plan | Profile, company, and jobs endpoints; mid-market |
| Serpent API | Company firmographics & jobs (profile basics) | Simple per-call, no subscription | $3/1K company, $0.50/1K profile, jobs & job; pay-as-you-go |
The pattern in the table is the decision: if you need bulk, dataset-style coverage of people and firms and can absorb per-record or licensing pricing, the data vendors fit. If you want flexible scraping you own end to end, the marketplace model fits. If you want a simple, predictable per-call API that is strongest for LinkedIn company and jobs data with no subscription, that is the gap Serpent aims at — and where it tends to undercut per-record vendors at low-to-mid volume.
Where Serpent API fits (honestly)
We would rather you pick the right tool than oversell ours, so here is the straight version. Serpent's LinkedIn API exposes four endpoints through one REST surface, and they are not equally deep. Company is the richest. Jobs is strong. Profile is deliberately scoped.
/api/linkedin/company— firmographics (richest): employee count, industry, company size band, founded year, HQ location, website, logo, and description. This is the best fit for lead enrichment and account data./api/linkedin/jobs— public job search by keyword and location: title, company, location, posted date, seniority, and job type./api/linkedin/job— single job detail: a posting's full description, criteria, and applicant signals./api/linkedin/profile— best-effort public basics only: name, headline, location, current role, and partial experience/education, with depth that varies by profile.
Now the part most pages skip. Serpent is not a drop-in replacement for Proxycurl's full-person-profile product. If your app depended on deep, guaranteed per-person fields, the Profile endpoint will not match that one-for-one: it returns publicly visible basics, and it does not promise a full resume export — no guaranteed skills lists, recommendations, or certifications. If people data was your core, scope a hybrid (use Serpent for company and jobs, and evaluate a dataset vendor for deep profiles). Where Serpent shines as a Proxycurl alternative is company firmographics and jobs, which is exactly what most enrichment and recruiting pipelines lean on hardest.
A first company call looks like this. Authenticate with the X-API-Key header:
import requests
API_KEY = "sk_live_your_key"
def linkedin_company(url):
r = requests.get(
"https://apiserpent.com/api/linkedin/company",
headers={"X-API-Key": API_KEY},
params={"url": url},
timeout=60,
)
r.raise_for_status()
return r.json()
data = linkedin_company("https://www.linkedin.com/company/stripe")
print(data["company_name"], data["company_size"], data["industry"])
On pricing, Serpent uses one simple model: on the Default tier, company data is $3.00 per 1,000 requests and profile, job search, and job detail are $0.50 per 1,000 each. A single $100 deposit unlocks Growth (10x off) and a single $500 deposit unlocks Scale (20x off). New accounts include 10 free Google searches to evaluate the platform, and LinkedIn endpoints are pay-as-you-go with no subscription. Full numbers live on the pricing page, and the endpoints, fields, and response shapes are documented on the LinkedIn API page and in the API docs.
Migrate without getting locked in again
The most valuable thing to take from the Proxycurl shutdown is not which vendor you choose next — it is how you wire it in. The teams that will migrate again in an afternoon are the ones that put a thin abstraction layer between their app and the provider. This is generic software design, and it applies no matter which option above you land on.
The idea: define your own normalized shapes for company, job, and profile, then write one small adapter module that maps a provider's raw response into those shapes. Every caller in your app talks to the adapter, never to a vendor SDK directly. Swapping providers becomes a config value plus one new mapping function.
# providers/base.py — your app only ever sees these shapes
from dataclasses import dataclass
@dataclass
class Company:
name: str
size: str | None
industry: str | None
website: str | None
class LinkedInProvider:
def get_company(self, url: str) -> Company: ...
def get_jobs(self, keyword: str, location: str) -> list: ...
# providers/serpent.py — one place that knows a vendor's field names
import requests
class SerpentProvider(LinkedInProvider):
def __init__(self, api_key):
self.h = {"X-API-Key": api_key}
def get_company(self, url):
r = requests.get(
"https://apiserpent.com/api/linkedin/company",
headers=self.h, params={"url": url}, timeout=60,
)
d = r.json()
return Company( # <-- normalize here, nowhere else
name=d.get("company_name"),
size=d.get("company_size"),
industry=d.get("industry"),
website=d.get("website"),
)
# app code never changes when the provider does:
provider = SerpentProvider(api_key=API_KEY) # one line to swap
company = provider.get_company(url)
With this in place, your migration plan from Proxycurl is mechanical: (1) list every field your app actually consumes — usually far fewer than the old payload contained; (2) define your normalized Company, Job, and Profile shapes around those fields; (3) implement one adapter for your chosen provider; (4) backfill or accept gaps for any deep-profile fields your new provider does not return; (5) keep the interface stable so the next swap is a single class. The resilience principle is the same one we apply to scraping pipelines that face selector churn — design for the source to change, because it will.
For broader context on building data pipelines that survive vendor and source changes, see our SERP API for search data and the social media API overview, which sits alongside the LinkedIn endpoints in the same simple, per-call model.
Replace Proxycurl with a simple per-call LinkedIn API
Serpent's LinkedIn API gives you company firmographics, public job search and detail, and best-effort public profile basics through one REST endpoint — from $0.50 per 1,000 calls, no subscription, with 10 free Google searches to evaluate. Strongest for company and jobs data; honest about profile scope.
Get Your Free API KeyExplore: LinkedIn API · Pricing · Documentation
FAQ
Is Proxycurl coming back?
No. Proxycurl (run by Nubela) wound down operations on July 4, 2025 after LinkedIn sued it in the Northern District of California and the matter resolved with a permanent injunction requiring it to stop accessing LinkedIn and delete the LinkedIn data it had collected. The team has moved on to a separate project that deliberately does not scrape LinkedIn, so the original API is not returning. Treat your migration as permanent.
What is the cheapest Proxycurl alternative?
It depends on what you pull. For LinkedIn company firmographics and job data, Serpent API uses simple per-call pricing — $3.00 per 1,000 company lookups and $0.50 per 1,000 profile, job-search, or job-detail calls on the Default tier, with no subscription. A $100 deposit unlocks 10x off and a $500 deposit unlocks 20x off. Per-record data vendors and subscription platforms can cost far more at low-to-mid volume, so compare on your actual call mix, not a headline rate.
Can I get full LinkedIn profiles from Serpent API?
Not a full resume export. Serpent's Company endpoint is the richest and returns complete firmographics, and job search and job detail are strong. The Profile endpoint is best-effort: it returns publicly visible basics like name, headline, location, and current role, and field depth varies by profile. It is not a drop-in replacement for a full-person-profile product, and it does not guarantee skills, recommendations, or certifications. If your app depended on deep per-person profiles, plan for company and jobs data as your strongest fit.
Is it legal to use a LinkedIn data API?
The law around scraping public web data is unsettled and fact-specific, and this article is not legal advice. The Proxycurl case turned in part on conduct like creating fake accounts to reach non-public data and breaching LinkedIn's User Agreement. Working only with public data and a reputable provider lowers risk, but you remain responsible for using any data lawfully and within the terms that apply to you. Talk to counsel for your specific use case.
How do I migrate my Proxycurl integration without getting locked in again?
Put a thin adapter layer between your app and whichever provider you choose, so the provider becomes a configuration value instead of a hard-coded dependency. Define your own normalized company, job, and profile shapes, map each provider's response into them in one module, and route calls through that interface. If a vendor disappears again — as Proxycurl did — swapping is a config change and a new mapping function, not a rewrite of every caller.



