Blog
Apify LinkedIn scraper actors versus a managed enrichment API, and the axes that actually differ
Apify sells LinkedIn scraper actors billed per result. Here is how that model differs from a managed enrichment API with provenance and a fixed lookup contract.
If you are weighing Apify against an enrichment API for LinkedIn data, the first thing to get straight is that they are not the same kind of product. Apify is a store of scraper actors you pick from and run. An enrichment API is one endpoint you call. That difference decides your billing, your output shape, and how much of the integration you own, so settle it before you compare anything per record.
A store of actors is not one product
Apify is a marketplace. Search its store for a LinkedIn profile scraper and you get several, each published by a different author, each with its own output fields and its own price. One listing, getanyapi’s LinkedIn Profile Scraper, quotes “from $2.70 / 1,000 results” and is “billed per result, plus one small fixed charge per run”, where “a result event is charged for every row it writes, and the Actor Start event is charged once when the run begins.” Another author lists the same job at a different rate. The store is the product surface, and the actor you choose is a third-party component inside it.
That model is a real strength when you need breadth. The same store has actors for jobs, posts, company pages, and search, so it covers far more of LinkedIn than two endpoints ever will. If your job is to scrape job listings or harvest posts, an actor is the right tool and an enrichment API is not.
It is also where the work lives. You choose an actor, you run it, you handle the run-start charge and the per-result billing, and when LinkedIn changes a page and that author’s actor breaks, you find another one. The output schema is whatever that author decided, so switching actors means remapping your fields.
The two models, side by side
| Axis | Apify actor | Enrichment API |
|---|---|---|
| What you pick | An actor from a store of many | One documented endpoint |
| What you send | A LinkedIn URL, to a run | An identifier, to a request |
| Output shape | Set by the actor’s author | Set by one published schema |
| Billing unit | Per result, plus a run-start charge | One credit per answered lookup |
| Provenance | Whatever the actor emits | Headers on every response |
| When the page changes | You find a working actor | The endpoint absorbs it |
The right-hand column is what a two-endpoint API such as Triguna is. You call
GET /v1/people/profile for the person API or
GET /v1/companies/details for the company API, and you get
structured JSON back against one schema that does not change author to author. There is no
search path and no jobs path, so it replaces profile and company enrichment and nothing else.
Be honest with yourself about that scope before you compare, the same way you would when
choosing among Proxycurl replacements.
Provenance you can audit, without a field in the body
Every enrichment response carries its origin in the headers. A real lookup looks like this:
$ curl -sD- -H "ApiKey: $KEY" \
"https://api.triguna.ai/v1/people/profile?profile_id=williamhgates"
HTTP/2 200
X-Data-Source: store
X-Fetched-At: 2026-09-10T09:14:22Z
X-Data-Age-Seconds: 372840
X-Credits-Charged: 1
X-Data-Source tells you whether the row was fetched live or served from a stored copy,
X-Fetched-At is the exact retrieval time, and X-Data-Age-Seconds is how stale it is.
Provenance lives in the headers, never as a "source" field in the body, so a fresh fetch
and a cached one carry the same audit trail. When someone asks in six months why a record
looked the way it did, that is a complete answer. An actor emits whatever its author chose,
and two actors rarely agree on how to say it.
A billing and retry contract you can predict
X-Credits-Charged is on every response, so the bill is a sum you can compute, not an
invoice you wait for. One credit per answered lookup. A 404 costs a credit, because searching
for an identifier that turns out to have no record is a real retrieval. A cache hit costs a
credit too, because it is the same data delivered faster. The statuses that cost nothing,
including 401, 402, 429, and 503, are fixed and documented, not per actor. The retry rule is
the same everywhere: retry 429, 502, and 503 with backoff, and never retry a 404, because a
retried 404 spends a credit every time. The whole schedule is on the
pricing page, and the reference detail is on
docs.triguna.ai.
With a store of actors, each of those answers depends on which actor you ran. The run-start charge, the per-result rate, and what a failed row costs are set by the author, so your cost model is only as stable as your actor choice.
How to choose
Pick the store when you need breadth and you are willing to own the runs: jobs, posts, search, employee lists, anything past a single profile or company record. Pick a managed enrichment API when your job is to turn an identifier into a person or company record on demand, and you want one schema, provenance on every call, and a fixed cost per lookup. Many teams end up using both, an actor for the wide scrapes and an API for the enrichment their product calls on every signup.
If you want to see which side fits, the five free credits on signup are enough to enrich a handful of records end to end and read the headers yourself. It is the same argument as build your own scraper or buy an enrichment API, narrowed to one vendor.
Next
- Person API and Company API, the two endpoints this compares.
- Proxycurl alternatives compared, if a scraper is one of several options you are weighing.
- Enrich on signup, to spend the free credits and read the provenance headers.
- Start on the free credits, no card required.