PracticeLink Job Scraper
Pricing
from $0.50 / 1,000 job from search results
PracticeLink Job Scraper
Scrape healthcare jobs from PracticeLink: physician, nurse and allied health openings with salary, visa sponsorship, requirements and recruiter phone numbers. Filter by profession, specialty, state and employer or search firm.
Pricing
from $0.50 / 1,000 job from search results
Rating
0.0
(0)
Developer
Muhammet Akkurt
Maintained by CommunityActor stats
2
Bookmarked
19
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share

PracticeLink Job Scraper extracts physician and healthcare jobs from PracticeLink, the job board for physicians and advanced practice providers, and turns every opening into structured data you can export to Excel, CSV or JSON. Filter by profession, specialty and state, or paste a PracticeLink search link, and get the full job description, salary range, J-1 and H-1B visa acceptance, loan assistance, requirements, posting dates and the recruiter's name and phone number for each job.
No coding needed: pick your filters and click Start. Developers can use it as a PracticeLink API from Python, Node.js or any HTTP client.
What can PracticeLink Job Scraper do?
- 🩺 Scrape physician jobs in every specialty, from family medicine and hospitalist to cardiology, plus locum tenens, nurse practitioner, physician assistant, CRNA, nursing, dental, pharmacy and therapy jobs: 63 professions and 194 specialties.
- 🔎 Filter by profession, specialty, state and who posted the job (employer or search firm), and sort by newest, oldest or distance from a city or ZIP code.
- 📋 Get the full job details for each opening, or a fast list of what the search results show.
- 🔗 Paste PracticeLink search and job URLs straight from your browser.
- ⏰ Schedule runs to collect new physician jobs every day and send them to Google Sheets, Make, Zapier, Slack or your own webhook.
- 💳 Pay only for the jobs you get. Runs stop at your spending limit and keep everything collected so far.
What data can you extract from PracticeLink?
| Group | Fields |
|---|---|
| Job | jobId, url, title, profession, specialty, category, employmentType, practiceType, recruitmentType (employer or search firm) |
| Employer | employer, employerId, employerType, employerUrl, employerLogo, facility, facilityId |
| Location | city, state, stateCode, postalCode, country |
| Pay and benefits | salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salaryNegotiable, loanAssistance, immigrationAssistance, acceptsJ1Visa, acceptsH1BVisa, telemedicine, academicOpportunity |
| Requirements | experienceRequirements, educationRequirements, occupationCode (O*NET-SOC) |
| Dates | datePosted, validThrough, verifiedDate, featured |
| Description | description (plain text), descriptionHtml |
| Recruiter | recruiter.name, recruiter.title, recruiter.phone, recruiter.altPhone, recruiter.fax, recruiter.organization, recruiter.address, recruiter.searchFirmPolicy |
Fields a posting does not fill in are left empty ("" or null). Salary appears only when the employer publishes it.
What people use PracticeLink data for
- Physician recruitment and staffing: build call lists of recruiters and employers hiring in a specialty or region.
- Physician salary research: compare posted salary ranges across specialties, states and employers.
- International medical graduates: find employers that accept J-1 or H-1B visas or offer immigration assistance.
- Job boards and aggregators: keep a feed of current openings with posting and expiry dates.
- Healthcare market analysis: track which health systems are hiring, where, and for what.
How to scrape PracticeLink jobs
- Open PracticeLink Job Scraper and choose Professions, Specialties and States, or paste a PracticeLink search link into Start URLs.
- Set Maximum jobs, and turn off Include job details if the search-result fields are enough.
- Click Start. The run's status shows how many jobs are stored so far.
- Download the jobs as Excel, CSV, JSON or HTML from the Storage tab, or read them through the API.
Input fields
| Field | What it does |
|---|---|
| Professions | One or more professions, from Physician and Nurse Practitioner to Occupational Therapist. Empty means all. |
| Specialties | One or more specialties, such as Cardiology or Family Medicine. Empty means all. |
| States | One or more states. Empty means everywhere. |
| Closest to | A city or ZIP code. Results come nearest first; this orders the search rather than narrowing it, so pair it with Maximum jobs. |
| Sort by | Newest first, oldest first, or nearest first (with Closest to). Empty: newest first, or nearest first when Closest to is set. |
| Posted by | Employers and search firms (default), employers only, or search firms only. |
| Maximum jobs | Stop after this many jobs; 0 collects everything the search finds. |
| Include job details | On (default): the full record above. Off: only what the search results list (title, employer, facility, location, specialty, job type, posted by), which is much faster and cheaper. |
Example: cardiology jobs in Texas and Oklahoma
{"professions": ["Physician"],"specialties": ["Cardiology", "Cardiology-Interventional"],"states": ["Texas", "Oklahoma"],"recruitmentType": "both","maxJobs": 200,"includeDetails": true}
Example: scrape a PracticeLink search or job URL
Set your filters on PracticeLink, copy the address of the results page and paste it into Start URLs. Single job pages work too. When start URLs are given, the filter fields are ignored.
{"startUrls": [{ "url": "https://jobs.practicelink.com/jobboard/jobsearchresults?Professions=Physician&Location=Ohio" },{ "url": "https://jobs.practicelink.com/jobs/1252009/addiction-psychiatry/physician/michigan/henry-ford-maplegrove-center/" }],"maxJobs": 100}
PracticeLink data output example
{"jobId": 1613605,"url": "https://jobs.practicelink.com/jobs/1613605/vascular-surgery/physician/california/marinhealth/","title": "Vascular Surgery - Premier UCSF-Affiliated Practice | Northern CA","profession": "Physician","specialty": "Vascular Surgery","category": "Physician-Vascular Surgery","employer": "MarinHealth.","employerId": 12935,"employerType": "Employer","employerUrl": "https://jobs.practicelink.com/employerprofile/marinhealth/","employerLogo": "https://cdn.practicelink.com/content/clientimages/12935/230206052509_mh_sm_h_pos_clr_rgb_190215.png","facility": "MarinHealth","facilityId": 66506,"recruitmentType": "Employer Direct","practiceType": "Not Specified","employmentType": "Full-Time","city": "Greenbrae","state": "California","stateCode": "CA","postalCode": "94904","country": "United States","salaryMin": 154700,"salaryMax": 405900,"salaryCurrency": "USD","salaryPeriod": "year","salaryText": "$154,700 - $405,900 a year","salaryNegotiable": false,"loanAssistance": "No","immigrationAssistance": "No","acceptsJ1Visa": false,"acceptsH1BVisa": false,"telemedicine": false,"academicOpportunity": false,"experienceRequirements": "","educationRequirements": ["MD or DO degree required"],"occupationCode": "29-1242.00","directApply": true,"datePosted": "2026-09-22","validThrough": "2026-12-21","verifiedDate": "2026-09-22","featured": false,"description": "MarinHealth Medical Network and the UCSF Department of Surgery are seeking a vascular surgeon to join a well-established, growing vascular surgery practice serving Marin County and the North Bay. This is an exceptional …","descriptionHtml": "<p style=\"margin: 0in 0in 7.5pt; background-notused: white; font-notused: 12pt; …","recruiter": {"id": 123456,"name": "Jane Smith","title": "Recruitment Consultant","phone": "(555) 010-0199","altPhone": "","fax": "","organization": "MarinHealth.","address": "Greenbrae, CA 94904","searchFirmPolicy": "Please, No Search Firm Solicitation"},"scrapedAt": "2026-09-23T20:58:59Z"}
The dataset has three views: Jobs, Recruiter contacts and Pay and visas. Export it to JSON, CSV, Excel, XML or HTML from the run's Storage tab, or read it through the Apify API.
How much does it cost to scrape PracticeLink?
PracticeLink Job Scraper is paid per result: a small fee when a run starts and a fee for every job it saves. Jobs with full details cost more than search-result-only jobs, since each one takes an extra page. The current prices are on the Pricing tab, and you can try the scraper on the Apify free plan.
To cap the cost of a run, set a maximum charge in the run options. When the run reaches it, it stops and keeps every job collected up to that point.
PracticeLink API: use the scraper from your code
Every run can be started and read through the Apify API. The API tab on this page shows ready-made requests for your account.
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("muhammetakkurtt/practicelink-job-scraper").call(run_input={"professions": ["Physician"],"specialties": ["Family-Medicine"],"states": ["Ohio"],"maxJobs": 100,})for job in client.dataset(run.default_dataset_id).iterate_items():print(job["title"], job["salaryText"], job["recruiter"])
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('muhammetakkurtt/practicelink-job-scraper').call({professions: ['Nurse-Practitioner'],states: ['California'],maxJobs: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((job) => job.title));
Integrations
Send PracticeLink jobs where you work: Google Sheets, Make, Zapier, Slack, Airbyte and more, or your own endpoint through webhooks. Pair a schedule with Sort by: newest to get a daily feed of new openings.
Tips
- Big searches: all physician jobs (over 30,000) take about half an hour with details on and under ten minutes with details off. Narrow by specialty or state when you need results fast.
- Repeat runs: jobs keep their
jobId, so you can compare runs and pick out new openings. - Proxy: usually not needed. If PracticeLink starts refusing requests, turn on Apify Proxy in the input.
FAQ
Is it legal to scrape PracticeLink?
The scraper collects job postings that PracticeLink publishes openly, without logging in. Use the data in line with PracticeLink's terms and the laws that apply to you, especially for recruiter contact details.
How do I get only new PracticeLink jobs?
Sort by newest (the default) and set Maximum jobs; each run then returns the most recently verified openings first. Schedule it daily and compare jobIds between runs.
Why do some jobs have no posting date?
Search-firm postings, about a third of physician jobs, are published without a posting date, closing date, education requirements or occupation code. Every job still has verifiedDate, the day the posting was last confirmed as open.
Does a restarted run duplicate jobs?
No. If the platform moves or restarts a run, it carries on where it stopped and does not store or charge a job twice.
Can I export PracticeLink jobs to Excel?
Yes. Open the run's Storage tab and download the dataset as Excel, CSV, JSON, XML or HTML, or pick the Recruiter contacts or Pay and visas view first to export just those columns.
Something is missing or not working
Open an issue on the Issues tab with the run link and what you expected. Requests for new fields or filters are welcome there too.
Other healthcare and job scrapers
- Naukri Job Scraper: jobs from Naukri.com in India and NaukriGulf in the Gulf, with salaries and recruiter details.
- Doctoralia Brazil Scraper: doctors and patient reviews from Doctoralia Brazil.
- Jameda Scraper: doctors and patient reviews from Jameda, Germany.
- ZnanyLekarz Scraper: doctors and patient reviews from ZnanyLekarz, Poland.