Document Structure
Each XML document starts with the XML declaration using UTF-8 encoding:
<?xml version="1.0" encoding="UTF-8"?>
After the XML declaration, the document contains the root element /jobfeed. The allowed number of joblisting elements depends on the integration type:
- PUSH Integration: The document must contain exactly one
joblisting. See the PUSH Integration documentation. - PULL Integration: The document must contain one or more
joblistingelements. The XML feed is made available through a URL and retrieved by StepStone. See the PULL Integration documentation.
Element order inside each joblisting is significant because the schema uses xs:sequence. Produce child elements in the order shown in this guide.
Account Identification
Providing both company_id and user_id is recommended. When both identifiers are present, companydetails/companyname remains optional. If either identifier is missing, a non-empty companydetails/companyname must be supplied.
The company_id and user_id are provided by StepStone.
If jobs need to be submitted using only a company name and without company_id and user_id credentials, this feature must first be enabled by StepStone. Contact the Helpdesk team at helpdesk-jobfeed@stepstone.de to request activation.
When this feature is enabled, StepStone assigns the submitted job to the corresponding account and user. This additional assignment step may cause a delay in job posting because of additional validation steps.
user_id + company_id |
Company name | Accepted |
|---|---|---|
| Provided | Optional | Yes |
| Partial | Required | Yes (delay) |
| Missing | Required | Yes (delay) |
Node Reference
Every parent node, child node, and attribute is listed below. The XPath is shown below each node name.
| Node | Requirement | Occurrences | Datatype | Description |
|---|---|---|---|---|
| jobfeed Parent /jobfeed |
Required | 1 | complex | Root element. Contains exactly one joblisting for PUSH integrations and one or more joblisting elements for PULL integrations. |
| joblisting Parent /jobfeed/joblisting | Required | 1 (PUSH) 1..∞ (PULL) | complex | Represents one job record. PUSH documents contain exactly one joblisting. PULL documents may contain one or more joblisting elements. |
| reference_id Attribute /jobfeed/joblisting/@reference_id |
Required | 1 | xs:string | Unique reference for the job listing. |
| company_id Attribute /jobfeed/joblisting/@company_id |
Recommended | 0..1 | xs:string | Company identifier. Recommended together with user_id. If either identifier is missing, a non-empty companyname is required. |
| user_id Attribute /jobfeed/joblisting/@user_id |
Recommended | 0..1 | xs:string | User identifier. Recommended together with company_id. If either identifier is missing, a non-empty companyname is required. |
| action Attribute /jobfeed/joblisting/@action |
Required | 1 | restricted xs:string | Processing action. Accepted case-insensitively: INSERT, UPDATE, OFFLINE. |
| channel Child /jobfeed/joblisting/channel |
Required | 1 | ChannelType | StepStone channel identifier. Accepted value is DE. Matching is case-insensitive. |
| categorization Parent /jobfeed/joblisting/categorization |
Optional | 0..1 | complex | Groups optional repeatable categorization values. |
| experience Child /jobfeed/joblisting/categorization/experience |
Optional | 0..∞ | restricted xs:string | Experience category. Allowed values are case-insensitive. |
| contracttype Child /jobfeed/joblisting/categorization/contracttype |
Optional | 0..∞ | restricted xs:string | Contract category. Allowed values are case-insensitive. |
| contractime Child /jobfeed/joblisting/categorization/contractime |
Optional | 0..∞ | restricted xs:string | Working-time category. Allowed values are case-insensitive. |
| workpolicy Child /jobfeed/joblisting/categorization/workpolicy |
Optional | 0..∞ | restricted xs:string | Work policy. Allowed values are case-insensitive. |
| jobdetails Parent /jobfeed/joblisting/jobdetails |
Required | 1 | complex | Groups job content, locations, application target, and optional salary. |
| language Child /jobfeed/joblisting/jobdetails/language |
Required | 1 | LanguageType | Job content language. Accepted values are DE and EN. Matching is case-insensitive. |
| jobtitle Child /jobfeed/joblisting/jobdetails/jobtitle | Required | 1 | JobTitleType | Published job title. Max. 200 characters. |
| introduction Child /jobfeed/joblisting/jobdetails/introduction |
Required | 1 | xs:string | Introductory company or job text. |
| tasks Child /jobfeed/joblisting/jobdetails/tasks |
Required | 1 | xs:string | Job duties and responsibilities. |
| profile Child /jobfeed/joblisting/jobdetails/profile |
Required | 1 | xs:string | Candidate profile, skills, and qualifications. |
| weoffer Child /jobfeed/joblisting/jobdetails/weoffer |
Optional | 0..1 | xs:string | Benefits or employer offer. |
| additionalinfo Child /jobfeed/joblisting/jobdetails/additionalinfo |
Optional | 0..1 | xs:string | Additional contact information. |
| joblocations Parent /jobfeed/joblisting/jobdetails/joblocations |
Required | 1 | complex | Groups one to five job locations. |
| location Parent /jobfeed/joblisting/jobdetails/joblocations/location |
Required | 1..5 | complex | Represents one job location. countrycode and city are required. |
| countrycode Child /jobfeed/joblisting/jobdetails/joblocations/location/countrycode |
Required | 1 | xs:string | Country code of the job location. |
| city Child /jobfeed/joblisting/jobdetails/joblocations/location/city |
Required | 1 | xs:string | City name. |
| postalcode Child /jobfeed/joblisting/jobdetails/joblocations/location/postalcode |
Optional | 0..1 | xs:string | Postal or ZIP code. |
| streetname Child /jobfeed/joblisting/jobdetails/joblocations/location/streetname |
Optional | 0..1 | xs:string | Street name. |
| buildingnumber Child /jobfeed/joblisting/jobdetails/joblocations/location/buildingnumber |
Optional | 0..1 | xs:string | Building or house number. |
| apply Parent /jobfeed/joblisting/jobdetails/apply |
Required | 1 | complex / xs:choice | Application target. Include exactly one child: email or url. |
| email Child /jobfeed/joblisting/jobdetails/apply/email |
Choice | exactly 1 of 2 | xs:string | Application email address. Mutually exclusive with url. |
| url Child /jobfeed/joblisting/jobdetails/apply/url |
Choice | exactly 1 of 2 | xs:anyURI | Application URL. Mutually exclusive with email. |
| salary Parent /jobfeed/joblisting/jobdetails/salary |
Optional | 0..1 | complex | Salary block. If present, all four children are required. |
| minimum Child /jobfeed/joblisting/jobdetails/salary/minimum |
Conditional | 1 if salary exists | xs:decimal | Minimum salary amount. Must be strictly less than maximum. |
| maximum Child /jobfeed/joblisting/jobdetails/salary/maximum |
Conditional | 1 if salary exists | xs:decimal | Maximum salary amount. Must be strictly greater than minimum. |
| currency Child /jobfeed/joblisting/jobdetails/salary/currency |
Conditional | 1 if salary exists | restricted xs:string | Supported value: EUR, accepted case-insensitively. |
| period Child /jobfeed/joblisting/jobdetails/salary/period |
Conditional | 1 if salary exists | restricted xs:string | Allowed values are case-insensitive: hourly, daily, monthly, yearly. |
| layoutdetails Parent /jobfeed/joblisting/layoutdetails |
Optional | 0..1 | complex | Groups optional image and video presentation data. |
| images Parent /jobfeed/joblisting/layoutdetails/images |
Optional | 0..1 | complex | Groups optional header and background images. |
| header Child /jobfeed/joblisting/layoutdetails/images/header |
Optional | 0..3 | xs:anyURI | Header image URL. Up to three values are accepted. |
| background Child /jobfeed/joblisting/layoutdetails/images/background |
Optional | 0..1 | xs:anyURI | Background image URL. |
| video Child /jobfeed/joblisting/layoutdetails/video |
Optional | 0..1 | restricted xs:anyURI | Video URL containing YouTube, Vimeo or Wistia, case-insensitively. |
| companydetails Parent /jobfeed/joblisting/companydetails |
Conditional | 0..1 | complex | Company metadata. Required in practice when identifiers are incomplete because companyname must then be supplied. |
| companyname Child /jobfeed/joblisting/companydetails/companyname |
Conditional | 0..1 | xs:string | Optional when both company_id and user_id are present. Otherwise required and must contain non-whitespace text. |
| contract Parent /jobfeed/joblisting/companydetails/contract |
Optional | 0..1 | complex | Groups optional contract metadata. |
| name Child /jobfeed/joblisting/companydetails/contract/name |
Optional | 0..1 | xs:string | Contract name. |
| product Child /jobfeed/joblisting/companydetails/contract/product |
Optional | 0..1 | ProductType | Product name. Accepted values are AllJobs, Pro, Pro Plus, Pro Ultimate, Pro Campus, and Pro XXL. Matching is case-insensitive. |
| billing Parent /jobfeed/joblisting/companydetails/billing |
Optional | 0..1 | complex | Groups optional billing metadata. |
| ordernumber Child /jobfeed/joblisting/companydetails/billing/ordernumber |
Optional | 0..1 | xs:string | Order or purchase-order number. |
| costcenter Child /jobfeed/joblisting/companydetails/billing/costcenter |
Optional | 0..1 | xs:string | Cost-center identifier. |
| email Child /jobfeed/joblisting/companydetails/billing/email |
Optional | 0..1 | xs:string | Billing contact email. |
| reference Child /jobfeed/joblisting/companydetails/billing/reference |
Optional | 0..1 | xs:string | Internal or secondary billing reference. |
| comment Child /jobfeed/joblisting/companydetails/billing/comment |
Optional | 0..1 | xs:string | Free-text billing comment. |
| recruiter Parent /jobfeed/joblisting/companydetails/recruiter |
Optional | 0..1 | complex | Groups optional recruiter contact data. |
| position Child /jobfeed/joblisting/companydetails/recruiter/position |
Optional | 0..1 | xs:string | Recruiter role or position. |
| gender Child /jobfeed/joblisting/companydetails/recruiter/gender |
Optional | 0..1 | RecruiterGenderType | Recruiter gender code. Accepted values are M, F, and D. Matching is case-insensitive. |
| firstname Child /jobfeed/joblisting/companydetails/recruiter/firstname |
Optional | 0..1 | xs:string | Recruiter first name. |
| lastname Child /jobfeed/joblisting/companydetails/recruiter/lastname |
Optional | 0..1 | xs:string | Recruiter last name. |
| email Child /jobfeed/joblisting/companydetails/recruiter/email |
Optional | 0..1 | xs:string | Recruiter email address. |
| phone Child /jobfeed/joblisting/companydetails/recruiter/phone |
Optional | 0..1 | xs:string | Recruiter phone number. |
Allowed Values
The restricted values in this section are accepted case-insensitively. For example, INSERT, insert, and Insert are accepted for the action value.
/jobfeed/joblisting/@actionINSERTUPDATEOFFLINE/jobfeed/joblisting/channelDE/jobfeed/joblisting/categorization/experienceNO_EXPERIENCEEXPERIENCELEADERSHIP_EXPERIENCE/jobfeed/joblisting/categorization/contracttypeTEMPORARYFRANCHISEPERMANENT_CONTRACTTEMPORARY_CONTRACTTRAINEEFREELANCEAPPRENTICESHIPBACHELOR_DISSERTATIONINTERNSHIPSTUDENT_JOBDOCTORAL_THESISPROFESSIONAL_TRAINEESHIPTRADE_REPRESENTATIVE/jobfeed/joblisting/categorization/contractimeFULL_TIMEPART_TIME/jobfeed/joblisting/categorization/workpolicyHYBRIDFULL_REMOTEON_SITE/jobfeed/joblisting/jobdetails/languageDEEN/jobfeed/joblisting/jobdetails/salary/currencyEUR/jobfeed/joblisting/jobdetails/salary/periodhourlydailymonthlyyearly/jobfeed/joblisting/companydetails/contract/productAllJobsProPro PlusPro UltimatePro CampusPro XXL/jobfeed/joblisting/companydetails/recruiter/genderMFDImplementation Rules
- Company identification: send both
company_idanduser_idwhere available. If either is missing, send a non-emptycompanydetails/companyname. - Application target:
applymust contain exactly one child:emailorurl. - Salary:
salaryis optional. When included, sendminimum,maximum,currency, andperiod.minimummust be strictly less thanmaximum. - Locations: send between one and five
locationelements. Each requirescountrycodeandcity. - Categorization: all direct categorization children are optional and repeatable.
- Header images: send zero to three
headerelements.- Recommended minimum dimensions:
1140px × 456px. - Recommended aspect ratio:
5:2. - Recommended file size: approximately
500 KB. - Supported formats:
JPG,JPEG, andPNG.
- Recommended minimum dimensions:
- Video: when included, the URI must contain
youtube,youtu.be,vimeo, orwistia, case-insensitively. - CDATA: CDATA is recommended when using special characters, umlauts, or supported HTML markup. If CDATA is not used, special characters and umlauts must be encoded as numeric XML character references, for example
Äfor Ä oräfor ä. Named HTML entities such asäare not valid in XML unless they are declared in a DTD.
The following HTML tags are supported in introduction, tasks, profile, weoffer, and additionalinfo.
HTML tags that are not listed as supported are automatically filtered out by Stepstone.
| Tag | Description |
|---|---|
p | Defines a paragraph. |
strong | Defines important text. |
b | Defines bold text. |
i | Defines a part of text in an alternate voice or mood. |
u | Defines text that should be stylistically different from normal text. |
ul | Defines an unordered list. |
ol | Defines an ordered list. |
li | Defines a list item. |
br | Defines a single line break. |
em | Defines emphasized text. |
XML Validator
Paste a complete JobFeed XML document below and select Validate XML. The validator supports PUSH documents with exactly one joblisting and PULL documents with one or more joblisting elements. It validates every joblisting separately and lists every detected issue.
Example: The XML below represents a PUSH document with one joblisting. For a PULL feed, add further joblisting elements inside the same jobfeed root element.
Changelog
categorizationcategorization/experiencecategorization/contracttypecategorization/contractimecategorization/workpolicycompanydetails/billing/emailcompanydetails/billing/comment
@sender_id→@company_id@organisation_id→@user_idlayoutdetails/images/backgroundimage→layoutdetails/images/backgroundoffer→weoffercontactinfo→additionalinfo
jobdetails/apply/questionnairelayoutdetails/colorslayoutdetails/colors/backgroundlayoutdetails/colors/headlinecompanydetails/contract/durationcompanydetails/billing/companycompanydetails/billing/contactcompanydetails/billing/addressjobdetails/introduction/@titlejobdetails/tasks/@titlejobdetails/profile/@titlejobdetails/offer/@titlejobdetails/contactinfo/@title
action="TRANSLATE"is no longer supported.