Migrating from Proxycurl to Veezee

Background

Proxycurl shut down its LinkedIn API in July 2025 to comply with a legal settlement, after LinkedIn sued its operator in January 2025 (announcement: nubela.co/blog/goodbye-proxycurl/; docket: LinkedIn Corp. v. Nubela Pte. Ltd., 3:25-cv-00828, N.D. Cal.). Production integrations built on it need a replacement. This guide maps each historical Proxycurl endpoint to the closest Veezee equivalent and says plainly where none exists. Proxycurl route details come from the archived public docs (web.archive.org snapshot of nubela.co/proxycurl/docs, June 2025) and the official public Postman collection; nothing here is guessed.

Veezee is an agent-first LinkedIn data API: seven tools over MCP (https://mcp.veezee.io/mcp) and REST (https://api.veezee.io, contract at /openapi.json), credit-priced, with a free 500 credits trial via one provision call and no signup.

Endpoint map

Proxycurl (historical)VeezeeMigration notes
Person Profile GET /api/v2/linkedinget_profile GET /v1/profilesProxycurl took linkedin_profile_url plus include/exclude extras. Veezee takes identifier (URL, slug, or URN) and sections (about, experience, education, skills). Response fields are not drop-in compatible; plan a mapping pass.
Company Profile GET /api/linkedin/companyget_company GET /v1/companiesidentifier accepts a company URL, slug, numeric id, or website domain.
Company Lookup GET /api/linkedin/company/resolveget_company with the domainPass the website domain as identifier; Veezee resolves it and verifies the result against the company's own website. The first lookup of a new domain adds 4 credits; known domains settle at the base price. An unverifiable domain returns INVALID_INPUT with the closest matches, never a guessed company.
Person Search GET /api/v2/search/person/search_people GET /v1/peopleProxycurl used Boolean query-string filters. Veezee uses typed params: keywords, first_name, last_name, title, school, current_company, past_company. Matching behavior differs; re-test your queries.
Company Search GET /api/v2/search/companyno standalone equivalentVeezee has no company-search tool in v1. With a domain in hand use get_company directly; inside people searches the company filters accept plain names and resolve internally.
Employee Listing GET /api/linkedin/company/employees/search_people with current_companyA search, not an exhaustive roster; enrich selected results with get_profile.
Employee Search GET /api/linkedin/company/employee/search/search_peopleReplace keyword_regex/country with title and keyword filters; regex matching is not supported.
Person Lookup GET /api/linkedin/profile/resolvesearch_people, then get_profileNo one-result resolver; search, pick the right hit, enrich it.
Role Lookup GET /api/find/company/role/search_people with title + current_companyProxycurl returned a single closest match; Veezee returns candidates for you to pick from.
Employee Count GET /api/linkedin/company/employees/countget_company employee_count fieldNo current/past split and no historical at_date query.
Person posts (served as activities/articles fields of the profile response; no standalone endpoint existed)get_posts GET /v1/postsOne dedicated tool for person or company posts, cursor-paginated.
Company updates field of the company responseget_posts with the company identifier
Credit Balance GET /api/credit-balanceget_usage GET /v1/usageFree and exempt from the per-minute rate limit.
Contact API (personal email, work email, phone, reverse email, reverse phone, disposable-email check)noneVeezee serves no contact-detail lookups, and get_profile does not return emails or phone numbers.
Jobs API, School API, student listings, profile-picture endpointsnoneOutside Veezee's v1 scope.

What you must rework, honestly

Five-minute start

Provision a trial key (no signup, no card, 500 credits free):

curl -X POST https://api.veezee.io/v1/provision

Store the returned api_key (shown exactly once), then make one enriched profile call:

curl "https://api.veezee.io/v1/profiles?identifier=williamhgates&sections=experience,education" \
  -H "Authorization: Bearer $VEEZEE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

identifier also accepts a full LinkedIn URL. Check spend anytime with GET /v1/usage (free). Before provisioning at all, a keyless taste of 20 credits per IP per day serves cached data with no key and no Idempotency-Key.

Pricing model

Both products price in credits, but the units are unrelated; never convert a balance one to one. Proxycurl varied cost by endpoint, results returned, and optional enrichment flags (archived docs). Veezee prices per call: 4 credits per profile (each section beyond the included two adds 2 credits), 10 credits per search page, 4 credits per company (4 credits more on the first lookup of a new domain), 4 credits per posts page, 2 credits per URL resolution. Realtime fetches add 2 credits, refunded automatically on cached fallback. Full table and worked examples: /pricing.

Sources