All articles
EngineeringData Enrichment

LinkedIn Data Enrichment: What We Learned from 50 Profiles

Our LinkedIn data enrichment benchmark compares Exa, Bright Data and Seltz on 50 profiles, with identity checks, career history and historical API costs.

Aashish8 min read
On this page

LinkedIn data enrichment adds information to an existing contact record, such as a current role, previous employers, or education dates. For teams researching possible warm introductions, those dates help assess whether two people shared an employer or school at the same time.

In our September 2026 saved benchmark, Exa's /contents lookup recovered 47 of 50 known profiles and the most labeled career and education history. It also had the lowest recorded API cost per recovered profile among the five configurations below. That made it our choice for this workflow, with known LinkedIn URLs as inputs.

The useful lesson for teams choosing an enrichment API: test the fields your workflow needs, and distinguish finding a profile from recovering usable history.

What we needed from LinkedIn data enrichment

A LinkedIn connection export gave us names, profile URLs, companies, and positions. Our work on Warm Intros needed more context: previous jobs and schools, with dates that could support a possible introduction path.

Consider a hypothetical pair of contacts who both worked at the same firm. If one left in 2018 and the other joined in 2023, the employer match alone says little about their familiarity.

Even overlapping dates don't prove that two people know each other. We use history as evidence to review, while a relationship map records what someone on the team can confirm.

That requirement shaped our evaluation. A response containing the right name was only the start.

How we tested 50 profiles

We sampled 50 connections from one member's network and collected vendor responses on September 25, 2026. The connection export was dated September 23. We saved the responses so we could test extraction changes against the same source data.

Each tested configuration combined a vendor endpoint, its query settings, and our parser: the code that extracts fields from the response. We compared specific configurations because one vendor can expose different data through different endpoints.

For identity checks, we compared each candidate's LinkedIn profile identifier with the reference identifier. When a candidate lacked that identifier, its name and company had to match. A name-search result counted as recovered if any candidate passed this check, even when it wasn't the first result.

The export supplied reference titles and companies. We copied career and education labels from LinkedIn profiles for the human review. The history checks covered 114 school entries, 48 previous jobs, and 39 current-job start dates with a known month.

These are counts from our saved benchmark. Vendor documentation describes the endpoints, but it does not substantiate our results.

Exa vs. Bright Data and Seltz: recovery and cost

Lookup with a known LinkedIn URL or identifier

These configurations started with a specific profile. Exa's Contents endpoint accepts URLs. Bright Data provides separate APIs for asynchronous scraping and filtering stored datasets.

Tested configurationCorrect profiles recoveredHistorical cost per recovered profile
Exa /contents, by LinkedIn URL47 of 50$0.00100
Bright Data live profile, by LinkedIn URL47 of 50$0.00150
Bright Data stored profile, by LinkedIn identifier46 of 50$0.00250

Exa and Bright Data live recovered the same number of identities. We needed the history checks below to distinguish their usefulness for our task.

Search with a name and company

Search had a harder starting point: it needed to find the target profile among candidates. Both configurations requested five results. We used Exa's people category and Seltz's people scope with its pro tier. Seltz's search documentation distinguishes the search scope from the ranking tier.

Tested configurationCorrect profiles recoveredHistorical cost per recovered profile
Exa people search, name and company31 of 50$0.01129
Seltz people search, pro tier, name and company33 of 50$0.00758

The evaluator already knew the reference LinkedIn identifier and used it to select a matching candidate. These results measure profile recovery among returned candidates. They don't establish how well an application could identify the right person when it has no reference URL.

What the cost column includes

We calculated cost per recovered profile by dividing the run's API cost by the number of correct profiles. Exa reported $0.047 for the URL run, so $0.047 divided by 47 gives $0.001 per recovered profile.

Exa's costs came from API responses. Bright Data and Seltz costs used the historical list prices recorded for the benchmark. The figures exclude application hosting, parsing, and human review, and they aren't current price quotes.

History coverage changed the decision

Our history checks used only the candidate that passed the identity check. A missing or unmatched profile therefore reduced history coverage too.

ConfigurationSchools foundPrevious job: both years correctCurrent job: start month and year correct
Exa URL lookup90 of 11432 of 4832 of 39
Bright Data live profile30 of 1140 of 480 of 39
Bright Data stored profile37 of 1149 of 488 of 39
Exa people search57 of 11419 of 4821 of 39
Seltz people search, pro, five results58 of 11426 of 4826 of 39

The school denominator counts labeled entries across the sample, not people or unique institutions. The previous-job check required the matching employer and both start and end years. The current-job check required the correct month and year.

Our tested Bright Data live configuration recovered identities but yielded no dated work history in our parsed output. That observation applies to this configuration and snapshot. It doesn't describe every Bright Data product or every possible parser.

Exa URL lookup gave us the strongest coverage for the fields our introduction workflow needed. A team seeking phone numbers would need a different evaluation.

Save the response before changing the parser

A missing field can originate in the source response or in the extraction code. Suppose a response contains the correct job title, but the parser reads a different section. Changing vendors would leave that extraction problem unexplained.

We separated collection from replay. Collection saved the vendor responses once. Replay applied a parser to those saved responses without another vendor request, which let us isolate the effect of an extraction change.

For your own LinkedIn profile enrichment evaluation:

  1. Choose contacts that represent your intended workflow and retain their reference identifiers.
  2. Label the fields you will actually use, including dates when overlap matters.
  3. Save the raw response, endpoint settings, collection date, and cost source.
  4. Check identity before scoring fields, then inspect whether missing data exists in the raw response.

This makes a parser change testable without treating a fresh vendor response as the same input.

What this benchmark cannot answer

Fifty people from one network cannot establish a universal vendor ranking. Results can change with geography, profession, profile visibility, query settings, and the parser. We report one saved September snapshot, without mixing in later runs that used different settings.

We didn't measure email deliverability, phone accuracy, successful introductions, or the quality of a downstream AI model's writing. We also didn't establish a speed ranking: some configurations used batch requests, while others used individual concurrent calls.

General web research requires separate questions and evidence. Our AI search API comparison covers that distinction. This profile benchmark supplies no Tavily or Coresignal performance results.

For an introduction, enriched history still needs a human check. Our warm introduction email templates explain how to confirm familiarity and ask permission before making the connection.

Frequently asked questions

Which API worked best for our LinkedIn data enrichment task?

Exa /contents worked best for our tested workflow with known LinkedIn URLs. It recovered 47 of 50 profiles and more labeled history than the other configurations shown. That finding applies to our September 2026 sample, rather than every enrichment task.

Does finding the right profile mean every field is correct?

No. Identity recovery confirms that a candidate matches the reference person. Each field needs its own check. Two configurations recovered 47 of 50 identities in our test, but their parsed career-history coverage differed substantially.

Should we evaluate cost per API call or per useful result?

Start with the result your workflow needs. Cost per recovered profile accounts for unsuccessful lookups, but a history-dependent workflow also needs field-level checks. Include parsing and review costs in your own budget, even though this benchmark reports API costs only.

Choose LinkedIn data enrichment around the evidence your team will use. To see how account research and possible introduction paths fit together in alkemy, explore the demo.

Put the ideas to work.

Explore how alkemy helps you research accounts and prepare your next client conversation.

Explore alkemy