LinkedIn Jobs Scraper (H1B Visa Sponsor Flags, No Login)
Pricing
from $0.55 / 1,000 jobs
LinkedIn Jobs Scraper (H1B Visa Sponsor Flags, No Login)
Scrape LinkedIn jobs with no login: title, company, location, salary range, seniority, applicants, apply type, and remote or hybrid where stated. Each job carries the employer's US H-1B filing record, UK sponsor licence and median filed wage. Only-new mode for alerts. $1 per 1,000 jobs.
Pricing
from $0.55 / 1,000 jobs
Rating
0.0
(0)
Developer
locaihost data
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
6
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
Search LinkedIn's public job pages by keyword, location or a pasted search URL. Each job comes back as one row with salary, seniority and applicants, plus the employer's US H-1B filing record and UK sponsor licence. No login, no cookies.
- Jobs that can sponsor a visa: keep only employers that file H-1B applications for this kind of role or hold a UK sponsor licence.
- A job board for international candidates: tag every listing with sponsorship evidence and a salary benchmark.
- A daily job alert: schedule a saved search with
onlyNewto receive only jobs you haven't seen. - A remote job feed: keep only jobs that say they are remote or hybrid.
- Ads that offer a visa or relocation: each job says if its own text offers or refuses sponsorship and relocation, and quotes the sentence.
- Companies that are hiring: add company size, industry and website to every job and filter to the size band you sell to.
Quick start
Paste this into the JSON tab of the input and click Start:
{"keywords": ["software engineer"], "locations": ["United States"], "maxJobsPerSearch": 10}
You get 10 jobs in about 20 seconds, each with full details and sponsorship flags. Add more keywords or locations and each pair runs as its own search.
Search the way you already do
Paste LinkedIn job-search URLs into startUrls: set up a search on linkedin.com and copy the address. Each URL runs as its own search. The run reads what LinkedIn's logged-out search honours: keywords, location, geoId, Date posted (f_TPR, including custom windows like r3600), Company (f_C), Easy Apply (f_AL), Under 10 applicants (f_EA) and distance. Experience level (f_E), Job type (f_JT) and Remote (f_WT) are applied from each job's page. Filters only signed-in members get (In your network, Salary) are skipped and named in the status message.
Or use keywords and locations with these filters:
| Filter | What it does | Applied by |
|---|---|---|
companyIds | Only these employers: LinkedIn company IDs (1441) or company page addresses. With no keywords, all of a company's jobs | |
distanceMiles | Miles around a city: 0, 5, 10, 25, 50, 100 | |
easyApplyOnly / under10Applicants | Only Easy Apply jobs / only jobs with fewer than 10 applicants | |
seniority, jobTypes, workplaceTypes | Experience level, employment type, on-site/remote/hybrid | us, from each job page |
titleIncludes / titleExcludes | Keep or drop by words in the title | us, before any page is opened |
descriptionIncludes / descriptionExcludes | Keep or drop by words in the description, such as "visa sponsorship" | us, from each job page |
companyNames | Keep jobs at these companies by name ("Amazon" keeps "Amazon Web Services (AWS)") | us |
companySizes / industries | Employer size band and LinkedIn industry (turns on company details) | us, from the company page |
Text filters match whole words in any case ("intern" doesn't match "International"); end a term with * to match word starts ("engineer*" matches "Engineering").
What you get
| Group | Fields |
|---|---|
| Job | jobId, title, companyName, companyUrl, location, postedDate, postedAgo, jobUrl |
| Details | salaryText, salaryMin, salaryMax, salaryCurrency, salaryPeriod, seniorityLevel, employmentType, jobFunction, industries, applicants + applicantsQualifier, description, detailsFetched |
| How to apply, where you'd work | applyType (easy-apply or external), applyUrl, workplaceType (on-site, remote, hybrid) + workplaceTypeSource |
| US sponsorship | sponsorSignal (strong, some, none), sponsorMatch, h1bEmployer, h1bCertifiedLatestFY, h1bCertifiedTotal, permCertifiedTotal, similarFiledTitle, similarTitleFilings, similarTitleMedianWage + currency and period |
| UK sponsorship | ukLicensed, ukSponsorName, ukRating, ukRoutes, ukMatchBasis, possibleMatches |
| What the ad says | adSponsorship, adRelocation, adEvidence (read from the job page, so they need full details; see below) |
| Plain English | sponsorNote: one sentence you can show a candidate |
| Company details (optional) | companySize + companySizeMin / companySizeMax, companyIndustry, companyWebsite, companyFollowers, companyEmployeesOnLinkedIn, companyHeadquarters (+ city, region, country), companyFoundedYear, companyType, companyLinkedinId, companyEnriched |
| Run | searchKeywords, searchLocation, searchUrl, scrapedAt |
Every row has the same columns. A value LinkedIn didn't show is null, and detailsFetched is false on the rare job whose page LinkedIn refused after five tries.
How the sponsorship flag works. US evidence is the employer's certified H-1B (and H-1B1/E-3) Labor Condition Applications and PERM filings from the US Department of Labor's public disclosure files, FY2024 to date. similarFiledTitle is the employer's filed job title closest to this job, with the median wage it filed for it: a useful salary benchmark. UK evidence is the Home Office register of licensed sponsors; ukMatchBasis says why an entry counts: exact (same name), trading-name (listed "t/a" this name), brand-map (a reviewed brand to legal-entity list, such as Deliveroo to Roofoods Ltd) or unconfirmed (only similar names, listed in possibleMatches). When nothing is found the note says "no filings found under this name", never "doesn't sponsor": a company can sponsor under a different legal name. The flag is evidence, not legal advice.
One real row (run on 2026-10-18, shortened):
{"jobId": "4460205602","title": "Software Engineer, 2027 New Grad","companyName": "Whatnot","location": "New York, NY","postedDate": "2026-10-14","jobUrl": "https://www.linkedin.com/jobs/view/software-engineer-2027-new-grad-at-whatnot-4460205602","applicants": 200,"applicantsQualifier": "over","salaryMin": 155000,"salaryMax": 160000,"salaryCurrency": "USD","salaryPeriod": "year","employmentType": "Full-time","industries": "Technology, Information and Internet","applyType": "external","sponsorSignal": "strong","sponsorNote": "Whatnot Inc.: 41 certified H-1B/E-3 LCAs in FY2026 (year in progress), 95 in FY2024–FY2026, 11 certified PERM. Closest filed title: \"Software Engineer\" (53 filings, median wage $205,000).","h1bEmployer": "Whatnot Inc.","h1bCertifiedLatestFY": 41,"h1bCertifiedTotal": 95,"similarFiledTitle": "Software Engineer","similarTitleMedianWage": 205000,"ukLicensed": null,"ukMatchBasis": "unconfirmed","possibleMatches": [{"name": "Whatnot Global Limited", "country": "UK", "score": 0.85, "matchType": "prefix"}]}
The dataset has three views (Jobs, Details, With company details) and exports to JSON, CSV, Excel or HTML. The run's SUMMARY record shows jobs returned and skipped, with the reasons.
What the job ad says about sponsorship and relocation
See which ads offer a visa or relocation help, and which rule it out, with the quoted sentence to check. They are read from the full job description, so they are filled when includeDetails is on (the default) and null for card-only rows.
| Field | Values |
|---|---|
adSponsorship | offers ("visa sponsorship available"), conditional ("where applicable", "case by case", "for exceptional candidates"), refuses ("unable to sponsor", "must already have the right to work in the UK") or not-mentioned |
adRelocation | offers ("relocation package provided"), conditional, refuses ("Relocation Package: No", "candidates must be based in the UK") or not-mentioned |
adEvidence | The sentence from the ad behind the call (up to 250 characters, contact details removed); null when the ad says neither |
Vague wording is not counted, sponsorship of a security clearance is not visa sponsorship, and when an ad both offers and refuses, the refusal wins. These columns come from the ad's own text and are separate from the employer's filing record. Set includeAdSignals to false to leave them out.
{"adSponsorship": "conditional","adRelocation": "offers","adEvidence": "Visa sponsorship may be available for exceptional candidates. | A relocation package is provided."}
Pricing
You pay per job returned, with details and sponsorship flags included. There is no charge for Apify platform usage on top.
| Row | Free and Starter | Scale | Business |
|---|---|---|---|
| Job | $1.00 per 1,000 | $0.75 per 1,000 | $0.55 per 1,000 |
Add-on: company details (only with includeCompany, companySizes or industries) | $1.00 per 1,000 | $0.75 per 1,000 | $0.55 per 1,000 |
Plus $0.00005 per run start. Apify's free $5 monthly credit covers about 5,000 jobs. Free-plan runs stop at 1,000 jobs each; any paid Apify plan removes the cap.
What's free: jobs left out by any filter (including only-with-evidence), a job found by two of your searches (returned and charged once), jobs skipped by onlyNew, searches LinkedIn answers with unrelated jobs, and company details for a job whose company page LinkedIn wouldn't show. To cap a run's spend, set Maximum cost per run in the run options: it pays for each job in full (job plus company details) before the job is stored.
Limits
- Logged-out only. It reads LinkedIn's public guest job pages, what any visitor sees without an account. It never logs in and never asks for your cookies.
- About 1,000 results per search is LinkedIn's own cap. Split broad searches by location.
- Write locations in English ("Tokyo, Japan", not "東京"). LinkedIn's public search may not recognise other scripts and then shows jobs from elsewhere; the run warns you.
- Experience level, job type and remote filters are ignored by LinkedIn's public search, so they are applied afterwards from each job's page (
seniority,jobTypes,workplaceTypes). That is slower, and many employers leave the level as "Not Applicable" or never say where you'd work, so a narrow filter can keep only a few jobs in a hundred. applyUrlis filled for Easy Apply jobs. LinkedIn shows an employer's own apply link only to signed-in members, so forexternaljobs it isnull; openjobUrlto apply.workplaceTypecomes from what the posting itself says: a "(Remote)" location, a title tag like "- Remote", a header line like "London | Hybrid", or an explicit sentence ("fully remote", "in the office at least three days a week"). LinkedIn's own workplace label is shown only to signed-in members, so a job that never says staysnullrather than guessed.- Salary appears only when the employer published one.
- Company details come from public LinkedIn company pages, read once per company per run. Now and then LinkedIn asks for a sign-in instead; after a fresh-connection retry the job comes back with
companyEnriched: falseand isn't charged for them. With a size or industry filter, such a job is left out. - Staffing agencies are flagged with the agency's own filings, not those of the client they hire for.
- US filing data is refreshed quarterly; the latest fiscal year is partial.
- Time limit: if a run nears its timeout, it stops, keeps what it found and says so in the status message.
Only new since last run, and schedules
Turn on onlyNew in a saved task and schedule it daily: each run returns only jobs that an earlier run of the same search didn't return. You get a job alert and never pay twice for the same job. Skipped jobs cost nothing. Set up a schedule under Schedules in Apify Console.
Integrations: API, n8n, Make and AI agents
API. Run it and get the rows back in one call:
curl -X POST "https://api.apify.com/v2/acts/locaihost~linkedin-jobs/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["data analyst"], "locations": ["London"], "maxJobsPerSearch": 25}'
Apify's API clients for Python and JavaScript work the same way.
n8n, Make, Zapier, Google Sheets, Slack, webhooks. Apify's built-in integrations send each run's dataset wherever you need it.
AI agents (MCP). Add this Actor to Claude, Cursor or any MCP client with https://mcp.apify.com/?tools=locaihost/linkedin-jobs, then ask something like "Find data analyst jobs in Seattle posted this week at companies that file H-1B visas for analysts."
FAQ
How much does it cost to scrape LinkedIn jobs?
$1 per 1,000 jobs on the Free and Starter plans, details and sponsorship flags included, and less on Scale and Business. Company details are an optional add-on at the same price per job. Apify's free $5 monthly credit covers about 5,000 jobs.
Can I use it through the API or from Python?
Yes. Use the run-sync-get-dataset-items call above, or Apify's Python and JavaScript clients. Every run's data is also available as JSON, CSV or Excel from its dataset.
Can I use it from an AI agent?
Yes. Through the Apify MCP server (https://mcp.apify.com/?tools=locaihost/linkedin-jobs) any MCP client can run a search and read the jobs back.
Is it legal to scrape LinkedIn jobs?
The Actor reads only LinkedIn's public guest job and company pages, which anyone can see without an account, plus public US Department of Labor files and the UK sponsor register. It never logs in. LinkedIn's own terms restrict automated access, so weigh that for your use. Recruiter and hiring-team cards are removed before anything is read, and email addresses, phone numbers and the poster's name are scrubbed from descriptions (a person named in an ad's free text with no poster card is not detected). Company details are business facts only. You are responsible for how you use the results, including data-protection rules that apply to you.
Does "no filings found" mean the company doesn't sponsor visas?
No. It means no H-1B, PERM or UK licence record was found under that name. A company can file under a different legal entity; big brands are mapped to their legal names (Meta to Meta Platforms, Inc.), but not every one is.
Does it tell me if a job is remote or hybrid?
Yes, when the job says so. workplaceType is on-site, remote or hybrid, and workplaceTypeSource says where it was read: the location, the title or the description. Add workplaceTypes: ["remote", "hybrid"] to keep only those jobs; jobs left out are not charged. In our tests in October 2026, about 4 in 10 US and UK tech jobs stated a type.
Does it give the employer's own apply link?
It tells you how each job is applied for: applyType is easy-apply (LinkedIn's own form) or external (the employer's site). For logged-out visitors LinkedIn puts the employer's link behind its sign-in window, and this Actor never signs in, so for external jobs applyUrl is null and jobUrl takes you to the Apply button. For Easy Apply jobs applyUrl is the LinkedIn job page where the form opens.
Why are some fields empty?
Salary appears only when the employer published one, many jobs never say whether they are remote, and company details are filled only when you turn them on. Sponsorship fields are null when no filing matched.
More from locaihost data
- H1B and UK Visa Sponsor Lookup: check a list of employers' sponsorship records directly, without a job search.
- LinkedIn Company Scraper: full public company pages for the employers you found.
- Indeed Jobs Scraper: the same kind of job search on Indeed, with sponsorship flags.
- Google Jobs Scraper: jobs from many boards at once through Google's job search.
Did it help?
If this saved you time, a quick rating on the Store helps other people find it.
Support
Something not working, or a field you need? Open an issue on the Issues tab: we answer issues within 24 hours.