
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Search public LinkedIn profiles by keyword, job title, company, school, or location. No login.
Find public LinkedIn profiles by keyword, title, company, school, location, or name, and get clean rows with the name, headline, company, location, schools, and profile URL. No LinkedIn account, cookies, or session needed. A found profile costs $3 per 1,000, and a partial profile costs $0.80 per 1,000.
| Field | Key | What it does |
|---|---|---|
| Keywords | keywords | Free-text search, such as a role, skill, or name. |
| More searches | queries | Extra keyword searches that each run until Max profiles is filled. |
| Max profiles | maxResults | Stop after this many profiles. Default 10. |
| Job title, Company, School, Location | title, company, school, location | Keep people whose public profile mentions the value. |
| First name, Last name | firstName, lastName | Added to the search. With empty keywords, the name is the search. Umlauts, ß and accents are also searched in their plain spellings. |
| Company LinkedIn page | companyUrl | A company page URL; its name is used when Company is empty. |
| Find company employees | companyEmployees | People who work or worked at the company. On automatically when only a company is given. |
| Only matching results | onlyMatching | Return only people who match every given name, company, title and location. |
| Seniority | seniorityLevels | Intern, Entry, Senior, Manager, Director, VP, CXO, Partner, Owner. |
| Job function | jobFunctions | Sales, Marketing, Engineering, Data, Product, and more. |
| Proxy configuration | proxyConfiguration | Datacenter first, residential only if needed. |
{
"keywords": "growth marketing",
"maxResults": 10,
"location": "London",
"seniorityLevels": ["Director", "VP"],
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
Company employees example:
{
"company": "Example Corp",
"companyEmployees": true,
"maxResults": 20
}
In a name search (first and last name, or keywords that are a name such as Jane Müller), the company, title and location rank the results instead of removing them; turn on Only matching results to keep only people who match them all.
Seniority and function are read from the public headline. Profiles with no readable level or function are skipped when you use those filters.
One dataset row per person.
| Field | Description |
|---|---|
name, profileUrl | Name and public profile link. |
summary, about | Headline and the public about text. |
currentCompany, companies, pastCompanies | Employers found on the public page. |
location | Location text. |
schools | Schools listed. |
imageUrl | Profile photo link. |
seniorityLevel, jobFunction | Level and function read from the headline. |
partial | true when only the search-result name, headline, and URL were available. |
headline | Public headline. |
relevanceScore | 0 to 1: how well the person matches the searched name, company, title, keywords and location. |
matchesCompany, matchesName | Whether the searched company and name were matched (null when not searched). |
searchSource | Search engines that found the profile. |
source, scrapedAt | Data source and time. |
{
"name": "Jane Doe",
"summary": "Jane Doe - Example Corp",
"currentCompany": "Example Corp",
"location": "London, United Kingdom",
"schools": ["Example University"],
"about": "Jane Doe is a growth marketing leader helping B2B companies grow…",
"partial": false,
"seniorityLevel": "Director",
"jobFunction": "Marketing",
"source": "public",
"companies": [
{ "name": "Example Corp", "linkedinUrl": "https://www.linkedin.com/company/example" }
],
"profileUrl": "https://www.linkedin.com/in/jane-doe-example",
"scrapedAt": "2026-10-14T01:18:12.895Z"
}
(Fictional sample in the real output shape. The photo link and a few empty fields are removed.) Partial rows keep the name, headline, and URL when the public page did not open, and have partial set to true.
| Event | When | Price |
|---|---|---|
| Profile found | A public profile saved with company, location, and headline | $0.003 |
| Partial profile | A person whose public page did not open (name, headline, URL only) | $0.0008 |
Full profiles cost $3.00 per 1,000. Platform usage (compute and proxy) is billed on top.
Worked example: a run that returns 3 full and 7 partial profiles costs 3 × $0.003 + 7 × $0.0008 = $0.0146 in events plus about $0.004 of platform usage, around $0.018 in total. The mix depends on your search.
The actor reads only public information and does not use a login. Profile data is personal data, so you are responsible for complying with LinkedIn's terms and privacy law such as GDPR.
No.
LinkedIn's own people search needs a login. The actor discovers profiles through a public web search and then reads the logged-out profile page.
If the public profile page does not open, you still get the name, headline, URL and, when the search result shows them, the company and location, at the lower partial price.
An empty input finishes with no rows instead of failing.
Yes, from the console or through the API.
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.
keywordsstringOptionalKeywords
Free-text search, such as a role, skill, or name.
queriesarrayOptionalMore searches
Extra keyword searches. Each one runs on its own until Max profiles is filled. Filters below still apply.
maxResultsintegerOptionaldefault 10Max profiles
Stop after this many profiles.
titlestringOptionalJob title
Only keep people whose public headline or profile mentions this title.
companystringOptionalCompany
Only keep people whose public profile mentions this company (as a whole word, current or past). In a name search the company ranks results first instead; turn on Only matching results to require it.
companyUrlstringOptionalCompany LinkedIn page
Optional LinkedIn company page URL, such as https://www.linkedin.com/company/acme. Its name is used as the company when Company is empty.
companyEmployeesbooleanOptionaldefault falseFind company employees
Find people who work or worked at the company above. Searches several public search engines with several query shapes, puts exact company matches first and drops people at other companies. Turned on automatically when only a company is given.
schoolstringOptionalSchool
Only keep people whose public profile mentions this school.
locationstringOptionalLocation
Only keep people whose public profile mentions this place.
firstNamestringOptionalFirst name
Added to the search. When keywords are empty, the first and last name are the search. Names are also searched in their other spellings (Müller, Mueller, Muller) and close matches count.
lastNamestringOptionalLast name
seniorityLevelsarrayOptionalSeniority
Keep only these seniority levels, read from the public headline. Profiles with no readable level are skipped.
jobFunctionsarrayOptionalJob function
Keep only these functions, read from the public headline. Profiles with no readable function are skipped.
onlyMatchingbooleanOptionaldefault falseOnly matching results
Only return people whose public profile matches every given company, name, title and location. Off: name searches still return close matches ranked by relevance score.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter is used first. Residential is used only when datacenter cannot reach the public pages.
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 |
|---|---|---|
| name | string | null | Full name |
| jobTitle | string | null | Job title when the public page states one |
| summary | string | null | Headline or name and company |
| currentCompany | string | null | Current company |
| location | string | null | Location |
| seniorityLevel | string | null | Seniority derived from the public headline |
| jobFunction | string | null | Function derived from the public headline |
| profileUrl | string | null | Public profile URL |
| about | string | null | About text visible on the public page |
| schools | array | null | Schools listed on the public page |
| languages | array | null | Languages listed on the public page |
| partial | boolean | null | True when the public profile page did not open |
| headline | string | null | Public headline from the profile or search result |
| relevanceScore | number | null | 0 to 1: how well the profile matches the searched name, company, title, keywords and location |
| matchesCompany | boolean | null | True when the searched company is named on the public profile (null when no company was searched) |
| matchesName | boolean | null | True when the profile name matches the searched name in any spelling (null for non-name searches) |
| searchSource | string | null | Search engines that found the profile |
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 |
|---|---|---|
| Profile found | One public LinkedIn profile saved with the company, location, and headline from the public page. | $0.003 |
| Partial profile | One person whose public profile page did not open. The row has the name, headline, and profile URL from the search result. | $0.0008 |
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-people-search').call({
"keywords": "growth marketing",
"maxResults": 10,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// 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-people-searchPaste 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-people-search"
}
}
}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.
People search by keyword and location.
People search filtered by current company.
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.