LinkedIn Profile Scraper by URL | No Cookies | from $0.696/1k
Pricing
from $3.00 / 1,000 profiles
LinkedIn Profile Scraper by URL | No Cookies | from $0.696/1k
Give LinkedIn profile URLs, get one flat row per profile: name, headline, job title, seniority, company, location, tenure, optional emails. No login. Pay per profile found, misses are free. Does not search people by name or company; use people-search. Free plan: 100 per run.
Pricing
from $3.00 / 1,000 profiles
Rating
0.0
(0)
Developer
Open Enrich
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Paste a list of LinkedIn profile links and get back one flat row per person: name, headline, current job title, seniority, current company, location, tenure and years of experience. Add includeEmails when you also want the email addresses on file. No LinkedIn account, no cookies, no ban risk.
No login | Profile URL, short URL or bare slug | One row per profile | Optional emails | Up to 1,000 profiles per run | JSON/CSV export
Not a scraper of linkedin.com. The actor never opens a LinkedIn page. Each row is read from a profile database by the profile address you supply. Not affiliated with LinkedIn.
๐ณ Pricing and plans
Pay per result, see the Pricing tab. Free Apify plan: up to 100 inputs looked up per run, as many runs as your Apify credit covers. Paid plans have no per-run limit. Normal Apify platform usage applies.
| Event | When it is charged | Free plan, per 1,000 | Gold plan, per 1,000 |
|---|---|---|---|
profile | One profile found and delivered as a row | $3.963 | $3.663 |
email-found | One email address returned on a row, only when includeEmails is on | $1.00 | $0.70 |
A profile that comes back with an email therefore costs $4.963 per 1,000 on the Free plan ($3.963 for the profile plus $1.00 for the email). Bronze, Silver, Platinum and Diamond prices are on the Pricing tab. Higher Apify plans only lower the price.
Success-only billing
You pay for delivered rows only.
- A profile that is not found is free.
- A failed lookup is free.
- An input that is not a LinkedIn profile link is skipped and is free.
- A notice row (for example
free_plan_limit) is free. - An empty run is free, and there is no start fee.
Each delivered profile is one profile event, charged right before the row is saved. Each email on a row is one email-found event, charged only when includeEmails is on. If a run stops on a charge limit, the actor never hands out an email that was not charged for.
The free plan
Free Apify accounts get up to 100 inputs looked up per run, and as many runs as their Apify credit covers. Nothing is stored on our side. When a list is longer, the first 100 are looked up and one free notice row (reason: "free_plan_limit") says how many inputs were not looked up; they are not charged. Run again with the rest, or use a paid Apify plan for no per-run limit.
Keep a run small while you test
Use limit to cap the number of profiles. The default is 25, the maximum is 1,000. Run 1 to 3 profiles first, read the row, then scale up.
โ๏ธ This vs. the alternatives
| This actor | Cookie-based extension tools | Other Store profile scrapers | |
|---|---|---|---|
| LinkedIn account needed | No | Yes (your own session) | Varies by actor |
| Your account at risk | No, it is never used | Yes | Varies by actor |
| Input | Full URL, short URL or bare slug | Open page or URL list | URL list |
| Output | One flat row per profile, fixed keys | Varies | Varies |
| Misses | Free and listed in MISSES | n/a | Varies |
| Duplicates in your list | Collapsed, charged once | Not handled | Varies |
| Emails | Optional, separate per-email price | Rarely | Varies |
Public Store prices for three profile actors, FREE tier, per 1,000 profiles. These are prices from public Store pages, 2026-10-11, check the page for current prices.
| Actor | Profile only | Profile with email |
|---|---|---|
| This actor | $3.963 | $4.963 |
| harvestapi profile scraper | $4 | $10 |
| apimaestro profile detail | $5 flat | $5 flat |
| dev_fusion profile scraper | $10 flat | $10 flat |
We compare on price only and make no claim about the other actors beyond that. Field lists differ between actors, so check that the columns you need are in the row before you compare cost.
โก Why this actor?
- No login, no cookies. Nothing of yours is exposed and nothing can get banned.
- Forgiving input.
https://www.linkedin.com/in/slug,linkedin.com/in/slugand plainslugall work. Query strings and trailing slashes are stripped. - Order kept, duplicates collapsed. The same person written two ways is looked up once and billed once. Rows come back in the order you sent them.
- Fixed keys. Every row has the same keys with
nullfor what is not known, so a CRM import or an agent never has to guess. - Seniority already worked out.
seniorityis one ofcxo,vp,director,manager,founderorother, taken from the current role. - Honest misses. Every input that did not turn into a row is listed with a reason in the
MISSESrecord, and none of them cost anything. - Strict input. An unknown field fails the run at once with "remove unsupported fields", before anything is charged, so a typo never turns into a silent default.
๐ฏ Use cases
- CRM clean-up. You hold a list of LinkedIn links. Fill in title, company and seniority in one pass.
- Pre-call research. Drop in the profiles of tomorrow's meetings and read tenure and headline in a sheet.
- Recruiting review. Turn a shortlist of candidate links into a table with current role, tenure and total experience.
- Account mapping. Check who in a buying group is a VP or above before you plan the outreach.
- Lead scoring inputs. Add
seniority,tenureYearsanddepartmentas features to a scoring model. - Agent tool. Let an AI agent resolve a profile URL to structured facts with a single call.
๐ Pipeline guide: from a profile link to a contact
This actor is the lookup step when you already have the link. If you have no links yet, start further up.
Names or a target list, no URLs yet|v[1] linkedin-people-search / linkedin-person-search -> profile URLs|v[2] linkedin-profile-by-url (this actor) -> one row per profile|v[3] email-phone-finder -> phone numbers and emails from name + company
Step 1 is only needed when you have no URLs. Step 3 is optional: turn on includeEmails here for the addresses on file, or send name and company from each row to the email and phone finder. Company-level details for the company column come from company-firmographics-by-domain once you know the domain. All actors are on the publisher page: See all actors by b2bdata. A Make or n8n scenario can chain them without code.
๐ Quick start
Open the actor, paste your links, press Start. Or send JSON. Three examples:
1. One profile, no email
{"items": ["https://www.linkedin.com/in/jane-example"],"limit": 1}
2. A list in mixed formats, with emails
{"items": ["https://www.linkedin.com/in/jane-example","linkedin.com/in/john-sample","casey-demo"],"includeEmails": true,"limit": 3}
3. A bigger batch with the audit view
{"items": ["https://www.linkedin.com/in/jane-example","https://www.linkedin.com/in/john-sample","https://www.linkedin.com/in/casey-demo"],"limit": 200,"includeAudit": true}
In a real batch, items holds your own links, one per line in the form. The slugs above are placeholders.
โ๏ธ Inputs
Only items is required. Any field not listed here is rejected.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
items | string list | Yes | none (prefilled with an example link) | LinkedIn profile links, one per entry. Accepted: https://www.linkedin.com/in/slug, linkedin.com/in/slug, or just the slug. Duplicates are collapsed and input order is kept. |
limit | integer | No | 25 | Maximum rows pushed to the dataset, 1 to 1000. Entries past the limit are not looked up. |
outputMode | string | No | lite | Output detail. Only lite (core person fields) exists today. Leave it out. |
includeEmails | boolean | No | false | Adds an emails array to each row. Each address returned is charged as one email-found event. Off, you get only the hasWorkEmail and hasPersonalEmail flags. |
includeAudit | boolean | No | false | Adds an audit object to each row with requestId, unitsCharged, latencyMs, inputRaw and inputCanonical. |
Tips:
- Entries that are not profile links (a company page, a search URL, free text with spaces) are skipped and cost nothing.
- Start with
limitof 1 to 3, then raise it. - Keep
includeEmailsoff if you only need the profile facts. The flags tell you whether an address exists.
๐ค Output
One dataset row per profile found. Illustrative values, not a real person:
{"profileUrl": "https://www.linkedin.com/in/jane-example","slug": "jane-example","firstName": "Jane","lastName": "Example","fullName": "Jane Example","headline": "VP Sales at Example Group","jobTitle": "VP Sales","seniority": "vp","department": "Sales","company": "Example Group","companyDomain": null,"companyUrl": null,"location": "Example City, Example Region","country": "US","startYear": 2021,"tenureYears": 4.5,"totalExperienceYears": 15,"connections": 500,"hasWorkEmail": true,"hasPersonalEmail": false,"updatedAt": "2026-01-01T00:00:00.000Z"}
Column list:
| Key | Type | Null means |
|---|---|---|
profileUrl, slug | string | Row is only produced when a profile address is known |
firstName, lastName, fullName | string | Not public |
headline | string | None set |
jobTitle, company, department | string | No current role, or not available |
seniority | cxo, vp, director, manager, founder, other | No current role |
companyDomain, companyUrl | string | Always null in this version |
location | string | Not public |
country | ISO-2 code | Not public |
startYear | integer | No current role |
tenureYears, totalExperienceYears | number | Not computable |
connections | integer | Hidden |
hasWorkEmail, hasPersonalEmail | boolean | Not known |
updatedAt | ISO datetime | Not available |
emails | string list | Only present with includeEmails |
audit | object | Only present with includeAudit |
Export as JSON, CSV, Excel, XML or HTML from the Output tab, or read the dataset over the API.
Other records in the run
MISSES(key-value store): one entry per input that did not become a row, with theinputand areason:not_found,below_threshold, orUpstream HTTP <code>/Upstream unavailablewhen the lookup itself failed.RUN_SUMMARY(key-value store): counts for the run (requested,valid,pushed,missed,units,emails,freePlanNotLookedUp,build).- A status message on the run shows how many profiles were found, how many missed, and how many emails were returned.
Column notes
seniorityis derived from the current role. A missing value means no current role was found, not that the person is junior.companyDomainandcompanyUrlare alwaysnullin this version. Do not build joins on them. Use company-firmographics-by-domain when you have a domain from another source.emailsholds both work and personal addresses on file, merged and de-duplicated. UsehasWorkEmailandhasPersonalEmailto tell which kinds exist.updatedAtis the date of the source record, not the time of your run.
What is NOT returned
- โ Posts, comments, reactions or job listings
- โ Full employment history, education or skills lists
- โ Profile photos
- โ Private or non-public profile data
- โ Company details beyond the current company name
- โ Profiles found by name or keyword (this actor only takes a link, use linkedin-people-search for discovery)
We do not strip nulls from rows. A field with no value is returned as null, so the columns stay stable for a CRM import.
๐ก๏ธ Reliable results
Our data promise. We work to keep every contact current, and we stand behind it. If a record is outdated, an email bounces or a person has moved on, open the Issues tab with your run link. We review every report and sort it out with you, case by case.
- Misses are free and visible. A profile that is not found or fails to load is listed in
MISSESwith a reason and is never charged. - Duplicates are collapsed. The same profile written as a full URL, a short URL and a slug is looked up once and charged once.
- No unpaid emails. An address is returned only if its
email-foundevent was charged. - Each row is saved as it is delivered. A run that stops keeps what it already produced.
- Bounded pace. Lookups run at 60 per minute, so runs are predictable and a large list takes time. A list of 1,000 profiles needs roughly 17 minutes.
- Typos fail early. An unsupported input field stops the run before any charge.
- Check before you send. Treat
emailsas addresses on file. They are not verified by this actor, so run them through your own deliverability check before a campaign.
๐ค For AI agents
This section is written for an LLM agent that calls this actor as a tool, through the Apify MCP server or the API. Humans: it doubles as a one-screen contract.
When to use this actor, and when to use a sister actor
- Use
b2bdata/linkedin-profile-by-urlwhen you already hold one or more LinkedIn profile links and need structured facts about each person. - linkedin-person-search: you know a name and a company but have no link.
- linkedin-people-search: you want to find people by title or company when you have no links yet.
- linkedin-employee-search: you want the roster of one specific company.
- linkedin-company-search: you need company page URLs.
- linkedin-leads-verified-work-emails: you have an ICP and need a list of leads with work emails, not a lookup of known links.
- executive-email-finder-by-domain and ceo-founder-email-finder-by-domain: you have a domain and need its executives or founders.
- email-phone-finder: you have a name and company and need an email or phone.
Input contract
| Field | Type | Default | Notes |
|---|---|---|---|
items | string[] | required | Profile URL, linkedin.com/in/slug or bare slug. Duplicates collapsed, order kept. |
limit | integer 1-1000 | 25 | Caps the profiles looked up. |
includeEmails | boolean | false | Adds emails, each address is billed. |
includeAudit | boolean | false | Adds audit to each row. |
outputMode | "lite" | "lite" | Only value. Omit. |
Send only the fields you need. Any other field fails the run with Invalid input: remove unsupported fields: x, and nothing is charged.
Output contract
Each item has profileUrl, slug, firstName, lastName, fullName, headline, jobTitle, seniority, department, company, companyDomain, companyUrl, location, country, startYear, tenureYears, totalExperienceYears, connections, hasWorkEmail, hasPersonalEmail, updatedAt, plus emails with includeEmails and audit with includeAudit. Many can be null. companyDomain and companyUrl are always null. Nothing else is returned. A notice row has type: "notice" and a reason, and is not a profile.
Cost per call
You pay per profile found, plus per email returned when includeEmails is on, plus Apify platform usage. Misses, failed lookups, invalid inputs and notices are free. Start with limit 1, then scale. Free Apify plans get up to 100 inputs looked up per run; paid plans have no per-run limit.
Idempotency and rate advice
The same input returns the same kind of row, but do not assume two runs are byte-identical. Do not re-run the same list in a loop. The actor looks up 60 profiles per minute, so for synchronous calls keep batches small (a few dozen) and use a normal run with a dataset fetch for larger ones.
Chaining
Take profileUrl, fullName and company from each row. To find an address or phone for a person with no email on file, send name and company to b2bdata/email-phone-finder. Only treat emails as usable after your own deliverability check.
Error cases and what to do
| Situation | What you see | What to do |
|---|---|---|
| Unknown input field | Run fails: remove unsupported fields: x, nothing charged | Remove the field and retry once. |
| No valid items | Run fails: No valid items in input | Pass at least one profile link or slug. |
| Profile not found | No row; entry in MISSES with not_found, free | Check the link. Do not retry more than once. |
| Lookup failed | No row; entry in MISSES with Upstream HTTP <code> or Upstream unavailable, free | Retry the failed inputs once, later. |
| Input is a company page or free text | Skipped, free | Send profile links only. |
hasWorkEmail true but emails missing | includeEmails was off | Run again with includeEmails: true for those links. |
| Free Apify plan, list longer than 100 | Run SUCCEEDED, first 100 looked up, one free free_plan_limit notice row | Not an error. Run again with the rest; a paid Apify plan removes the limit. Do not loop. |
Minimal call
{"items": ["https://www.linkedin.com/in/jane-example"],"limit": 1}
๐ Integrations: send results anywhere
Every run writes to an Apify dataset. Dataset items carry fullName, jobTitle, seniority, company, location, tenureYears, profileUrl and the other columns above. Actor id for all recipes: b2bdata/linkedin-profile-by-url (in API URLs, write it as b2bdata~linkedin-profile-by-url). Everything below uses the public Apify API and your own Apify token. Native means an Apify integration exists; CSV and automation routes are marked as such.
1. Fetch results over the API (native)
Send the token in a header, never in the URL. Latest successful run, as JSON, CSV or Excel:
curl -H "Authorization: Bearer $APIFY_TOKEN" "https://api.apify.com/v2/acts/b2bdata~linkedin-profile-by-url/runs/last/dataset/items?format=json&clean=true&status=SUCCEEDED"
Swap format=json for format=csv or format=xlsx (jsonl also works). clean=true drops empty items and hidden fields. Pick fields with jq:
curl -s -H "Authorization: Bearer $APIFY_TOKEN" "https://api.apify.com/v2/acts/b2bdata~linkedin-profile-by-url/runs/last/dataset/items?format=json&clean=true&status=SUCCEEDED" | jq '.[] | {fullName, jobTitle, company}'
Replace the field names with any from the column list above. For a specific run, use https://api.apify.com/v2/datasets/<datasetId>/items?format=json.
One-shot call (start a run and wait for its items, limited to 300 seconds): POST https://api.apify.com/v2/acts/b2bdata~linkedin-profile-by-url/run-sync-get-dataset-items?format=json&clean=true with the Actor input as the JSON body and the same Authorization header. Because lookups run at 60 per minute, keep a synchronous batch small. For longer runs, start the run normally and fetch the dataset afterwards.
2. Webhook on run success (native)
In the Actor's Integrations tab (or via the API) add a webhook with event type ACTOR.RUN.SUCCEEDED and your own endpoint as the request URL. Apify sends a POST with the default payload, which contains the run under resource. Your endpoint reads resource.defaultDatasetId and calls the dataset items URL from recipe 1 with it. To send a smaller body, set a custom payload template: a JSON object whose values are Apify variables in double curly braces (resource, eventType, userId, createdAt, eventData), with nested values by dot, for example the run id as resource.id and the dataset id as resource.defaultDatasetId. Switch on "Interpolate variables in string fields" in Apify Console when you quote them.
3. n8n (native node)
Apify node, operation "Run an Actor and get dataset" (or "Run an Actor", then "Get dataset items" from the Datasets resource). Select b2bdata/linkedin-profile-by-url, paste the Actor input as JSON, and connect your Apify token as a credential. Each dataset item becomes one n8n item, so map fullName, jobTitle, seniority, company, location, profileUrl straight into the next node. The Apify node also has an "On new Apify event" trigger for run-finished events.
4. Make (native app)
Apify app: module "Run an Actor" with b2bdata/linkedin-profile-by-url (or the trigger "Watch Actor Runs" for scheduled or manual runs), then the search module "Get Dataset Items" using the run's default dataset id. Each returned bundle is one row, so map fullName, jobTitle, seniority, company, location, profileUrl into your destination module.
5. Zapier (native app)
Apify app: trigger "Finished Actor run" (or action "Run Actor" with b2bdata/linkedin-profile-by-url), then the search "Fetch dataset items" with the run's default dataset id. Map fullName, jobTitle, seniority, company, location, profileUrl into your destination step. Add a Looping or similar step if your Zap needs one action per item.
6. Google Sheets
Apify's Store has a "Google Sheets Import & Export" Actor that you add on this Actor's Integrations tab, then choose append or replace mode and paste your spreadsheet URL. This needs a one-time Google login. Alternative with no extra Actor: the Make or Zapier recipes above with their own Google Sheets module. A sheet of profile links in, a sheet of enriched rows out, is the most common setup.
7. Clay (HTTP API)
In Clay, create an HTTP API request with method GET, URL https://api.apify.com/v2/acts/b2bdata~linkedin-profile-by-url/runs/last/dataset/items?format=json&clean=true&status=SUCCEEDED, and a header Authorization: Bearer <your Apify token>. Treat each returned item as a row and chain your enrichment columns after it.
8. Airtable, HubSpot, Salesforce
No native Apify connector is used here. Two routes:
- CSV: download with
format=csv(recipe 1) or from the dataset's Export button, then use the tool's own import (Airtable CSV import, HubSpot Import, Salesforce Data Import Wizard or Data Loader). UseprofileUrlas the dedupe key. - Automation: use the n8n, Make or Zapier recipe above and the CRM's module there. Their setup and field limits are theirs to define.
9. Map the fields
Typical placement in a CRM (create custom properties where your CRM has no match):
| Output field | Typical CRM placement |
|---|---|
firstName, lastName | Contact first and last name |
jobTitle, headline | Contact job title, bio |
seniority, department | Custom picklists |
company | Company or account name |
profileUrl | Custom text field, also your dedupe key |
location, country | Contact location fields |
tenureYears, totalExperienceYears | Custom number fields |
emails (with includeEmails) | Contact email, after your own check |
| Run date | Custom date field ("Sourced on") |
All recipes use the public Apify API; nothing is stored by the publisher.
๐ Schedule examples
Use Apify Schedules (cron) on a saved task.
- Weekly list refresh:
0 6 * * 1, your link list initems,limit200. Send the rows to your CRM through a webhook and update byprofileUrl. - Nightly meeting prep:
0 20 * * *, a short list of tomorrow's attendees,limit20. - Monthly role check on a key-account list:
0 6 1 * *,limit100, comparejobTitleandcompanyagainst last month's rows.
Keep scheduled runs small. A schedule you forget is still billed for every profile found.
๐ Related actors
More from the publisher: See all actors by b2bdata
- linkedin-leads-verified-work-emails: leads with work emails from an ICP filter.
- company-firmographics-by-domain: firmographics for a domain.
- executive-email-finder-by-domain: C-suite, VP and Director contacts at one domain.
- ceo-founder-email-finder-by-domain: CEO and founder emails at one domain.
- email-phone-finder: phone numbers and emails from a name and company.
- linkedin-company-search: find company pages by name.
- linkedin-employee-search: employees of one company.
- linkedin-people-search: company pages and employees by X-ray search.
- linkedin-person-search: find a named person.
โ FAQ
Data & coverage
Q: Do I need a LinkedIn account or Sales Navigator? A: No. The actor never logs in to LinkedIn. No account, no cookies.
Q: What can I put in items?
A: A full profile URL, the short form linkedin.com/in/slug, or the bare slug. Tracking parameters and trailing slashes are stripped. Company pages and search URLs are skipped.
Q: Can I search by name or company instead of a link? A: No. This actor only looks up profiles you point at. For discovery use linkedin-people-search or linkedin-person-search.
Q: Why did a link produce no row?
A: It was not found, the lookup failed, or the input was not a profile link. The reason is in the MISSES record of the run. None of these are charged.
Q: Why is company empty for someone?
A: The profile shows no current role. In that case jobTitle, company, department, startYear and seniority are null too.
Q: Why are companyDomain and companyUrl always null?
A: This version does not return them. Use company-firmographics-by-domain if you have a domain.
Q: What does includeEmails return?
A: An emails array with the work and personal addresses on file for that profile, de-duplicated. Each address costs one email-found event. The actor does not verify them, so check them before you send.
Q: How fast is it, and how many profiles fit in one run? A: Up to 1,000 profiles per run at 60 lookups per minute. Results come back in the order you sent them.
Q: How do I avoid paying twice for the same person?
A: Duplicates inside one run are collapsed automatically, including the same profile written two ways. Across runs, keep your own list of profileUrl values you already pulled.
Q: Am I charged for failed lookups?
A: No. You pay one profile event per delivered row, plus email-found events when you ask for emails. Misses, failed lookups, invalid inputs, notices and empty runs cost nothing.
Q: What does the free plan allow?
A: Up to 100 inputs looked up per run, as many runs as your Apify credit covers. Longer lists get one free free_plan_limit notice row. A paid Apify plan removes the limit.
Legality & compliance
Q: Is this legal? A: We are not lawyers and this is not legal advice. The actor never signs in and works only from publicly available data. Compliance with outreach and privacy law in your market remains with you. For any legal claim, use Apify support (https://apify.com/contact); they forward it to us.
Q: Does it break LinkedIn's terms of service? A: The actor works without any LinkedIn account, which means it makes no deal with LinkedIn when it runs. Your use of the data must follow the laws and terms that cover you.
Q: Does it collect personal data?
A: Yes. Rows describe people: names, titles, employers and, if you turn on includeEmails, email addresses that can include personal ones. You act as the data controller of what you download.
Q: Is it GDPR and CCPA compliant? A: The compliance duties sit with you as controller: lawful basis, notices, opt-outs, deletion, and spam rules such as CAN-SPAM for each place you contact. The Master Terms below explain who does what.
Q: Do you store my results? A: No. We keep no copy of your result data. It lives in your Apify account.
Q: Can I use the output for cold email? A: Only if you follow anti-spam and privacy rules for each place you contact, including opt-out handling, and only after you have checked the addresses yourself.
Q: Can I be blocked or banned? A: Your LinkedIn account cannot be, because it is never used. Your Apify account can be limited if you break the Terms below.
๐ Support
Use the Issues tab on this actor's Apify page for bugs, questions and feature requests. We answer within 48 hours on working days. Please include the run ID and the input you used.
๐ Legal
Use for B2B prospecting only. Comply with all applicable laws including GDPR, CCPA, and CAN-SPAM.
Not affiliated with LinkedIn. The LinkedIn name belongs to its respective owner. This actor returns profile facts from a profile database. It does not log in, use cookies, access private pages or bypass authentication. Published on Apify by b2bdata as proprietary software.
๐ Master Terms of Service
Publisher: b2bdata (the "Publisher"), an independent developer publishing on the Apify platform. Applies to: LinkedIn Profile Scraper by URL (the "Actor"). Version: 1.0.
Acceptance by use
By running the Actor, calling it through the Apify API, the Apify MCP server or any integration, or letting a schedule or an AI agent run it for you, you accept these Terms. This is acceptance by use. No signature is needed.
If you run the Actor on behalf of a company, you confirm you may bind that company. If you do not accept these Terms, do not run the Actor. Continued use after we update the Terms is acceptance of the update. Anonymous or automated use does not remove your responsibility: the Apify account that starts the run is the accountable party.
Preamble: how the Actor is built
The Actor is a thin wrapper over an independent search index. It does not log in to anything, does not use cookies or accounts, and does not fetch pages from the source platform. We are a software vendor. We ship code that turns a query into a structured result. We do not own, host or curate the underlying data.
You / your agent| input (query, filters)vThe Actor (the Publisher's code, runs on Apify)| search requestvAn independent search index of publicly indexed data| public result rowsvThe Actor (normalises, deduplicates, saves to your dataset)|vYour Apify dataset (you control it)
Each party has one job. The index holds publicly indexed data. The Actor reshapes it. You decide what to search for, what to keep and what to do with it. We keep no copy of your queries or your results once the run ends, beyond what Apify itself stores in your account and what we need for billing and abuse prevention.
1. Nature of the service
1.1 What the Actor is
A software tool that searches publicly indexed data and returns structured rows to your Apify dataset. It is a data-discovery utility, nothing more.
1.2 What the Actor is not
It is not a scraper of the source platform, not an official integration, not a credit bureau, not a background-check service, not an employment or tenant screening tool, and not a source of legal, financial or compliance advice. Results are leads and pointers. They are not verified facts.
1.3 The publisher's limited role
We write and maintain the code. We do not review individual runs, individual results or individual users. We do not guarantee that a result is accurate, current, complete or lawful to use for your purpose.
1.4 Third-party infrastructure
The Actor depends on the Apify platform and on an independent search index. We do not control either. Their availability, rules and changes can affect the Actor at any time.
2. Who may use the Actor
2.1 Eligibility
You must be at least 18, have the legal capacity to contract, and not be barred from using the Apify platform or from receiving services under applicable sanctions or export laws.
2.2 Your representations
By running the Actor you represent that you have a lawful purpose, that you will follow the laws that apply to you and to the people whose data you handle, and that the information on your Apify account is accurate.
3. Permitted uses
Lawful business uses, including market research, account and lead discovery, competitive analysis, recruiting research done in line with local law, investment research, data enrichment of records you are entitled to hold, and building your own internal tools. Any use must comply with Section 4 and Section 6.
4. Prohibited uses
4.1 Illegal activity
Any use that violates a law or regulation that applies to you, to us or to the people in the data.
4.2 Harassment, stalking and personal targeting
Locating, monitoring, intimidating or pressuring a private individual.
4.3 Discrimination
Using results to exclude or disadvantage people on a protected characteristic, including in hiring, lending, housing or insurance decisions.
4.4 Spam and unsolicited commercial communication
Sending bulk messages in breach of anti-spam, e-privacy or telemarketing rules (for example CAN-SPAM, PECR, CASL, GDPR consent rules).
4.5 Fraud and deception
Phishing, impersonation, social engineering, fake profiles or any scheme to mislead.
4.6 Source platform abuse
Using the Actor to evade a block, rate limit or enforcement action by the source platform, or to build a service that competes with the source platform by copying its data wholesale.
4.7 Reselling the Actor's service
Reselling or sub-licensing access to the Actor, or republishing raw output as a competing data product, without our written permission.
4.8 AI training without authorization
Using raw output to train a model that identifies or profiles individuals, without a lawful basis and without checking the source platform's terms.
4.9 Sensitive targeting
Building lists based on health, religion, ethnicity, political opinion, sexual orientation, union membership, immigration status, criminal history or any other special category of data.
4.10 Privacy law violations
Any processing of personal data without a lawful basis, without required notices, or in breach of a data subject's rights.
5. Source platform terms: your responsibility
5.1 Acknowledgment
The source platform named in the Addendum has its own terms. We have no contract with you about them and we do not interpret them for you.
5.2 Your sole responsibility
You alone are responsible for checking whether your use of results is allowed under the source platform's terms and under the law of your jurisdiction. Running the Actor is not a statement by us that your use is allowed.
5.3 Cease-and-desist compliance
If the source platform, a rights holder or a regulator sends us a valid cease-and-desist or takedown notice about specific use of the Actor, we will act on it. If we forward such a notice to you, you must stop the named use within 48 hours of receipt and confirm in writing. We may suspend your access immediately while we assess the notice.
6. Data protection
6.1 Roles under privacy law
For the data you collect with the Actor, you are the data controller (or business, under CCPA). Apify and its infrastructure act for you as processor or service provider under their own terms. We, as the publisher of the code, do not decide the purposes or means of your processing and do not receive your result data.
6.2 No data retention by the publisher
We do not retain your result data. We do not build a database from your runs. We keep only what is needed for billing, security and abuse prevention, such as run metadata and support correspondence.
6.3 Your obligations as data controller
You must have a lawful basis (GDPR, UK GDPR), give required notices, honour access, deletion and objection requests, respect opt-outs and "do not sell or share" rights (CCPA/CPRA), keep records, protect the data, and delete it when you no longer need it.
6.4 Sensitive data targeting
You must not use the Actor to target special-category data (see 4.9). If sensitive data appears in results, you must delete it or handle it under the stricter rules that apply.
6.5 Data subject requests
If a person contacts us about data you collected, we will refer them to you and may ask you to confirm you have handled the request.
7. Intellectual property
7.1 Actor code
The Actor, its code, schemas, documentation and branding belong to the Publisher. This is proprietary software. No licence is granted except the right to run the Actor under these Terms.
7.2 Output data
We claim no ownership of the output. Rights in underlying data belong to their owners. You are responsible for how you use it.
7.3 Restrictions
No reverse engineering, copying of the Actor, or removal of notices, except where the law gives you that right regardless.
7.4 Feedback
If you send feedback or bug reports, we may use them freely to improve the Actor, without payment, and without crediting you.
8. Pricing and payment
8.1 Apify platform billing
Charges are set on the Actor's Pricing tab and billed by Apify. Platform usage costs may also apply, as shown by Apify. We do not handle your payment details.
8.2 Pricing changes
We may change prices. For any increase we give at least 14 days' notice through the Apify platform's change-notification process before it takes effect.
8.3 No refunds for misuse
Results delivered as described are billable. Charges for runs you configured wrongly, repeated by a schedule you forgot, or started by an agent you control are your responsibility. Refund requests for platform or Actor faults go through Apify support or to us.
9. Service availability and changes
9.1 No uptime guarantee
We give no uptime, latency, volume or coverage guarantee. Runs can return fewer results than you asked for, or none, because the underlying index changes.
9.2 Service discontinuation
We may change, limit or stop the Actor at any time. We will try to give notice on the Actor page when practical.
10. Disclaimers
10.1 "As is" service
The Actor is provided "as is" and "as available", without warranties of any kind, including merchantability, fitness for a particular purpose, accuracy and non-infringement.
10.2 No representation of lawfulness
We do not represent that your intended use is lawful.
10.3 No endorsement of source content
Results are not endorsed, verified or vouched for by us. Names can be wrong, profiles can be outdated and similarly named entities can be mixed up.
11. Limitation of liability
11.1 Aggregate cap
To the maximum extent the law allows, our total liability for all claims relating to the Actor is limited to the greater of USD 100 or the fees you paid for the Actor in the 3 months before the event that gave rise to the claim.
11.2 Excluded damages
We are not liable for indirect, incidental, special, consequential or punitive damages, or for lost profit, lost revenue, lost data or lost goodwill, even if advised of the possibility.
11.3 Time limit
Any claim must be brought within 1 year after it arose.
12. Indemnification
12.1 Your indemnification of the publisher
You will indemnify and hold harmless the Publisher, its owners and contractors from claims, losses and reasonable legal costs arising from your use of the Actor or its output, your breach of these Terms, or your violation of any law or third-party right.
12.2 Defense
We will tell you promptly about a claim. You may control the defense, but you may not settle in a way that admits fault for us without our written consent.
12.3 Scope
This applies whatever the legal theory, and survives termination.
13. Suspension and termination
13.1 Termination by the publisher
We may suspend or end your access at any time, with or without notice, especially for a breach of Section 4 or a valid notice under 5.3.
13.2 Effects of termination
Rights to run the Actor stop. Sections that by nature survive (IP, disclaimers, liability, indemnification, disputes) continue.
13.3 Termination by you
Stop running the Actor and delete your schedules and integrations.
14. Dispute resolution
14.1 Informal resolution first
Before any formal action, raise the dispute through Apify support or the Actor's issue tab on Apify, and allow 60 days for a good-faith resolution. The Issues tab is for product questions only and is not a channel for legal notices.
14.2 Apify's process next
If the informal step fails, raise the matter through Apify's dispute and support channels. Your contractual relationship for payment, refunds and platform access is with Apify, under Apify's Terms of Service.
14.3 No chosen court
These Terms do not select a governing law or a court. Any claim that survives 14.1 and 14.2 is subject to the law and forum that apply by default to a dispute between you and an individual software developer reached through Apify.
14.4 No class actions
Claims may be brought only on an individual basis, not as a plaintiff or class member in a class, collective or representative action.
14.5 Attorneys' fees
The prevailing party may recover reasonable attorneys' fees where the law allows.
15. Miscellaneous
15.1 Entire agreement
These Terms, with the Addendum, are the whole agreement about the Actor. Apify's own terms continue to apply to the platform.
15.2 Severability
If a provision is unenforceable, the rest stays in force.
15.3 Assignment
You may not assign these Terms. We may assign them in a merger, sale or reorganisation.
15.4 Force majeure
Neither party is liable for delay caused by events beyond reasonable control, including outages of the platform or of upstream infrastructure.
15.5 Third-party beneficiaries
There are none, except that the Publisher's owners, contractors and affiliates may enforce the protections in Sections 10 to 12.
15.6 Survival
Sections 5, 6, 7, 10, 11, 12 and 14 survive termination.
15.7 Language
The English text controls.
15.8 Publisher identification for legal process
All legal notices, takedown requests, cease-and-desist letters, regulator enquiries and data-subject requests must be directed to Apify (https://apify.com/contact), which forwards them to the Publisher. The Publisher operates on Apify under the username b2bdata. The Publisher's identity is held by Apify for billing and is provided to courts and authorities through valid legal process directed via Apify's official channels. We do not publish personal details on the Actor page.
16. Acknowledgment
By running the Actor you confirm you have read these Terms, that you understand you act as the data controller of what you collect, and that you are responsible for lawful use.
๐ก๏ธ Actor-Specific ToS Addendum: LinkedIn Profile Scraper by URL
A. Architectural disclosure
The actor takes the profile addresses you provide, asks an independent profile database for the matching record, reshapes it into a flat row and saves it to your dataset. It does not call LinkedIn, does not log in and does not use cookies.
B. Source platform
The source platform is LinkedIn. LinkedIn is not affiliated with, and has not endorsed, this actor. Your use of LinkedIn-derived data is governed by LinkedIn's terms and by the law that applies to you (Section 5 of the Master Terms).
C. Output and accuracy
Titles, companies, locations and tenure can be out of date or incomplete. Email addresses returned with includeEmails are addresses on file and are not verified by this actor. Treat output as leads to check, not as verified facts.
D. Personal contact data
With includeEmails on, this actor can return work and personal email addresses. You act as the data controller of them. You must have a lawful basis, honour opt-outs and follow anti-spam and calling rules for every place you contact. If you combine its output with other actors, you take on the duties for the combined data.
E. Limits
Up to 1,000 profiles per run, looked up at 60 per minute. Free Apify plans get up to 100 inputs looked up per run; paid plans have no per-run limit.
F. Feedback
You can report a problem by posting in the Issues tab with your run link.
G. Takedown
If a person, a company or LinkedIn asks that specific use of this actor stop, send the request through Apify (https://apify.com/contact) or the actor's issue tab. Section 5.3 of the Master Terms (48 hours) applies.