Fresh LinkedIn data, in bulk, through one API.
Win with EasyData
EasyData turns identifiers into records. You send profile URLs, company URLs or post URNs; we scrape them live and hand back structured JSON.
There is nothing to configure. No proxies, no workers, no lists, no campaigns - the pool that answers your requests is ours to run.
Your first call
Everything is a batch, including a batch of one. You submit and you read its results - one shape, from a single profile to fifty thousand, with no ceiling to discover.
curl -X POST https://api.easydata.win/v1/profiles/enrich \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"targets": ["https://linkedin.com/in/satyanadella"]}'{
"data": {
"batch_id": "afec9131-080b-4b96-b3bb-726249e4bbf8",
"operation": "profiles.enrich",
"status": "queued",
"total": 1,
"recommended_poll_ms": 2000
},
"meta": { "requestId": "req_8f2ka91x" }
}Then read it, as many times as you like while it fills in:
curl "https://api.easydata.win/v1/batches/afec9131-080b-4b96-b3bb-726249e4bbf8/results" \
-H "X-API-Key: $API_KEY" When something is waiting on the answer, add /sync to the same path and send one target instead of a targets array: the record comes back in the response instead of from a poll, for twice the credits. Synchronous requests is the whole of it.
Authentication
One header, on every request.
X-API-Key: pk_live_... Base URL: https://api.easydata.win/v1
What a credit is
A direct fetch costs what it costs us
One credit per request we make to LinkedIn to answer you. A complete company record is one fetch, so it is 1. So is a profile. The optional sections of the detailed profile endpoint - follower and connection counts, and the full detail of every role - are the one place we charge less than the rule: each is a request and each is 0.5, because a section is an extra on a record you are already paying a credit for.
An answer you cannot wait for costs double
Every operation also answers one target at /sync, in the response rather than in a later poll. It outranks every queued batch for a worker and holds one open for the length of your request, which is the opposite of what makes the batch path cheap to run - so it is exactly twice the number above it, never a separate price.
A search row costs half
Sales Navigator hands us 100 rows per request, and the request is what you are billed for: 50 credits, which is those 100 stubs at the half credit a stub is worth. The request is the unit because the request is what we spend and what LinkedIn throttles, so a page that comes back short or empty costs the same as a full one. max_results rounds up to a whole request and you keep the overflow.
A failure costs nothing
A failed fetch produced nothing, so there is nothing to bill. This is not a separate promise bolted on top - it falls out of what a credit is.
What a credit costs
A credit is a unit of upstream work. What one costs in money falls with the size of the order - $3 per 1,000 credits at 10,000, down to $1 per 1,000 at 1,000,000.
The full ladder, with worked examples
All operations
Profiles
A profile URL, a public identifier, a member URN or a Sales Navigator slug - all four reach the same record.
| Method | Path | Credits | Why |
|---|---|---|---|
| POST | /v1/profiles/enrich | 1 2 at /sync | one profile fetch |
| POST | /v1/profiles/enrich/detailed | 1 2 at /sync | one profile fetch, plus one per section you asked for at half each |
| POST | /v1/profiles/activity | 4 8 at /sync | 1 profile + posts and reposts + comments + reactions, 100 of each |
| POST | /v1/profiles/posts | 2 4 at /sync | 1 profile + 1 feed |
| POST | /v1/profiles/comments | 2 4 at /sync | 1 profile + 1 feed |
| POST | /v1/profiles/reactions | 2 4 at /sync | 1 profile + 1 feed |
Companies
A company URL, a universal name or a numeric id - all three reach the same record.
| Method | Path | Credits | Why |
|---|---|---|---|
| POST | /v1/companies/enrich | 1 2 at /sync | one request to LinkedIn, whichever identifier you send |
Sales Navigator
Paste a Sales Navigator search URL and a max_results. We paginate it. We do not build the query, resolve facet ids or guess what you meant - with one exception: hand the people search a list of companies and we will chunk it into as many searches as the filter needs.
| Method | Path | Credits | Why |
|---|---|---|---|
| POST | /v1/sales/search/people | 50 100 at /sync | a request brings 100 stubs, and a stub is worth half a record |
| POST | /v1/sales/search/employees | 50 100 at /sync | a request brings 100 stubs, and every chunk is at least one request |
| POST | /v1/sales/search/companies | 50 100 at /sync | a request brings 100 stubs, and a stub is worth half a record |
| POST | /v1/sales/search/deep | 50 100 at /sync | a count is one request and a page is one request |
Batches
Everything is a batch, including a batch of one. Results stream: you can read them while the batch is still processing.
| Method | Path | Credits | Why |
|---|---|---|---|
| POST | /v1/batches/{id}/approve | free | |
| GET | /v1/batches | free | |
| GET | /v1/batches/{id} | free | |
| GET | /v1/batches/{id}/results | free | |
| POST | /v1/batches/{id}/cancel | free |
Account
What you have left, what you spent, and where completions go.
| Method | Path | Credits | Why |
|---|---|---|---|
| GET | /v1/account | free | |
| PATCH | /v1/account | free | |
| GET | /v1/usage | free |
Guides
- QuickstartYour first batch, submitted and read, in two calls.
- SDKs and toolsOfficial clients for Python, TypeScript and Go, and an MCP server for agents.
- AuthenticationOne header, on every request - plus scopes and expiry, so a leaked key is bounded.
- What a credit isOne rule, and every price on this site derived from it.
- The batch modelEverything is a batch, including a batch of one.
- Streaming resultsThe same cursor over a held connection, for a client that cannot receive a webhook.
- Synchronous requestsOne entity, answered in the response, at twice the price.
- ErrorsOne envelope, a fixed vocabulary, and one promise about billing.
- Rate limitsFour ceilings, the headers that report them, and how to back off.
- Finding email addressesSet find_emails and every person you scrape comes back with a work email address beside them, for a flat +4.
- WebhooksSix events - started, each row, completed, failed, and two about credits - signed two ways and retried with backoff.
Schemas
One page per record, field by field - what it is, and what it is not.
- ProfileA person, as profiles/enrich returns them. The sample below is the fullest form - what profiles/enrich/detailed returns with every section ticked - because this page lists what the record can carry; the two counts, six of the position fields, skill_details, interests and recommendations each cost a section and are absent without one.
- MonthDayMonth and day of birth, nothing else. LinkedIn never returns a birth year, so this is the whole fact rather than a partial date - contrast with PartialDate, which does carry a year.
- CertificationOne certification or licence the member added.
- LanguageOne language the member listed, and how well.
- SkillOne skill as the profile's skills SECTION carries it, which is the flat skills list plus the two things that make it worth buying: who endorsed it and what the member attached it to.
- InterestOne thing a member follows. All five categories render as the same row on LinkedIn, which is why category is the field that tells them apart.
- RecommendationOne written recommendation. Which way round it runs is the fact about it, so direction and name are read together: name is always the OTHER person.
- ProfileStubA person as a Sales Navigator search card describes them.
- CompanyA company, as companies/enrich returns it.
- CompanyStubA company as briefly as we know it: a search card, or a company another company names.
- EmailFindingsA work email lookup for one person. An object rather than a bare string, because an address is the end of a process that can succeed, half-succeed, honestly fail, or never have started.
- EmailCandidateOne address that was generated and put to the mail server.
- PositionOne role at one company.
- EducationOne school.
- PartialDateA date LinkedIn only partly knows.
- AddressA company's headquarters, component by component.
- LocationOne of a company's offices, with the group LinkedIn files it under.
- SearchPageThe data of one Sales Navigator result entry: one upstream page.
- PaginationWhere one page of a search stands.
- BatchA submission and its progress.
- BatchResultEntryOne delivered result.
- AccountYour allowance, credit balance, limits and callback settings.
- UsageA rollup by day and operation.
- ErrorThe failure envelope. Every failure, without exception.
- MetaThe second half of every success envelope. camelCase, where data is snake_case.
- ProfileActivityThe three activity kinds in one record: posts and reposts, comments and reactions. profiles.posts, profiles.comments and profiles.reactions each return this same shape, with the other two arrays absent.
- ActivityPartialWhich kinds were requested and could not be read.
- PostA post or repost, as profiles.posts and profiles.activity return it. posts.enrich returns this same record by URL or bare urn, with comments included.
- PostCommentA comment on a post, with its author.
- PostAuthorA feed actor is these four fields.
- PostMediaOne image, video or document attached to a post.
- PostArticleThe link preview on a post that shares an external article.
- PostMentionOne person or company @mentioned in a post.
- ReactionCountOne reaction type and its tally, from the breakdown behind reaction_count.
- ActivityCommentOne comment and the post it was left on.
- ActivityReactionOne reaction and the post it was left on.
- ActivityTargetPostThe post a comment or reaction was left on, as a stub.
Machine-readable
- OpenAPI 3.1The spec every reference page is generated from.
- llms.txtFor AI assistants and editors.
One email, and we size it with you
The rate per 1,000 credits is published; the allowance, the rate limits and the key are not self-serve. Tell us roughly what you want to run and we size it with you in one reply.
- Which operations
Profiles, companies, posts, Sales Navigator searches - whichever ones you will actually call.
- How many records a month
A rough ceiling is enough. One credit is one request to LinkedIn, so the two convert.
- How you want results
Polled from the results cursor, delivered to a webhook, or both.