PracticeLink Job Scraper avatar

PracticeLink Job Scraper

Pricing

from $0.50 / 1,000 job from search results

Go to Apify Store
PracticeLink Job Scraper

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

Muhammet Akkurt

Maintained by Community

Actor stats

2

Bookmarked

19

Total users

0

Monthly active users

8 days ago

Last modified

Share

PracticeLink Job Scraper

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.

  • 🩺 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.
GroupFields
JobjobId, url, title, profession, specialty, category, employmentType, practiceType, recruitmentType (employer or search firm)
Employeremployer, employerId, employerType, employerUrl, employerLogo, facility, facilityId
Locationcity, state, stateCode, postalCode, country
Pay and benefitssalaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryText, salaryNegotiable, loanAssistance, immigrationAssistance, acceptsJ1Visa, acceptsH1BVisa, telemedicine, academicOpportunity
RequirementsexperienceRequirements, educationRequirements, occupationCode (O*NET-SOC)
DatesdatePosted, validThrough, verifiedDate, featured
Descriptiondescription (plain text), descriptionHtml
Recruiterrecruiter.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.

  • 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.
  1. Open PracticeLink Job Scraper and choose Professions, Specialties and States, or paste a PracticeLink search link into Start URLs.
  2. Set Maximum jobs, and turn off Include job details if the search-result fields are enough.
  3. Click Start. The run's status shows how many jobs are stored so far.
  4. Download the jobs as Excel, CSV, JSON or HTML from the Storage tab, or read them through the API.

Input fields

FieldWhat it does
ProfessionsOne or more professions, from Physician and Nurse Practitioner to Occupational Therapist. Empty means all.
SpecialtiesOne or more specialties, such as Cardiology or Family Medicine. Empty means all.
StatesOne or more states. Empty means everywhere.
Closest toA city or ZIP code. Results come nearest first; this orders the search rather than narrowing it, so pair it with Maximum jobs.
Sort byNewest first, oldest first, or nearest first (with Closest to). Empty: newest first, or nearest first when Closest to is set.
Posted byEmployers and search firms (default), employers only, or search firms only.
Maximum jobsStop after this many jobs; 0 collects everything the search finds.
Include job detailsOn (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
}

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
}
{
"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.

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.

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 ApifyClient
client = 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

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.

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.

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