XML Feed Documentation
Create and submit XML job feeds to automatically import radiologist and allied health job postings to RadiologyJobs.com
Last updated April 23, 2026Getting Started
1. Choose Your Position Type(s)
Your XML feed can include radiologist positions, allied health positions, or both types in a single feed. Each job specifies its position type with the positionCategory field.
2. Create Your XML Feed File
Use the XML templates below to create your job feed file. Each <jobPost> element represents one job posting. You can include multiple job postings within the root <jobs> element.
3. Host Your Feed
Your XML feed must be hosted at a publicly accessible URL. This can be:
A web server (e.g., https://yourcompany.com/jobs.xml)
A cloud storage service (AWS S3, Google Cloud Storage, etc.)
Any HTTPS URL that returns valid XML when accessed
Security Requirements: Your feed must not contain XML entity declarations (<!ENTITY>) or DOCTYPE definitions (<!DOCTYPE>). These are blocked for security reasons. Your feed URL must respond within 10 seconds or the request will timeout.
4. Submit Your Feed URL
Go back to the Job Feed page and enter your feed URL. You can test and validate your feed before submitting it.
5. Automated Processing
Once submitted, your feed will be:
Validated for proper XML structure and required fields
Processed immediately upon submission
Automatically refreshed every morning at 6am Eastern Time to keep your job listings current
How Job Credits Work
Updates Are Free
The most important thing to know: updating existing feed jobs does not consume any credits. Credits are only used when a new job is posted — either importing a brand-new job or reactivating a job that had previously been deactivated.
This means you can maintain your active job listings indefinitely through automatic refreshes (every morning at 6am Eastern Time) without worrying about credit consumption for updates.
Credit Consumption Rules
| Action | Credits Used | Details |
|---|---|---|
| Import NEW job from feed | 1 credit | Only jobs that don't already exist in your account |
| Update existing feed job | Free (0 credits) | Jobs previously imported from your feed get free updates |
| Reactivate inactive feed job | 1 credit | Bringing a previously-deactivated feed job back counts as a new posting and uses 1 credit. If no credits are available, the job's data is refreshed but the listing stays inactive until a credit is freed. |
| Deactivate job removed from feed | Free (0 credits) | Automatic deactivation when job is removed from feed |
Processing Order
When your feed is processed (automatically every morning at 6am Eastern Time or when you manually re-import), the system follows this order:
Deactivate missing jobs: Any previously-imported feed jobs that are no longer in the current feed are deactivated, freeing up their slots (free)
Update active feed jobs: Existing active feed jobs are refreshed with the latest data from your feed (free)
Refresh inactive feed jobs: Data for previously-imported jobs that are currently inactive is updated in place; the listing stays inactive at this stage (free)
Reactivate inactive feed jobs: Inactive feed jobs that are back in the current feed are brought live again — 1 credit per reactivation, capped at your available credits
Import new jobs: Jobs with a
jobIdNumberthat has never been posted before are imported — 1 credit per new job, using whatever credits remain after reactivations
Plan Types
Recurring Memberships (Slot-Based)
Recurring memberships work on a "slot" basis. You have a fixed number of active job slots (e.g., 10 jobs/month). Updates to existing jobs don't consume slots. When a job expires or is removed from your feed, the slot becomes available for a new job.
Example: A 10-job recurring membership with 7 active jobs means you have 3 slots available for new imports. Updating the 7 active jobs is free and doesn't affect your available slots.
One-Time Credits (Credit-Based)
One-time credits allow you to post individual jobs manually. Each credit allows posting one job, and credits expire after 1 year if unused. One-time credit plans do not include XML job feed access — the feed integration described on this page is available only on recurring and custom recurring memberships. One-time credit postings are created through the standard job posting form.
Important Technical Details
Job Matching: The system uses the
jobIdNumberfield to match feed jobs with existing jobs. Include a unique identifier for each job to enable proper updates.Data Preservation: When jobs are updated, all applications, candidate favorites, and analytics are preserved. Updates never affect existing candidate interactions.
Expiration Extension: Every update extends the job's expiration date by 60 days, ensuring active maintenance keeps jobs visible.
Manual Jobs Protected: Jobs created manually (not through the feed) are never touched by feed processing, even if they have the same job ID number.
Position Type Comparison
| Aspect | Radiologist Positions | Allied Health Positions |
|---|---|---|
positionCategory | Optional (defaults to 'radiologist') | Required: 'allied_health' |
| Specialty/Skills | specialty (18 options) | jobRole (86 options) |
| Job Nature | N/A | jobNature: clinical or non_clinical |
| Degrees | MD, DO, MD/DO | PhD, Masters, BS, BA, AS, None, ASST (T), ASST (R), Not specified |
| Board Status | boardStatus: BC, BE, BC/BE | N/A (not applicable) |
| Fellowship | fellowshipTraining: Required, Preferred, Not Required | N/A (not applicable) |
| Salary Type | Annual (predefined ranges), Daily (specific rates) | Annual (single range), Hourly (min/max decimal rates, e.g., 28.50 = $28.50/hour), Weekly (min/max rates, e.g., 1900 = $1900/week) |
| Salary Ranges | $300K - $1M+ | $25K - $400K+ |
XML Feed Templates
Choose a template below and copy it to create your XML feed. Replace the placeholder text with your actual job data.
<?xml version="1.0" encoding="UTF-8"?>
<jobs>
<jobPost>
<!-- positionCategory is OPTIONAL for radiologist (defaults to 'radiologist') -->
<positionCategory>radiologist</positionCategory>
<jobTitle>Interventional Radiologist - Partnership Track</jobTitle>
<jobDescription><![CDATA[
<p>Join our growing IR department with state-of-the-art equipment...</p>
<ul>
<li>Perform diagnostic and interventional procedures</li>
<li>Collaborate with multi-disciplinary teams</li>
</ul>
]]></jobDescription>
<shortDescription>BC/BE IR position with partnership opportunity in urban setting.</shortDescription>
<!-- RADIOLOGIST-SPECIFIC FIELDS (Required) -->
<specialty>Interventional Radiology</specialty>
<boardStatus>BC/BE</boardStatus>
<fellowshipTraining>Required</fellowshipTraining>
<city>Boston</city>
<state>MA</state>
<zipCode>02115</zipCode>
<degree>MD/DO</degree>
<compBenefits>
<compBenefit>Sign-on bonus</compBenefit>
<compBenefit>CME Allowance</compBenefit>
<compBenefit>Health Insurance</compBenefit>
<compBenefit>Retirement</compBenefit>
</compBenefits>
<jobFeatures>
<jobFeature>Call from home</jobFeature>
<jobFeature>Flexible schedule</jobFeature>
</jobFeatures>
<jobSettings>
<jobSetting>Partnership</jobSetting>
</jobSettings>
<!-- Work Schedule (Recommended): Full-Time, Part-Time, Per Diem, 1099 -->
<workScheduleTypes>
<workScheduleType>Full-Time</workScheduleType>
</workScheduleTypes>
<!-- Job Duration (Recommended): Permanent, Temporary, Temp-to-Perm, Locums -->
<jobDurationTypes>
<jobDurationType>Permanent</jobDurationType>
</jobDurationTypes>
<!-- Academic Position (Optional): Use for university hospitals, medical schools, and positions involving resident teaching or research. -->
<isAcademic>true</isAcademic>
<compensationType>Annual</compensationType>
<annualSalaryRangeStart>$500K - $599K</annualSalaryRangeStart>
<annualSalaryRangeEnd>$600K - $699K</annualSalaryRangeEnd>
<workplaceType>On-Site</workplaceType>
<acceptVisaCandidates>Yes</acceptVisaCandidates>
<jobIdNumber>RAD-IR-001</jobIdNumber>
<purchaseOrderNumber>PO-2025-001</purchaseOrderNumber>
<applyOnlineURL>https://example.com/apply/ir-001</applyOnlineURL>
</jobPost>
<!-- Radiologist Position with DAILY compensation -->
<jobPost>
<positionCategory>radiologist</positionCategory>
<jobTitle>Locum Tenens Diagnostic Radiologist</jobTitle>
<jobDescription><![CDATA[
<p>Seeking locum tenens diagnostic radiologist for 3-month coverage...</p>
<ul>
<li>General diagnostic imaging interpretation</li>
<li>Flexible start date</li>
<li>Coverage needed for leave of absence</li>
</ul>
]]></jobDescription>
<shortDescription>Locum tenens diagnostic radiologist needed for 3-month coverage.</shortDescription>
<!-- RADIOLOGIST-SPECIFIC FIELDS -->
<specialty>General Radiology</specialty>
<boardStatus>BC</boardStatus>
<fellowshipTraining>Not Required</fellowshipTraining>
<city>Phoenix</city>
<state>AZ</state>
<zipCode>85001</zipCode>
<degree>MD/DO</degree>
<compBenefits>
<compBenefit>Malpractice Insurance</compBenefit>
<compBenefit>Relocation Allowance</compBenefit>
</compBenefits>
<jobFeatures>
<jobFeature>No call</jobFeature>
<jobFeature>Flexible schedule</jobFeature>
</jobFeatures>
<jobSettings>
<jobSetting>Employed (non-partner)</jobSetting>
</jobSettings>
<!-- Work Schedule (Recommended): Full-Time, Part-Time, Per Diem, 1099 -->
<workScheduleTypes>
<workScheduleType>Full-Time</workScheduleType>
</workScheduleTypes>
<!-- Job Duration (Recommended): Permanent, Temporary, Temp-to-Perm, Locums -->
<jobDurationTypes>
<jobDurationType>Locums</jobDurationType>
</jobDurationTypes>
<compensationType>Daily</compensationType>
<dailyRateRangeStart>$2000</dailyRateRangeStart>
<dailyRateRangeEnd>$2500</dailyRateRangeEnd>
<workplaceType>On-Site</workplaceType>
<acceptVisaCandidates>No</acceptVisaCandidates>
<jobIdNumber>RAD-LOCUM-001</jobIdNumber>
<purchaseOrderNumber></purchaseOrderNumber>
<applyOnlineURL>https://example.com/apply/locum-001</applyOnlineURL>
</jobPost>
</jobs>Compensation Structure Details
The two position types use different approaches for specifying compensation ranges. Understanding these differences is crucial for creating a valid XML feed.
Radiologist Positions
Annual Compensation (Two-Selection Range Builder):
Select TWO predefined salary ranges to create a custom range
Uses
annualSalaryRangeStartandannualSalaryRangeEndfieldsExample: Start = "$500K - $599K" + End = "$600K - $699K" creates final range: $500K - $699K
<compensationType>Annual</compensationType>
<annualSalaryRangeStart>$500K - $599K</annualSalaryRangeStart>
<annualSalaryRangeEnd>$600K - $699K</annualSalaryRangeEnd>Daily Compensation (Two-Selection Range Builder):
Select TWO daily rate values to create a range
Uses
dailyRateRangeStartanddailyRateRangeEndfieldsExample: Start = "$2000" + End = "$2500" creates range: $2000 - $2500 per day
<compensationType>Daily</compensationType>
<dailyRateRangeStart>$2000</dailyRateRangeStart>
<dailyRateRangeEnd>$2500</dailyRateRangeEnd>Allied Health Positions
Annual Compensation (Single Complete Range):
Select ONE complete predefined salary range
Uses single
salaryRangefield (NOT salaryRangeStart/End)Example: "$100,000 - $149,000" is a complete range (cannot be customized)
<compensationType>Annual</compensationType>
<salaryRange>$100,000 - $149,000</salaryRange>Hourly Compensation (Min/Max Values):
Enter minimum hourly rate (required) and maximum hourly rate (optional)
Uses
hourlyRateMinandhourlyRateMaxfieldsValues are decimal numbers (e.g., 28.50 = $28.50/hour, USD assumed)
If max is omitted, it defaults to the min value (single rate)
<compensationType>Hourly</compensationType>
<hourlyRateMin>28.50</hourlyRateMin>
<hourlyRateMax>42.75</hourlyRateMax>Weekly Compensation (Min/Max Values):
Enter minimum weekly rate (required) and maximum weekly rate (optional)
Uses
weeklyRateMinandweeklyRateMaxfieldsWhole dollars between 290 and 10000, in $100 increments (e.g., 1900, 2000, 2100)
If max is omitted, it defaults to the min value (single rate)
Intended for travel assignments and other roles advertised on a weekly pay basis
<compensationType>Weekly</compensationType>
<weeklyRateMin>1900</weeklyRateMin>
<weeklyRateMax>2200</weeklyRateMax>Field Reference
Complete reference for all XML elements supported in your job feed.
Common Fields (All Position Types)
| Element | Required | Description | Accepted Values | Example |
|---|---|---|---|---|
jobTitle | Yes | The title of the job posting | Any text | CT/MRI Technologist |
jobDescription | Yes | Full description of the job (HTML allowed) | Any text, may contain HTML markup | <p>Join our growing department...</p> |
shortDescription | No | Brief description shown in search result cards. Aim for about 200 characters; longer values are accepted but may be truncated in the UI. | Any text (UI displays ~200 characters) | Seeking BC/BE Radiologist for busy practice. |
city | No | City where the job is located. Omit for a state-only (statewide) posting. | Any city name | Boston |
state | Yes | State where the job is located | 2-letter state code or Nationwide | MA |
zipCode | No | ZIP code where the job is located | 5-digit ZIP code | 02115 |
jobFeatures | Yes | Special features of the job (multiple values allowed) | 4-day work week Call from home Fellowship not required Flexible schedule Leadership Monday thru Friday only No call No Weekends None Outpatient-only Part-time Solo position Weekend call only | <jobFeature>Flexible schedule</jobFeature> |
acceptVisaCandidates | Yes | Whether visa candidates are accepted | Yes No | No |
jobIdNumber | Yes | Unique identifier from your job posting system | Any unique text or number | JOB-2025-001 |
purchaseOrderNumber | No | Purchase order number if applicable | Any text | PO-12345 |
applyOnlineURL | No | External URL for applications (if not using RadiologyJobs). Must use the http:// or https:// protocol. | Valid http:// or https:// URL | https://example.com/apply/job123 |
Position-Specific Fields
| Element | Required | Description | Accepted Values | Example |
|---|---|---|---|---|
positionCategory | Optional (defaults to radiologist) | Type of position - can be omitted for radiologist positions | radiologist | radiologist |
specialty | Yes | Primary specialty for radiologist positions | General Radiology Body Imaging Breast/Body Imaging Breast Imaging Cardiothoracic Imaging Cardiothoracic Radiology Cross Sectional Imaging Emergency Radiology Interventional Radiology MRI Musculoskeletal Imaging Neurointerventional Neuroradiology Nuclear Medicine Pediatric Radiology Teleradiology Telemammography Women's Imaging | Interventional Radiology |
boardStatus | Yes | Board certification status required | BC BE BC/BE | BC/BE |
fellowshipTraining | Yes | Fellowship training requirement | Required Preferred Not Required | Preferred |
degree | Yes | Degree required for the position | MD DO MD/DO | MD/DO |
jobSettings | Yes | Employment setting type (multiple values allowed) | Employed (non-partner) Partnership Teaching Opportunities | <jobSetting>Partnership</jobSetting> |
compBenefits | Yes | Compensation and benefits offered. At least one value is required. | Additional Perks Cash Balance Plan CME Allowance Educational Assistance Health Insurance Internal Moonlighting Loan forgiveness Malpractice Insurance None Productivity bonuses Relocation Allowance Retention Bonuses Retirement Sign-on bonus Stipend Production Bonuses | <compBenefit>Health Insurance</compBenefit>, <compBenefit>CME Allowance</compBenefit> |
compensationType | Yes | Type of compensation | Annual Daily | Annual |
annualSalaryRangeStart | Yes (when compensationType=Annual) | Annual salary range start | $300K - $399K $400K - $499K $500K - $599K $600K - $699K $700K - $799K $800K - $899K $900K - $999K $1,000,000+ | $500K - $599K |
annualSalaryRangeEnd | Yes (when compensationType=Annual) | Annual salary range end (should be >= annualSalaryRangeStart) | Same options as annualSalaryRangeStart | $600K - $699K |
dailyRateRangeStart | Yes (when compensationType=Daily) | Daily rate range start | $2000 $2100 $2200 $2300 $2400 $2500 $2600 $2700 $2800 $2900 $3000 $3100 $3200 $3300 $3400 $3500 $3600 $3700 $3800 $3900 $4000 $4100 $4200 $4300 $4400 $4500 $4600 $4700 $4800 $4900 $5000 $5100 $5200 $5300 $5400 $5500 $5600 $5700 $5800 $5900 $6000 | $2000 |
dailyRateRangeEnd | Yes (when compensationType=Daily) | Daily rate range end (should be >= dailyRateRangeStart) | Same options as dailyRateRangeStart | $2500 |
workScheduleTypes | Recommended | Work schedule arrangement (multiple values allowed). Optional for backward compatibility with legacy feeds that used the deprecated combined employmentTypes field; new feeds should always include it. | Full-Time Part-Time Per Diem 1099 | <workScheduleTypes><workScheduleType>Full-Time</workScheduleType></workScheduleTypes> |
jobDurationTypes | Recommended | Job duration/permanence (multiple values allowed). Optional for backward compatibility with legacy feeds that used the deprecated combined employmentTypes field; new feeds should always include it. | Permanent Temporary Temp-to-Perm Locums | <jobDurationTypes><jobDurationType>Permanent</jobDurationType></jobDurationTypes> |
isAcademic | No | Set to true for university hospitals, medical schools, and positions involving resident teaching or research. | true false | <isAcademic>true</isAcademic> |
workplaceType | Yes | Where the work is performed | On-Site Hybrid Remote | On-Site |
| Deprecated Element | Description | Accepted Values | Example |
|---|---|---|---|
employmentTypes (combined) | DEPRECATED: The old format mixing schedule, duration, and employment values in one field. Values are auto-split during import, but we recommend migrating to the new format. Use separate workScheduleTypes, jobDurationTypes, and employmentTypes fields. | Full-Time Part-Time Per Diem 1099 Permanent Temporary Temp-to-Perm Locums Academic | <employmentTypes><employmentType>Full-Time</employmentType><employmentType>Permanent</employmentType></employmentTypes> |
salaryRangeType | DEPRECATED: Use compensationType instead. Still supported for backward compatibility. | Annual Daily | Annual |
salaryRangeStart | DEPRECATED: Use annualSalaryRangeStart or dailyRateRangeStart instead. Still supported for backward compatibility. | Annual: $300K - $399K, $400K - $499K, $500K - $599K, $600K - $699K, $700K - $799K, $800K - $899K, $900K - $999K, $1,000,000+ | Daily: $2000, $2100, $2200, $2300, $2400, $2500, $2600, $2700, $2800, $2900, $3000, $3100, $3200, $3300, $3400, $3500, $3600, $3700, $3800, $3900, $4000, $4100, $4200, $4300, $4400, $4500, $4600, $4700, $4800, $4900, $5000, $5100, $5200, $5300, $5400, $5500, $5600, $5700, $5800, $5900, $6000 | Annual: "$500K - $599K" | Daily: "$2000" |
salaryRangeEnd | DEPRECATED: Use annualSalaryRangeEnd or dailyRateRangeEnd instead. Still supported for backward compatibility. | Same options as salaryRangeStart | Annual: "$600K - $699K" | Daily: "$2500" |
Migration Guide
| Instead of (deprecated) | Use (modern) | Note |
|---|---|---|
employmentTypes (combined) | workScheduleTypes + jobDurationTypes + employmentTypes | Split schedule (Full-Time, Part-Time, Per Diem, 1099) into workScheduleTypes, duration (Permanent, Temporary, Temp-to-Perm, Locums) into jobDurationTypes, and Academic into employmentTypes (optional) |
employmentTypes with Academic | isAcademic | Use <isAcademic>true</isAcademic> instead of <employmentTypes><employmentType>Academic</employmentType></employmentTypes> |
salaryRangeType | compensationType | Same values (Annual, Daily) |
salaryRangeStart | annualSalaryRangeStart or dailyRateRangeStart | Use annualSalaryRangeStart for Annual, dailyRateRangeStart for Daily |
salaryRangeEnd | annualSalaryRangeEnd or dailyRateRangeEnd | Use annualSalaryRangeEnd for Annual, dailyRateRangeEnd for Daily |
Allied Health Job Roles Reference
Complete list of all 86 allied health job roles accepted in the jobRole field. Use these exact values in your XML feed. Note: The same role can be classified as clinical or non-clinical depending on the employer's job context (specified in the jobNature field).