Introducing Supportive - Profiles in your Gmail Learn more

Introducing Proxycurl API
proxycurl

Introducing Proxycurl API

With Proxycurl API, you could enrich LinkedIn profiles at one cent per profile, at scale.

Since we introduced Proxycurl, the feedback revolved around two issues:

  1. It was too hard to scrape public LinkedIn profiles
  2. And our corporate plans were too expensive

I was happy to share, at the time, that we had completely overhauled Proxycurl so that you could:

  1. Crawl LinkedIn profiles with just 8 lines of code
  2. Get started with a free trial and an API key immediately
  3. Get 100 credits for $10, that's 100 profiles

You could check out Proxycurl API, the pricing model, and the documentation. I am deliberately keeping the original framing here because this post was part of that launch.

Proxycurl Person Profile API

Update: Proxycurl has since been sunset. I founded Proxycurl, and today I am building NinjaPear instead. If your use case is still "give me structured people and company data in API form," NinjaPear is the continuation of that obsession, except we no longer scrape LinkedIn at all. The data comes from public web sources, is legally cleaner, and in many cases is richer than what a LinkedIn-centric workflow gives you.

We had a lot of feedback asking for an easy way to scrape public LinkedIn profiles. At the time, that was exactly what Proxycurl was built to do.

With Proxycurl Person Profile API, you could get a LinkedIn profile fully parsed into a nicely formatted JSON result. All you had to do was submit a request to the API.

This is what the request looked like:

import requests

api_endpoint = 'https://nubela.co/proxycurl/api/linkedin/person'
linkedin_profile_url = 'https://www.linkedin.com/in/williamhgates'
api_key = 'YOUR_API_KEY'
header_dic = {'Authorization': 'Bearer ' + api_key}

response = requests.get(
    api_endpoint,
    params={'url': linkedin_profile_url},
    headers=header_dic,
)

And a nicely formatted JSON document of Bill Gates' LinkedIn profile would be returned:

{
  "public_identifier": "williamhgates",
  "profile_pic_url": "https://media-exp1.licdn.com/dms/image/...",
  "first_name": "Bill",
  "last_name": "Gates",
  "occupation": "Co-chair, Bill & Melinda Gates Foundation",
  "headline": "Co-chair, Bill & Melinda Gates Foundation",
  "summary": "Co-chair of the Bill & Melinda Gates Foundation. Microsoft Co-founder. Voracious reader. Avid traveler. Active blogger.",
  "country": "us",
  "birth_date": null,
  "experiences": [
    {
      "company": "Bill & Melinda Gates Foundation",
      "title": "Co-chair",
      "starts_at": {
        "month": null,
        "year": 2000
      },
      "ends_at": null,
      "url": null
    },
    {
      "company": "Microsoft",
      "title": "Co-founder",
      "starts_at": {
        "month": null,
        "year": 1975
      },
      "ends_at": null
    }
  ],
  "education": [
    {
      "school": "Lakeside School, Seattle",
      "degree_name": null,
      "field_of_study": null
    },
    {
      "school": "Harvard University",
      "degree_name": null,
      "field_of_study": null
    }
  ],
  "languages": [],
  "organisations": []
}

That product solved a real problem. Getting structured profile data out of LinkedIn was annoying, brittle, and expensive if you tried to do it yourself. Proxycurl made it simple.

What changed is that I no longer think LinkedIn scraping is the right long-term foundation.

Instead, I have now learned that the better product is one that gives you the same downstream utility without tying your workflow to LinkedIn at all.

The NinjaPear alternative

If you were using Proxycurl's Person Profile API, the closest modern replacement is NinjaPear's Employee API. It does not scrape LinkedIn. It aggregates professional data from public web sources and returns structured person profile data in a very similar shape.

The current Person Profile endpoint is:

GET /api/v1/employee/profile

And the simplest Python call looks like this:

import ninjapear

configuration = ninjapear.Configuration(
    host="https://nubela.co",
    access_token="YOUR_API_KEY"
)

with ninjapear.ApiClient(configuration) as api_client:
    api = ninjapear.EmployeeAPIApi(api_client)
    response = api.get_employee_profile(work_email='[email protected]')
    print(response)

A representative response shape looks like this:

