Profiles
Resolve a public LinkedIn profile URL or vanity slug to a typed person record.
The Profiles surface returns a typed Profile record — name, headline,
location, current and past roles, education, skills, certifications.
Every profile is captured through the end user's own LinkedIn
session via the LinkFetch Chrome extension; we
never hit a fake account on your behalf.
Get profile by URL or slug
The cache-first read. Returns the full structured profile. On a cache
miss the API returns 422 extension_required and the extension
captures the row from the user's signed-in tab; the next call hits the
cache and returns 200.
/v1/profiles5 creditsReads our cache. If the row isn't cached, returns 422 with a hint to run the LinkFetch Chrome extension on a signed-in tab — the extension will post the capture to /v1/profiles/ingest.
url and slug are interchangeable — supply whichever you have on
hand. Pass a full https://www.linkedin.com/in/<slug>/ URL or the bare
slug. The response includes the profile's entityUrn tail; keep it if
you plan to call profile-posts or post-reactions later.
Recent posts by profile
/v1/profiles/{slug}/posts3 creditsCache-first read off the per-user profile-posts cache. On miss the playground triggers the extension to fetch the dash-graphql `feedDashProfileUpdatesByMemberShareFeed` page on the user's signed-in tab, normalize, and POST to `/v1/profiles/{slug}/posts/ingest`. Each item carries `activity_id`, `ugc_post_urn`, reaction/comment/share counts, and `posted_at` derived from the activity-id snowflake.
Returns the most recent activity authored by the profile, paginated.
Pair with GET /v1/posts/:id to enrich each entry
with reaction counts and full body. Useful for warm-intro context and
"who has been talking about X" digests.
Ingest profile (extension write-path)
/v1/profiles/ingest5 creditsCalled by the LinkFetch Chrome extension after it captures a profile from a signed-in LinkedIn tab. Upserts the row and debits credits atomically. GDPR-suppressed slugs return 410.
urlstring<url> · in body · requiredCanonical linkedin.com/in/<slug> URL.
profileobject<Profile> · in body · requiredNormalised payload — see packages/shared/src/profile.ts.
fetched_atstring<ISO-8601> · in body · optionalWhen the extension captured the page. Defaults to now.
This endpoint isn’t directly callable — it’s invoked by the LinkFetch extension or another LinkFetch service. The shape above is documented so you can build matching integrations.
open in full playground →This route exists for the LinkFetch extension. It POSTs a freshly captured profile from the user's signed-in tab and the API normalises, caches, and debits credits atomically. You do not call this yourself — it's documented so you can build matching integrations or replicate the contract from a server-to-server pipeline if you have one of our enterprise plans.
Notes
- 5 credits per call regardless of profile size.
- Profiles cache for 30 days; pass
?fresh=trueto force a re-capture. - Suppressed profiles (under DSR) return
410 gonepermanently — including via the extension capture path.