salarydr.com APIsalarydr.com ↗
Access physician and dentist salary submissions, specialty benchmarks, and state-level compensation data from SalaryDr via a structured REST API.
curl -X GET 'https://api.parse.bot/scraper/da296220-8000-41a3-a7d9-80fe1140d2ad/get_all_salary_submissions?limit=20&offset=0&specialty=Cardiology' \ -H 'X-API-Key: $PARSE_API_KEY'
Scrape paginated salary submissions for physicians. Supports filtering by role, specialty, state, practice type, and compensation range. Returns 20 submissions per page.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| role | string | Filter by role: 'physician', 'resident', or 'fellow'. Omitting returns all roles. |
| state | string | Filter by US state name (e.g. 'California', 'New York') |
| specialty | string | Filter by medical specialty (e.g. 'Cardiology', 'Internal Medicine') |
| salary_max | string | Maximum total compensation filter in dollars (e.g. '600000') |
| salary_min | string | Minimum total compensation filter in dollars (e.g. '400000') |
| practice_type | string | Filter by practice setting type (e.g. 'Academic', 'Hospital Employed', 'Private Practice') |
{
"type": "object",
"fields": {
"page": "current page number",
"count": "total number of matching submissions across all pages",
"submissions": "array of salary submission objects with full details including id, specialty, total_compensation, state, years_of_experience, practice_setting, etc.",
"total_pages": "total number of pages available"
},
"sample": {
"data": {
"page": 1,
"count": 3586,
"submissions": [
{
"id": 4229,
"state": "Ohio",
"specialty": "Internal Medicine",
"role_title": "Resident",
"base_salary": 67000,
"hours_worked": 72,
"submission_date": "2026-05-11T13:43:14.064+00:00",
"practice_setting": "Community",
"satisfaction_level": 4,
"total_compensation": 67000,
"years_of_experience": 1
}
],
"total_pages": 180
},
"status": "success"
}
}About the salarydr.com API
The SalaryDr API exposes 9 endpoints covering physician and dentist compensation data, including individual salary submissions, aggregated benchmarks, and specialty-level breakdowns. With get_salary_benchmarks_table you can retrieve median, average, and percentile statistics across all specialties or filtered to a single one. Endpoints accept filters for role, state, specialty, practice type, and compensation range, returning structured fields like total_compensation, years_of_experience, satisfaction_level, and by_employment_type.
Salary Submissions and Filtering
get_all_salary_submissions returns paginated physician salary submissions — 20 per page — and accepts filters for role (physician, resident, or fellow), state, specialty, practice_type, and a compensation range via salary_min and salary_max. Each submission includes fields such as specialty, total_compensation, state, years_of_experience, and practice_setting. For dentist data, get_dentist_salaries provides the same paginated structure scoped to dental submissions. To pull full metadata on a specific entry, get_salary_submission_detail accepts a submission_id and returns base_salary, role_title, satisfaction_level, and years_of_experience among other fields — though it only resolves IDs visible in the most recent result pages.
Benchmarks and Aggregated Statistics
get_salary_explorer_overview delivers site-wide aggregate stats: median_total_comp, average_total_comp, average_base, total_submissions, average_workload_hours, would_choose_again_percent, and percentile breakdowns at the 10th, 25th, 50th, 75th, and 90th percentiles. For specialty-scoped aggregates, get_benchmark_specialty_detail accepts a single specialty string and returns average_satisfaction, average_hours_week, salary_distribution as a percentile array, and by_employment_type statistics. get_salary_benchmarks_table provides a similar aggregate view with an optional specialty filter.
State and Specialty Cross-Filtering
get_specialty_salary_by_state accepts both state and specialty as required parameters and returns individual submissions plus an aggregate stats object for that intersection — useful for comparing what cardiologists earn in Texas versus what the national benchmark shows. get_all_specialties_list enumerates every specialty with at least one submission, returning a sorted array of names and a total count, which can be used to drive valid values for the specialty parameter across other endpoints. get_recent_salary_submissions returns the most recently submitted entries ordered by date, with an optional limit parameter up to 20.
Data Coverage Notes
All compensation figures come from self-reported submissions on SalaryDr. Coverage skews toward US physician and dentist roles. The satisfaction_level field uses a 1–5 scale, and would_choose_again_percent appears in the explorer overview. Submission counts vary by specialty and state; niche combinations may have sparse data. The get_salary_submission_detail endpoint only resolves IDs from the most recently indexed submissions, so historical ID lookups may return no result.
- Build a specialty salary comparison tool using
get_benchmark_specialty_detailto surface percentile ranges for each medical specialty. - Power a geographic compensation dashboard by querying
get_specialty_salary_by_stateacross all states for a given specialty. - Track physician satisfaction trends by reading
average_satisfactionandwould_choose_again_percentfrom the explorer overview over time. - Filter resident vs. attending compensation gaps using the
roleparameter inget_all_salary_submissions. - Identify private practice vs. hospital-employed salary differences using the
by_employment_typebreakdown in benchmark endpoints. - Enrich a job board with market salary context by matching a posting's specialty and state against
get_specialty_salary_by_stateaggregate stats. - Audit dentist compensation separately from physician data using
get_dentist_salariespaginated results.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does SalaryDr have an official developer API?+
What does `get_benchmark_specialty_detail` return beyond a simple salary number?+
get_benchmark_specialty_detail returns average_base, median_salary, average_salary, submission_count, average_hours_week, average_satisfaction, a salary_distribution array of percentile data points, and a by_employment_type breakdown — all scoped to the specialty you pass in the required specialty parameter.Can I look up salary data for any historical submission ID?+
get_salary_submission_detail only resolves IDs that appear in the most recently indexed submission pages. Older IDs that have cycled out of the current result set will not return data. For broad retrieval, use get_all_salary_submissions with pagination rather than ID lookups.Does the API cover allied health roles like nurse practitioners or physician assistants?+
Is there a way to filter dentist salary submissions by state or specialty the way physician submissions can be filtered?+
get_dentist_salaries currently supports only page for pagination and does not expose state or specialty filters. The physician endpoint get_all_salary_submissions supports those filters. You can fork the API on Parse and revise get_dentist_salaries to add the missing filter parameters.