Fiber AI
LinkedIn data

Live Fetch

Fetch a LinkedIn profile or company as it stands right now, by whatever identifier you happen to hold.

Live Fetch

Live Fetch returns a LinkedIn profile or company as it stands right now, rather than the version already in our index. Use it when the answer has to be current: verifying a lead before an email goes out, hydrating a record when a user opens it, or re-checking a company before a deal review.

Live Fetch returns profile and company data — roles, education, headcount, and the rest. It does not return emails or phone numbers. For those, use Contact Reveal.

Identifiers we accept

You don't have to normalize your input first. Both endpoints accept several identifier formats.

For a person — profileLiveEnrich

Pass it as identifier:

KindExample
LinkedIn slugwilliamhgates
Full LinkedIn URLhttps://www.linkedin.com/in/williamhgates/
Sales Navigator URNACwAAAjNR6wBsr_od4UG9Y-HRxg21mwhv5xO0FE
Numeric LinkedIn user ID443105112

One field, four formats, no type discriminator to set — so a CRM column mixing profile URLs and bare slugs can go straight in.

For a company — companyLiveEnrich

Companies take a type and a value, so you tell us which kind you're sending:

typevalue example
slugmicrosoft
liUrlhttps://www.linkedin.com/company/microsoft
orgId1441

The value field also accepts a Fiber company ID (comp_1441) if you're round-tripping an ID from an earlier response.

Asking for more depth

Both endpoints take optional flags that widen the response. They cost nothing extra — they just take longer, so turn them on only when you'll use the data.

FlagEndpointWhat you get
getDetailedEducationProfileEach school's LinkedIn URL, website, and location, in a detailedEducation array
getDetailedWorkExperienceProfileEach employer's LinkedIn URL, website, and location, in a detailedWorkExperience array
getHistoricalHeadcountCompanyTotal headcount over time and recent growth trends

getHistoricalHeadcount gives you company-wide totals through time. If you want the breakdown by department rather than the total, use the Depth Chart endpoints instead.

When a record isn't there

Profiles answer with a found discriminator, so you branch on one field rather than parsing an error. Companies return 404 when nothing matches.

Either way, check isCached404: it means the record is no longer reachable on LinkedIn, but we still hold data for it, and that data is what you got back.

Batches of up to 10,000

For volume, start a job and poll it.

  1. startBatchLiveEnrich — send type (PROFILE or COMPANY) and up to 10,000 identifiers, in any of the formats above. You get back a taskId.
  2. pollBatchLiveEnrich — pass the taskId and page through results, up to 100 per page (take), following nextCursor until it comes back null.

One type per batch: a profile job takes profile identifiers, a company job takes company identifiers.

Your input is reconciled up front. The start response accounts for every identifier you sent:

numIdentifiersEnqueued + numDuplicatesSkipped + numMalformed = your input length

Duplicates are dropped before enrichment, so submitting the same profile twice doesn't charge you twice.

Each polled result carries its own status:

StatusMeaning
COMPLETEDEnriched — profile or company is populated
NOT_FOUNDThe identifier is valid but nothing matched
FAILEDEnrichment errored for this item
MALFORMEDWe couldn't parse the identifier you sent

The progress object counts every state (pending included) against total, so you can render progress without a separate query. The job's own status moves PENDINGPROCESSINGCOMPLETED or FAILED, and completedAt is set when it lands.

Results come back in the order you submitted them, not the order they finished. A fast profile and a slow one keep their original positions, so don't read the ordering as completion time.

Using it effectively

  • Use Live Fetch when the answer has to be current; use search or Kitchen Sink when indexed data will do. Live Fetch costs more per record.
  • Leave the depth flags off unless you read the fields they add — they slow the call.
  • Single-call rate limit is 600 requests/minute; allow around 30 seconds per call before timing out.
  • Above a few hundred identifiers, use the batch endpoints rather than fanning out single calls: you get the duplicate and malformed accounting with them.
  • Handle MALFORMED separately from NOT_FOUND. The first is a bug in your input; the second is a fact about the world.

Use cases

  • Pre-send verification: confirm someone still holds the role your sequence assumes before the email goes out.
  • CRM hydration: turn a column of mixed LinkedIn URLs and slugs into full records in one batch.
  • Deal review: pull a company with getHistoricalHeadcount to see whether growth held up since you last looked.
  • On-demand profile views: fetch when a user opens a record, so what they're looking at is what's live.

Cost

2 credits per profile or company fetched, on both the single and batch endpoints.

A record we determine isn't on LinkedIn counts as a fetch: we did the work, and you often still get cached data back (that's what isCached404 is telling you). A call that fails because Live Fetch itself was unavailable is not charged — you'll see a cached response with advice to retry, and no credit spent.

The chargeInfo on each response is what you were actually charged. See Billing & credits.

  • Contact Reveal — emails and phone numbers, which Live Fetch doesn't return.
  • Kitchen Sink — lookups by email, name plus domain, and other messier identifiers.
  • Search — find records when you don't already have an identifier.
  • Tracker — get told when something changes, instead of re-fetching to check.

On this page