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.

The Triguna team 14 September 2026

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

AxisApify actorEnrichment API
What you pickAn actor from a store of manyOne documented endpoint
What you sendA LinkedIn URL, to a runAn identifier, to a request
Output shapeSet by the actor’s authorSet by one published schema
Billing unitPer result, plus a run-start chargeOne credit per answered lookup
ProvenanceWhatever the actor emitsHeaders on every response
When the page changesYou find a working actorThe 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

apifycomparisonenrichment

Start with one request

Free credits on signup, no card required. Usage-based pricing after that.