
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Extract public LinkedIn profile details from profile URLs, public identifiers, or profile IDs: name, headline, location, about, follower counts, full experience, and education.
Public LinkedIn profiles, in bulk, without a browser or an account.
Built for recruiting, sales research, and CRM refresh jobs that already have profile URLs or public identifiers and need the fields a logged-out visitor can see.
queries, urls, publicIdentifiers, profileIds)K and M abbreviationsYou already have a list of people. This actor turns that list into structured public profiles fast enough to run on a schedule.
LinkedIn sometimes answers the same public URL with an authwall from one edge and the profile page from another. Each try uses a new residential session, and the next try uses another country, until the public profile page is what comes back. There is no browser and no account in the loop.
The run fails if any requested profile is missing. An authwall is not a stored profile. Invalid URLs are not profiles either.
The public page does not include an email address, and this actor does not add one. Older inputs that still send profileScraperMode keep working; the field is ignored.
{
"queries": [
"https://www.linkedin.com/in/williamhgates"
]
}
One item from a real run of the example input, shortened. Long text is cut and lists show their first entries.
{
"publicIdentifier": "williamhgates",
"linkedinUrl": "https://www.linkedin.com/in/williamhgates",
"firstName": "Bill",
"lastName": "Gates",
"headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
"about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger.",
"photo": "https://media.licdn.com/…",
"influencer": true,
"location": {
"linkedinText": "Seattle, Washington, United States"
},
"connectionsCount": 8,
"followerCount": 41000000,
"currentPosition": [
{
"companyName": "Gates Foundation"
},
{
"companyName": "Breakthrough Energy"
}
],
"experience": [
{
"position": "Co-chair",
"companyName": "Gates Foundation",
"companyLinkedinUrl": "https://www.linkedin.com/company/gates-foundation",
"companyUniversalName": "gates-foundation",
"duration": "26 years",
"startDate": {
"year": "…",
"text": "…"
},
"endDate": {
"text": "…"
}
},
{
"position": "Founder",
"companyName": "Breakthrough Energy",
"companyLinkedinUrl": "https://www.linkedin.com/company/breakthrough-energy",
"companyUniversalName": "breakthrough-energy",
"duration": "11 years",
"startDate": {
"year": "…",
"text": "…"
},
"endDate": {
"text": "…"
}
}
],
"education": [
{
"schoolName": "Harvard University",
"schoolLinkedinUrl": "https://www.linkedin.com/school/harvard-university",
"startDate": {
"year": "…",
"text": "…"
},
"endDate": {
"year": "…",
"text": "…"
},
"period": "1973 - 1975"
},
{
"schoolName": "Lakeside School",
"schoolLinkedinUrl": "https://www.linkedin.com/school/lakeside-school"
}
],
"moreProfiles": [
{
"firstName": "Melinda",
"lastName": "French Gates",
"position": "Pivotal",
"publicIdentifier": "melindagates",
"linkedinUrl": "https://www.linkedin.com/in/melindagates"
},
{
"firstName": "Tyler",
"lastName": "Alterman",
"position": "Fractal University",
"publicIdentifier": "tyleralterman",
"linkedinUrl": "https://www.linkedin.com/in/tyleralterman"
}
],
"query": {
"publicIdentifier": "williamhgates"
},
"status": 200,
"inputUrl": "https://www.linkedin.com/in/williamhgates"
}
| Field | What to send |
|---|---|
urls | Profile URLs only |
queries | Profile URLs or public identifiers, mixed in one list |
publicIdentifiers | The slug at the end of the profile URL, such as williamhgates |
profileIds | LinkedIn profile IDs such as ACoAAA8BYqEBCGLg_vT_ca6mMEqkpp9nVffJ3hc |
Send at least one of urls, queries, publicIdentifiers, or profileIds.
{
"queries": ["https://www.linkedin.com/in/williamhgates"]
}
One dataset item per target. Empty values are left off. A real false or 0 would stay; this page usually does not send those.
Present when the public page has them:
publicIdentifier, linkedinUrl, firstName, lastName, headline, about, photoinfluencer when the page shows the influencer badgelocation.linkedinTextfollowerCount, connectionsCount (a capped value such as 500+ is omitted)currentPosition[].companyNameexperience[]: position, companyName, companyLinkedinUrl, companyUniversalName, location, duration, description, startDate, endDateeducation[]: schoolName, schoolLinkedinUrl, degree, fieldOfStudy, startDate, endDate, periodmoreProfiles[]: firstName, lastName, position, publicIdentifier, linkedinUrlquery, status, inputUrlid and entityId only when the input itself was a profile IDfirstName and lastName are the public display name split on the first space. The page does not send them as separate fields.
Not on the public page, so not in the item: email, member id, registration date, Open to Work, hiring, premium, verified, skills, certifications, projects, volunteering, recommendations, courses, publications, patents, honors, languages, employment type, and workplace type. A profile ID is requested on the same public URL path as a slug. Nothing is invented when the page does not include a field.
If LinkedIn answers with the signup page from every edge, that profile is not written. An authwall is not a dataset row, and the profile is not invented. When every requested target ends that way, the run exits with code 1 and the dataset stays empty.
A failed target looks like this:
{
"inputUrl": "https://example.com/not-a-profile",
"error": "invalid_profile",
"errorDescription": "invalid_profile"
}
errorDescription is a status and code, or an exception type name.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
urlsarrayOptionalProfile URLs
List of LinkedIn profile URLs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs
queriesarrayOptionalTarget URLs
List of LinkedIn profile URLs or Public Identifiers (last part in the URL) to scrape.
publicIdentifiersarrayOptionalPublic Identifiers (last part in the URL)
List of LinkedIn Public Identifiers. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs
profileIdsarrayOptionalLinkedIn Profile IDs
List of LinkedIn profile IDs to scrape. Provide at least one of the 3 fields: URLs or Public Identifiers or Profile IDs
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | null | |
| publicIdentifier | string | null | |
| linkedinUrl | string | null | |
| firstName | string | null | |
| lastName | string | null | |
| headline | string | null | |
| about | string | null | |
| photo | string | null | |
| influencer | boolean | null | |
| location | object | null | |
| connectionsCount | number | null | |
| followerCount | number | null | |
| currentPosition | array | |
| experience | array | |
| education | array | |
| moreProfiles | array | |
| query | object | null | |
| status | number | null | |
| entityId | string | null | |
| inputUrl | string | null | |
| error | string | null | |
| errorDescription | string | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Data Dome solving | $1.00 | |
| Actor Start | Charged when the Actor starts running. Number of times the Actor was started. | $0.00005 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/linkedin-profile-scraper').call({
"queries": [
"https://www.linkedin.com/in/williamhgates"
]
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/linkedin-profile-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/linkedin-profile-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Public profile data from a LinkedIn profile URL.
Profile data for LinkedIn usernames.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.