LinkedIn Profile Scraper API
Get job, company and education details from LinkedIn profile URLs, from your AI assistant, no-code workflow or own code.
- From $0.014 per Profile
- No LinkedIn Login Needed
- 10,000 Profiles per Task
| LinkedIn profile URL |
|---|
| linkedin.com/in/maya-lindqvist |
| linkedin.com/in/tom-okafor |
| linkedin.com/in/lea-moreau |
Trusted by 38,000+ users at startups and Fortune 500 teams
Works with any tool that can send HTTP requests
Claude
Cursor
Codex
Make
n8n
Zapier
- Your own code
Pick Your Way In
Let an AI assistant or your automation tool do the setup, or call the REST API from your own code.
Paste the setup prompt
Copy the prompt for Claude Code, Codex or Cursor, or for Make, n8n or Zapier, and paste it in. The AI creates a Datablist folder on your computer and sets everything up.
Paste your API key
When the AI asks, copy your API key from the Datablist app and paste it into the .env file it opened. Never paste it into the chat.
Get your results
Send your list of LinkedIn profile URLs and get one row back per profile: name, headline, location, current job and company, ready for your sheet or CRM.
See a sample resultUsing Make, n8n or Zapier? Here is every field for the HTTP request
Use the HTTP request module or node your tool offers. You need three steps: send the list, wait, then read the results.
1. Send your list (HTTP request)
- Method
POST- URL
https://api.datablist.com/v1/enrichments/tasks- Headers
X-API-Key= your API keyContent-Type=application/json- Body (JSON)
- json{"enrichmentId": "linkedin-profile-scraper","uniqueId": "linkedin-profile-scraper-import-1","settings": {"experiencesNb": "3","educationsNb": "1"},"inputs": [{"inputId": "row-1", "data": {"profileUrl": "https://www.linkedin.com/in/maya-lindqvist/"}},{"inputId": "row-2", "data": {"profileUrl": "https://www.linkedin.com/in/tom-okafor/"}},{"inputId": "row-3", "data": {"profileUrl": "https://www.linkedin.com/in/lea-moreau/"}}]}
- Keep
- The
@idfrom the response. That is your task ID.
2. Wait until it is done
Add a short wait or delay, then a GET request to https://api.datablist.com/v1/enrichments/tasks/TASK_ID with the same X-API-Key header. Repeat until status is completed.
3. Read the results
GET https://api.datablist.com/v1/enrichments/tasks/TASK_ID/results?limit=50. Map outputs to your columns. If nextCursor is not empty, call again with &cursor= plus that value.
At a Glance
Fresh public profile data from a LinkedIn URL: who the person is, where they work and what they studied. No Datablist workspace, collection or import needed.
What you give it
- LinkedIn profile URLs: Standard profile links or Sales Navigator lead links
- How much history (optional): 3, 5 or 10 past jobs and 1, 3 or 5 schools
- Cached profiles (optional): Accept a recent saved copy to pay less
What you get back
- The person: Name, headline, summary, location, languages and connections
- The current job: Title, start date, company, company website, industry and size
- Past jobs and education: As many as you asked for
What it costs
- Fresh profile: 25 credits per profile
- Cached profile: 20 credits when you accept a saved copy
- 1,000 credits = $1: Shared with the Datablist app
What Teams Build With It
Put LinkedIn Profile Scraper wherever your data already flows.
Research leads before outreach
- LinkedIn URL from a lead list
- Title, company, location
Pull the current role and company for every lead, so your sequence starts with the right person and a relevant first line.
Build candidate profiles
- Candidate LinkedIn URL
- Jobs and education in your ATS
Get past jobs and education for every candidate and keep your ATS or sheet up to date without copy and paste.
Spot job changes
- Contacts in the CRM
- New company flagged
Re-run your contacts and compare the current company with the CRM to catch champions who moved to a new account.
What Will It Cost You?
Pay per lookup with credits. API access starts on the Growth plan.
How much will it cost you?
Tell us how many LinkedIn profiles you need and we'll show you the cheapest way to get them.
= 25,000 credits at 25 credits per fresh profile
How credits work
1,000 credits = $1, so each credit costs a tenth of a cent. A fresh profile costs 25 credits and a cached profile 20 credits. A profile that cannot be found may still cost credits, because the lookup work was done. Every result returns creditsUsed, so you can track the real cost per row. Plan credits renew monthly and reset if unused. Top-up credits never expire.
Build It Into Your Code
Everything you need to call the REST API directly: code, responses, endpoints, fields, authentication and limits.
datablist/linkedin-profile-scraper-api
Official examples: cURL, Python with Requests or async HTTPX, and TypeScript. Put your key in DATABLIST_API_KEY and run.
Copy, Paste, Run
A complete script that creates a task, waits for it and prints every result. Replace YOUR_PERSONAL_API_KEY with your key.
# 1. Create the task (returns 202 Accepted and the task "@id")
curl --request POST 'https://api.datablist.com/v1/enrichments/tasks' \
--header 'X-API-Key: YOUR_PERSONAL_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"enrichmentId": "linkedin-profile-scraper",
"uniqueId": "linkedin-profile-scraper-import-1",
"settings": {
"experiencesNb": "3",
"educationsNb": "1"
},
"inputs": [
{"inputId": "row-1", "data": {"profileUrl": "https://www.linkedin.com/in/maya-lindqvist/"}},
{"inputId": "row-2", "data": {"profileUrl": "https://www.linkedin.com/in/tom-okafor/"}},
{"inputId": "row-3", "data": {"profileUrl": "https://www.linkedin.com/in/lea-moreau/"}}
]
}'
# 2. Poll every few seconds until status is completed, failed or stopped
curl 'https://api.datablist.com/v1/enrichments/tasks/TASK_ID' \
--header 'X-API-Key: YOUR_PERSONAL_API_KEY'
# 3. Read the results, then follow nextCursor until it is null
curl 'https://api.datablist.com/v1/enrichments/tasks/TASK_ID/results?limit=50' \
--header 'X-API-Key: YOUR_PERSONAL_API_KEY'What the API Returns
One result per input, with your inputId, a status, the outputs and the credits used. Sample data.
{
"taskId": "00000000000040008000000000000001",
"results": [
{
"inputId": "row-1",
"status": "success",
"outputs": {
"profileUrl": "https://www.linkedin.com/in/maya-lindqvist/",
"firstName": "Maya",
"lastName": "Lindqvist",
"fullName": "Maya Lindqvist",
"linkedInHeadline": "Head of Sales at Brightwave Analytics",
"linkedInCity": "Stockholm",
"linkedInCountryCode": "SE",
"linkedInLocation": "Stockholm, Sweden",
"linkedInlastExpTitle": "Head of Sales",
"linkedInlastExpStartsAt": "2023-02-01",
"linkedInlastExpCompany": "Brightwave Analytics",
"linkedInlastExpCompanyWebsite": "https://www.brightwaveanalytics.com",
"linkedInlastExpCompanyIndustry": "Software Development",
"linkedInlastExpCompanyRange": "51-200",
"linkedInlastEduSchool": "Example University",
"linkedInLanguages": "English, Swedish",
"linkedInConnections": "500"
},
"creditsUsed": "25",
"error": null
}
],
"nextCursor": null
}Endpoints and Fields
All paths are relative to https://api.datablist.com. Field definitions come from GET /v1/enrichments/linkedin-profile-scraper (docs updated Oct 21, 2026). Schema version: 2026-09-12.
View API schema (JSON) (opens in a new tab)
- /v1/enrichments/linkedin-profile-scraper
- Read the schema, no key needed
- POST
- /v1/enrichments/tasks
- Create a task
- /v1/enrichments/tasks/{taskId}
- Poll status and progress
- /v1/enrichments/tasks/{taskId}/results
- Read results, 1 to 100 per page
- POST
- /v1/enrichments/tasks/{taskId}/stop
- Cancel a running task
- /v1/enrichments/tasks
- Task history, newest first
Schema Reference
Send settings once per task and one data object per input. Results can include extra fields as the enrichment evolves, so keep unknown keys when you parse outputs.
Show all settings, inputs and outputs
Settings
includeUrnInclude LinkedIn Internal ID (URN) | Boolean | Include the LinkedIn internal identifier (URN), for example: ACoAAAIJflYBlveEKEKWvVsjTP4QeXHK8KfcKHg. This ID can be used to build Sales Navigator URLs, like https://www.linkedin.com/sales/lead/XXXX. Enabled when: |
|---|---|---|
includePicturesInclude Pictures | Boolean | Include the LinkedIn profile picture and the company logo URL. ⚠️ These URLs expire fast. Download the images to avoid broken links. Enabled when: |
acceptCachedProfilesAccept cached profiles | Boolean | Default behavior is to fetch fresh LinkedIn profile data. Enable this option to use cached profiles when available. Cached profiles cost 20 credits per profile. Enabled when: |
experiencesNbExperiences to return | Text | How many work experiences to return. Default to 3.Allowed values: |
educationsNbEducations to return | Text | How many educations to return. Default to 1.Allowed values: |
Inputs (data)
profileUrlrequiredPerson's LinkedIn Profile | Text | LinkedIn Profile Identifier. Works with standard profile URLs (https://linkedin.com/in/xxx) and Sales Navigator URLs (https://www.linkedin.com/sales/lead/xxxx). |
|---|
Outputs
linkedInInternalIdentifierLinkedIn Internal ID (URN) | Text | The unique internal LinkedIn identifier (URN). Example: ACoAAAIJflYBlveEKEKWvVsjTP4QeXHK8KfcKHg. Use it to build Sales Navigator URLs like https://www.linkedin.com/sales/lead/XXXX. Enabled when: |
|---|---|---|
profileUrlLinkedIn Profile URL Normalized | Text | The clean and standardized LinkedIn Public Profile URL. In the format: https://www.linkedin.com/in/xxxFormat: |
firstNameFirst Name | Text | The first name of the profile |
lastNameLast Name | Text | The last name of the profile |
fullNameFull Name | Text | The full name of the profile |
linkedInHeadlineHeadline | Text | The tagline on the user profile. |
linkedInSummarySummary | Text | A blurb (longer than the tagline) written by the user for his profile. |
linkedInCityCity | Text | The city of the profile |
linkedInStateState | Text | The state of the profile |
linkedInCountryCodeCountry | Text | The country code of the profile. 2-letter country code (ISO 3166-1 alpha-2). |
linkedInCountryNameCountry Name | Text | The profile's country of residence, in English words. |
linkedInLocationLocation | Text | Full Location text |
linkedInProfilePictureLinkedIn Profile Picture | Text | These URLs expire fast. Download the images to avoid broken links. Enabled when: |
linkedInlastExpTitleTitle (Current or last experience) | Text | The title of the current (or last) experience |
linkedInlastExpEmploymentTypeEmployment Type (Current or last experience) | Text | The employment type of the current (or last) experience. |
linkedInlastExpDescriptionDescription (Current or last experience) | Text | The description of the current (or last) experience |
linkedInlastExpStartsAtStart Date (Current or last experience) | Text | The start date of the current (or last) experience.Format: |
linkedInlastExpEndsAtEnd date (Current or last experience) | Text | The end date of the last experience. None if still active.Format: |
linkedInlastExpLocationLocation (Current or last experience) | Text | The location of the current (or last) experience |
linkedInlastExpCompanyCompany Name (Current or last experience) | Text | The company name of the current (or last) experience. |
linkedInlastExpCompanyPageCompany page URL (Current or last experience) | Text | LinkedIn company's profile URL of the current (or last) experience. |
linkedInlastExpCompanyWebsiteCompany website (Current or last experience) | Text | Company Website of the current (or last) experience. |
linkedInlastExpCompanyDescriptionCompany description (Current or last experience) | Text | The company description from the LinkedIn company page of the current or last experience. |
linkedInlastExpCompanyIndustryCompany Industry (Current or last experience) | Text | Company Industry of the current (or last) experience. |
linkedInlastExpCompanyRangeCompany employee range (Current or last experience) | Text | Size of the company. In the form: 1, 2-10, 11-50, etc. |
linkedInlastExpCompanyLogoCompany Logo (Current or last experience) | Text | These URLs expire fast. Download the images to avoid broken links. Enabled when: |
linkedIn2ExpTitleTitle (Experience #2) | Text | The title from the second most recent work experience. If available. |
linkedIn2ExpEmploymentTypeEmployment Type (Experience #2) | Text | The employment type from the second most recent work experience. If available. |
linkedIn2ExpDescriptionDescription (Experience #2) | Text | The description from the second most recent work experience. If available. |
linkedIn2ExpStartsAtStart Date (Experience #2) | Text | The start date from the second most recent work experience. If available.Format: |
linkedIn2ExpEndsAtEnd date (Experience #2) | Text | The end date from the second most recent work experience. If available.Format: |
linkedIn2ExpCompanyNameCompany Name (Experience #2) | Text | The company name from the second most recent work experience. If available. |
linkedIn2ExpLogoCompany Logo (Experience #2) | Text | These URLs expire fast. Download the images to avoid broken links. Enabled when: |
linkedIn3ExpTitleTitle (Experience #3) | Text | The title from the third most recent work experience. If available. |
linkedIn3ExpEmploymentTypeEmployment Type (Experience #3) | Text | The employment type from the third most recent work experience. If available. |
linkedIn3ExpDescriptionDescription (Experience #3) | Text | The description from the third most recent work experience. If available. |
linkedIn3ExpStartsAtStart Date (Experience #3) | Text | The start date from the third most recent work experience. If available.Format: |
linkedIn3ExpEndsAtEnd date (Experience #3) | Text | The end date from the third most recent work experience. If available.Format: |
linkedIn3ExpCompanyNameCompany Name (Experience #3) | Text | The company name from the third most recent work experience. If available. |
linkedIn3ExpLogoCompany Logo (Experience #3) | Text | These URLs expire fast. Download the images to avoid broken links. Enabled when: |
linkedInlastEduSchoolSchool (Current or last education) | Text | The school name of the current (or last) education |
linkedInlastEduDegreeDegree (Current or last education) | Text | The degree of the current (or last) education |
linkedInlastEduFieldField of Study (Current or last education) | Text | The field of study of the current (or last) education |
linkedInlastEduStartsAtStart Date (Current or last education) | Text | The start date of the current (or last) educationFormat: |
linkedInlastEduEndsAtEnd date (Current or last education) | Text | The end date of the current (or last) educationFormat: |
linkedInlastEduLogoLogo URL (Current or last education) | Text | These URLs expire fast. Download the images to avoid broken links. Enabled when: |
linkedInSkillsSkills | Text | Comma-separated list of skills listed on the LinkedIn profile. |
linkedInLanguagesLanguages | Text | Comma-separated list of spoken languages of the LinkedIn profile. |
linkedInConnectionsConnections | Text | The number of connections of the profile |
One Header, Clear Limits
Create a Personal API Key in your Datablist account and send it on every authenticated request.
Authentication
Send your key in the X-API-Key header. Datablist exchanges and renews access tokens for you.
- Header:
X-API-Key: YOUR_PERSONAL_API_KEY - Optional: manage tokens yourself with
Authorization: BearerfromPOST /v1/account/token - One or the other: sending both headers returns
400 AmbiguousCredentials - Server side only: keep keys out of URLs, browser code and logs
Limits
- Inputs per task: 1 to 10,000
- Size: 16 KiB per input, 10 MiB per request
- Run time: up to 24 hours per task
- Task creation: 10 requests per 60 seconds per account
- Polling and results: 120 requests per 60 seconds per operation
- Active tasks: about 20 at once per account
- Retention: tasks and results are kept for 90 days
Frequently Asked Questions
Everything you or your AI coding agent need to integrate the LinkedIn Profile Scraper API: auth, request, polling, results, limits and retries.