{
  "id": "a3xK9mP2",
  "full_name": "Patrick Collison",
  "first_name": "Patrick",
  "last_name": "Collison",
  "bio": "Co-founder and CEO of Stripe",
  "country": "IE",
  "x_handle": "patrickc",
  "personal_website": "https://patrickcollison.com",
  "work_experience": [
    {
      "role": "Co-founder & CEO",
      "company_name": "Stripe",
      "company_website": "stripe.com",
      "start_date": "2010-01",
      "end_date": null
    }
  ],
  "education": [
    {
      "major": "B.S. Mathematics",
      "school": "MIT",
      "start_date": "2006-09",
      "end_date": "2009-06"
    }
  ]
}

The important distinction is this: Proxycurl started from LinkedIn URLs. NinjaPear starts from public web evidence and identity resolution.

That means the input can be more useful for real workflows:

  • Work email
  • Name + company
  • Role + company

That is just a better fit for CRM enrichment, outbound, and account research.

API credits with volume discounts

Instead of charging $1250 for the smallest plan, we changed the minimum amount to get started to $10.

Instead of rate limits, we changed the billing model to be based on available credits.

That was the original Proxycurl improvement, and at the time it mattered a lot because most tools in this category hid access behind demos, sales calls, or large contracts.

Today, the pricing model at NinjaPear follows the same spirit, except the product is broader.

According to the current Pricing page:

  • 3-day free trial
  • 10 credits included
  • No card required for trial
  • GET /api/v1/employee/profile costs 3 credits / call
  • GET /api/v1/company/details costs 3 credits / call
  • GET /api/v1/employee/work-email costs 2 credits when found, 0.5 credit on miss
  • Free endpoints include the Company Logo API, Disposable Email Check, and credit balance

I still like this model more than seat-based nonsense. Pay for data, not for a sales deck.

If you used Proxycurl for people data

Here is the clean mapping from the old world to the new one.

Old Proxycurl use case NinjaPear replacement What changed
LinkedIn profile enrichment Employee API No LinkedIn scraping, public-web profile resolution
Company enrichment from LinkedIn/company pages Company API Rich company details, funding, headcount, updates
Work email lookup Work Email endpoint Same downstream use case, different sourcing
Company logo enrichment Company Logo API Free, zero-credit endpoint
Employee count lookup Company API employee count endpoint Fresh headcount via web search

This is not a one-to-one product rename. It is a philosophical shift.

Proxycurl was built around making LinkedIn data programmable.

NinjaPear is built around making B2B intelligence programmable without depending on LinkedIn.

Better data, less liability

This is the part I care about most now.

When I was building Proxycurl, the market wanted LinkedIn data because LinkedIn had become the default system of record for professional identity. Fair enough. But that dependency creates product, legal, and operational fragility.

NinjaPear avoids that entire class of risk.

From the current docs and product pages, NinjaPear now provides:

  • Person profile enrichment
  • Company details
  • Employee count
  • Company updates from blogs and X
  • Funding history
  • Competitor data
  • Customer listing data
  • Work email lookup
  • Free company logos

And all of that is positioned around public web sourcing and first-party data principles, not LinkedIn scraping.

For many teams, that is simply the better architecture.

What I would use now

If you found this article because you wanted an introduction to Proxycurl API, the honest answer is simple: Proxycurl was useful, it solved a real pain point, and this post reflects that moment.

But Proxycurl has been sunset.

If you need the modern equivalent, start with NinjaPear instead:

Same obsession with structured B2B data. Better sourcing model. Less legal baggage.

That is the real update.

If your old Proxycurl integration needs a replacement path, start with NinjaPear's Person Profile, Company Details, and Work Email endpoints first. That usually gets you 80% of the way there in one afternoon.

Steven Goh | CEO
World's laziest CEO. CEO of NinjaPear. Ex-Founder of Proxycurl (10+M), Steven founded 5 other startups: Gom VPN, Kloudsec, SilvrBullet, NuMoney, and SharedHere.

Featured Articles

Here's what we've been up to recently.

I dismissed someone, and it was not because of COVID19

The cadence of delivery. Last month, I dismissed the employment of a software developer who oversold himself during the interview phase. He turned out to be on the lowest rung of the software engineers in my company. Not being good enough is not a reason to be dismissed. But not

sharedhere

I got blocked from posting on Facebook

I tried sharing some news on Facebook today, and I got blocked from posting in other groups. I had figured that I needed a better growth engine instead of over-sharing on Facebook, so I spent the morning planning the new growth engine. Growth Hacking I term what I do in