Data catalog · Proxycurl Migration

Proxycurl Company Profile Endpoint replacement

Proxycurl's Company Profile Endpoint took a LinkedIn company page URL and returned a company record. POST /enrich_company takes the same input. If your pipeline was passing a domain instead, read the section on that before you plan the work, because we cannot do domain-in company enrichment on a public endpoint today and that is the expensive part of this migration.

Try this live — 25 free credits

Last updated September 22, 2026

Company Profile, replaced, with one honest caveat

Proxycurl's Company Profile Endpoint is offline along with the rest of it. `POST /enrich_company` does the same job: LinkedIn company page URL in, company record out. **[Get 25 free credits — no card](https://app.richapi.ai)** The caveat is the first thing you should read, because it decides whether this migration is an afternoon or a sprint.

If you were passing a domain, this is not a swap

`/enrich_company` takes a LinkedIn **company page** URL. It does not accept a domain, and it does not accept a company name. Proxycurl let you hand over a website and get a company back, and plenty of pipelines were built on exactly that because domains are what a CRM and a signup form actually hold. We do not expose a public domain-to-company endpoint today. `company_enricher` is not in the live OpenAPI, so nothing on this site should tell you to call it. That means a domain-keyed pipeline needs a resolution step in front of this call that we do not hand you, and you should cost that in before you start. It is the single largest piece of real work in migrating off Proxycurl, and pretending otherwise would waste your week rather than your afternoon. If your records already carry LinkedIn company URLs, none of this applies and you can skip to the diff.

The before and after

```bash # Before (Proxycurl) — dead # GET https://nubela.co/proxycurl/api/linkedin/company?url=<company-url> # -H "Authorization: Bearer $PROXYCURL_KEY" # Proxycurl's public docs are offline. Confirm paths against your own archived client code before you migrate. # After (RichAPI) curl -X POST https://api.richapi.ai/api/v1/enrich_company \ -H "x-api-key: $RICHAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://www.linkedin.com/company/example/"}' ``` Same three mechanical changes as the person-side call: `POST` with a JSON body, `x-api-key` instead of a Bearer token, and the parameter is `url`.

Fields you get back

| Field | Type | What it holds | |---|---|---| | `name` | string | Company name | | `website` | string | Company website | | `description` | string | The About text | | `industry` | string | Industry as stated on the page | | `companySize` | string | Headcount band | | `headquarters` | string | HQ location | | `founded` | number | Year founded | | `followerCount` | number | LinkedIn followers | | `logo` | string | Logo image URL | | `specialties` | array | Listed specialties | | `linkedinUrl` | string | Canonical company page URL | Two shape differences worth flagging before you write the adapter. `companySize` comes back as a single string rather than a numeric range pair, so any code doing arithmetic on a lower and upper bound needs rewriting to parse or to bucket. And `specialties` uses the American spelling, where Proxycurl used `specialities`. That one is a silent null in production rather than a crash, which makes it worse. The live shape is at `https://api.richapi.ai/api/v1/openapi.json`. Map from that.

Migrate in four steps

**1. Sort your input column first.** Query your own table for how many company records hold a LinkedIn URL and how many hold only a domain. That number, not this page, tells you the size of the job. **2. Swap the call.** Host, method, auth header, and `url` in a JSON body. **3. Map the fields in one adapter.** One function that takes the response and returns your existing internal company object. Everything downstream stays untouched, and the `companySize` parse lives in exactly one place. **4. Diff against records you already have.** Run companies where you still hold the old Proxycurl payload and compare field by field. Coverage on your accounts is the only benchmark that matters, and it takes twenty minutes. To poke at the response before writing any of it, the [hosted MCP server](/integrations/claude) exposes `enrich_company` as a tool inside Claude or Cursor.

What a call costs, and when you pay

`1 credit` per call, flat. Prepaid credits, no seats and no contract, with the rate tiered by package size on [the pricing page](/pricing). **This is not a waterfall endpoint, and a 2xx is billed whatever it contains.** An obscure company page that comes back with three populated fields costs the same as a complete record. Zero-cost misses exist on our waterfall endpoints, [email finder](/api/email-finder) and [email verifier](/api/email-verifier) among them, and `/enrich_company` is not one of them. 4xx and 5xx cost nothing. Budget a bulk company backfill on the row count, not on the hit rate.

The receipt on the company profile endpoint

When a company record comes back thin, `execution_log` tells you which providers ran and what each returned, so you can tell whether the source had nothing or the routing sent it somewhere unhelpful. It beats filing a support ticket that says "the data is bad".

What people use the company profile endpoint for

**Firmographics on signup.** A new account arrives with a work email and a LinkedIn URL from your onboarding form. One call fills industry, headcount band and HQ before the record reaches your scoring rules. **Account research an agent can do itself.** Paired with [the employee listing endpoint](/api/proxycurl-employee-listing), an agent goes from a company page to the org chart to named people in one session, which is the whole pre-call research task. **Keeping a partner or vendor directory honest.** Company pages drift: renames, moves, headcount changes. A scheduled re-enrich over LinkedIn URLs you already store keeps the directory current without anyone maintaining it by hand.

The company profile endpoint FAQ

**Can I really not pass a domain?** Really not. `/enrich_company` takes a LinkedIn company page URL. We have no public domain-in company endpoint today, and anyone telling you to call `company_enricher` is quoting a path that is not in the live spec. **Then how do I get from a domain to a LinkedIn company URL?** Not with one RichAPI call today. That is a genuine gap and the honest answer is that you will be solving it yourself for now. If domains are your only key, weigh that before you commit to the migration. **What if I only have the company name?** Same gap. Company name to LinkedIn URL is not a single public call here today. **Am I charged for a company page that barely has any data on it?** Yes. Any 2xx bills on this endpoint. **How fresh is the record?** Fetched at request time, not served from a stored graph on a refresh cycle. That is also why we will not quote you an index size. **Do I need a credit card?** No. 25 free credits on signup.

Related

- [Proxycurl alternative: the full endpoint map](/alternatives/proxycurl) — every endpoint, in one table - [Person Profile Endpoint replacement](/api/proxycurl-person-profile-endpoint) — the person-side swap - [Employee Listing replacement](/api/proxycurl-employee-listing) — people at the company you just enriched - [Person Lookup by email replacement](/api/proxycurl-person-lookup-email) — the two-call chain - [All endpoints](/api) — the full catalog - [Pricing](/pricing) — credit packages and tier rates

Try the company profile endpoint: 25 free credits, no card

Check your input column, then run twenty companies and diff the output. **[Get 25 free credits](https://app.richapi.ai)**

Frequently asked.

What does proxycurl company profile endpoint replacement return?
Proxycurl's Company Profile Endpoint took a LinkedIn company page URL and returned a company record. POST /enrich_company takes the same input. If your pipeline was passing a domain instead, read the section on that before you plan the work, because we cannot do domain-in company enrichment on a public endpoint today and that is the expensive part of this migration.
How is this billed?
Every endpoint is billed from the same credit pool, at the published rate on /pricing — never a separate contract per endpoint.
Does this work over MCP as well as REST?
Yes — the same endpoint is reachable from an MCP client (Claude, ChatGPT, Cursor, Windsurf) using the same key and credit pool. See /mcp.

More Proxycurl Migration endpoints

See it in a workflow

Try it with 25 free credits.