The LinkedIn
data layer.
750M profiles, one schema.
Two entities — People and Companies — resolved into a stable, typed shape, with the fields cached datasets leave null. Read at request time. Query it directly, or stream it into your warehouse.
Edges is not related to LinkedIn and is not an official LinkedIn product.
Jane Doe
VP of Product · Acme Cloud · linkedin.com/in/jane-doe
- name
- "Jane Doe"
- headline
- "VP Product · Acme"
- location
- San Francisco, US
- connections
- 2,847int
- title
- "VP of Product"
- company.name
- "Acme Cloud"
- company.size
- "500–1k"
- tenure_months
- 28int
- experience[ ]
- 7 recordsRole[]
- education[ ]
- 2 recordsEdu[]
- skills[ ]
- 38 tagsstring[]
- activity[ ]
- last 30 daysPost[]
Profiles
750M
Companies
54M
// Entities
Two entities. Everything else derives from them.
People and Companies are the only records you model. Every one carries the same envelope, the same identifiers, the same nullability rules. Joins are first-class — a Company is an object on a Profile, not a key to chase.
People
750MIdentity, role, history and activity for every public LinkedIn profile.
- full_name, headline
- string
- location
- string
- job_title
- string
- experiences[ ]
- Experience[]
- education[ ]
- Education[]
- contact
- Contact
- activity[ ]
- Post[]
Companies
54MEvery company on LinkedIn — domain, exact employee count, funding, specialties.
- company_name, domain
- string
- size_range
- enum
- industries[ ]
- string[]
- headquarters
- string
- number_employees
- int
- last_funding_raised
- int
- affiliates[ ]
- Affiliate[]
Signals (built with Actions)
Schedule People/Companies extracts, diff live reads in your app, deliver via callbacks — no packaged events feed.
- job_title / experiences[ ]
- string / Experience[]
- number_employees
- int
- last_funding_*
- string / int
- run_uid / custom_data
- uuid / object
- callback results[ ]
- ActionResult[]
- GET /runs/{uid}/outputs
- poll
// Schema
The contract is the documentation.
Browse every entity and field, with types, nullability, and example values. Versioned with semver — breaking changes only on major bumps.
People
Profile
Role
Education
Activity
Companies
Signals
Engagement
Messaging
Profiletype Profile
A resolved LinkedIn member. Returned by linkedin-extract-people, linkedin-search-people and any signal whose subject is a person.
| Field | Type | Req. | Description |
|---|---|---|---|
| name | string | yes | Display name as written by the member. |
| headline | string | null | no | The bio line below the name. |
| location | string | yes | Display location, with profile_country alongside. |
| job_title | string | yes | Current role, parsed out with company_name and linkedin_company_id. |
| experiences | Experience[ ] | yes | Chronological, newest first. Empty array if hidden. |
| sales_navigator_profile_id | string | null | no | The SN identifier. Null only where the profile is unreachable. |
| number_connections | int | yes | Network size, alongside number_followers and connection_degree. |
// Coverage
Global coverage, refreshed continuously.
Resolution and freshness rates we report — not what we hope. Updated hourly on status-actions.edges.run.
Freshness, by source
How often each surface gets a fresh crawl. Hot rows update sooner.
- Profile basics
- re-resolved on read
- Current role
- hourly
- Experience history
- daily
- Company headcount
- weekly
- Job-change signals
- streaming · < 5 min
- Intent signals
- streaming · < 60 min
- Funding events
- streaming · < 30 min
The data, ready to query.
The same API key unlocks every entity, every endpoint. Start with a live enrich, stream a signals feed, or sync the schema into your warehouse.