Development Guide
The LinkedIn XML feed contains the information required to ingest and post jobs on LinkedIn. To expedite your implementation process, as well as ensure the accuracy of your ingested jobs’ details, create the XML feed in the below format:
Creating the XML Feed
The XML feed contains two types of job elements:
- Mandatory
- Recommended
Mandatory Fields
Following is the list of fields that must be included on the Basic Jobs XML feed for the jobs to be considered as valid to be posted on LinkedIn:
- Job ID
- Company Name
- Job Title
- Job Description
- Location String
- Apply URL
- LinkedIn Company ID [Mandatory for Applicant Tracking Systems (ATSs)]
Job Posting Field Schema
This following table lists and describes the job fields supported by the Basic Jobs XML feed:
Note
Fields that are not mandatory are recommended.
Field Name | Field | Description | Mandatory | Value Type |
---|---|---|---|---|
Last Build Date | lastBuildDate | Most recent feed generation timestamp | No | String |
Publisher URL | publisherURL | Your public web presence | No | String |
Publisher | publisher | Your company name | No | String |
Expected Job Count | expectedJobCount | Expected job count for the next feed scrape | No | Integer |
Partner Job ID | partnerJobId | The unique ID used by the partner to reference the job within their own system | Yes | String (max. 40 chars) |
Company Name | company | Company name of the client (name of the employer) | Yes | String |
Job Title | title | Title of the job. This field cannot be changed once the job is posted | Yes | String |
Job Description | description | Description of job responsibilities. Requires a minimum of 100 characters to be considered as valid. Accepts a limited set of HTML tags | Yes | String (min. 100 chars) |
Apply URL | applyUrl | URL to which candidates are directed to apply (typically the URL of the job on the client's website or ATS system) | Yes | URL starting with "https://www" |
Company ID | companyId | Client's company ID on LinkedIn. This can be found in the Admin URL for the LinkedIn Page | Yes (for ATSs) | Refer Steps to identify numeric CO ID |
Location | location | This is a description of the job location.
alternateLocations field with various cities/locations. When posting a job for multiple locations, please be sure to include all locations in the alternateLocations field. The presence of this field will override any information entered in the locations field |
Yes | String |
AlternateLocations | alternateLocations | List of alternate job locations.
alternateLocations field with various cities/locations with no more than seven values. The presence of the alternateLocations field in a job feed will override the value of the locations field |
No | List of alternateLocation elements |
City | city | City of the job location (for example, “San Francisco”) | Yes, only if location is not provided | String |
State | state | State of the job location (for example, “California”) | Yes, only if location is not provided | String |
Country | country | Country of the job location (for example, “US”) | Yes, only if location is not provided | String Code from Country Codes |
Postal Code | postalCode | Postal code of the job location | No | String |
Is Remote Job | isRemote | Will be sunset on November 1, 2022. All feeds should include the workplaceTypes field instead. Whether a job is hiring remote applicants or not. Location (city and country) is a mandatory field for Remote jobs. Available options are: Yes, No | No | String |
Workplace types | workplaceTypes | Represents the workplace nature of the job. Available options: On-site , Hybrid , Remote . Location is mandatory for workplaceTypes:
|
No | String, On-site , Hybrid , Remote |
Industry Codes | industryCodes | List of industry codes for the company | No | List of industryCode elements |
Industry Codes> Industry Code | industryCodes/ industryCode | Represents industries of this job or company. Industry IDs are predefined by LinkedIn and can be retrieved from Industry Codes reference table | No | Numeric Industry ID from Industry Codes |
Experience Level | experienceLevel | Experience level of the job position to hire. Available options are: ENTRY_LEVEL, MID_SENIOR_LEVEL, DIRECTOR, EXECUTIVE, INTERNSHIP, ASSOCIATE, NOT_APPLICABLE | No | String Code from Experience Level Codes |
Job Functions | jobFunctions | List of job functions for this job | No | List of jobFunction elements |
Job Functions> Job Function | jobFunctions/ jobFunction | Represents job functions specific to this job (for example, Accounting, Marketing, Sales). Category names are predefined by LinkedIn and can be retrieved from Job Functions Codes reference table | No | String Code from Job Function Codes |
Job Type | jobtype | Employment status of the job position. Available options are: FULL_TIME PART_TIME, CONTRACT, INTERNSHIP, VOLUNTEER | No | String Code from Job Type Codes |
Skills | Skills | Add skills that are relevant for the job (up to ten). Our system converts the skills into LinkedIn standardized skills. For example, if your skill reads MS Office, the system converts it to standardized LinkedIn skill Microsoft Office. You can find supported LinkedIn standardized skills in the Recruiter manual job posting flow | No | List of skill elements |
Salaries | salaries | Provided salary for this job posting. Each <salary> object under the <salaries> list should represent a component of the total salary for the job | No | List of salary elements |
Salaries > Salary > High End/Low End > Amount | salaries/salary/ highEnd(lowEnd) /amount | The value for the higher/lower end of the range of the salary for this job posting | No | Integer |
Salaries > Salary > High End/Low End > Currency Code | salaries/salary/ highEnd(lowEnd) /currencyCode | The currency for the higher/lower end of the range of the salary for this job posting | No | String Code from Currency Codes |
Salaries > Salary > Period | salaries/ salary/period | The time period that this salary component is given at. Available options are: YEARLY, MONTHLY, SEMIMONTHLY, BIWEEKLY, WEEKLY, DAILY, HOURLY, ONCE | No | String |
Salaries > Salary > Type | salaries/ salary/type | The type of this salary component. Available options are: BASE_SALARY, TOTAL_ADDITIONAL | No | String |
List Date | listDate | The day the job was first posted on LinkedIn (MM/DD/YYYY) | No | String |
Expiration Date | expirationDate | The date on which the job is expected to close (MM/DD/YYYY) | No | String |
Remote and Workplace Type Fields
We will sunset the IsRemote
field on November 1, 2022. The IsRemote
field will be replaced by the workplaceTypes
field with three new workplace types:
- On-site
- Hybrid
- Remote
Below are the minimum location requirements for these workplace types:
Workplace Type | Minimum Location Requirements |
---|---|
On-site | City and Country |
Hybrid | City and Country |
Remote | Country only or City and Country |
In the scenario IsRemote
field is not removed from the XML feed by November 1, 2022, jobs marked Remote
through the IsRemote
field will be marked as Workplace Type as On-site
by default.
Formatting Guidelines
When you provide job descriptions in XML, we expect you to use the same HTML formatting from your website. Include your formatting in CDATA tags.
Note
We do not support escaped HTML entities. For example, use < instead of <
;
The following HTML tags are supported for description field. Other HTML tags will be stripped out, and their contents will be displayed as plain text.
Tag | Description |
---|---|
<b>, <strong> | Bold/Strong |
<u> | Underline |
<i> | italic |
<br> | Line Break |
<p> | Paragraph |
<ul> | Unordered List |
<li> | Ordered List |
<em> | Emphasized text(italics) |
XML Feed Considerations
LinkedIn recommends the following feed considerations:
- Ensure all required fields are populated correctly
- Ensure Partner Job Id has a maximum length of 40 characters to be considered as valid
- Ensure job descriptions have a minimum of 100 characters to be considered as valid
- Minimize the number of expired jobs in your XML feed
- Minimize the number of duplicate jobs in your XML feed
- Do not use your company name or other job boards’ company name in place of the name of the company that originally posted the job
- Include maximum information about the location such as full name of cities and countries/regions. Providing only a city name can be ambiguous
Requirement Considerations
LinkedIn recommends the following requirement considerations:
- Do not have duplicate jobs in feeds
- Do not close and reopen jobs repeatedly
- Do not use redirecting URLs for jobs
- LinkedIn only accepts jobs that are directly posted by employers on your platform. Once the member clicks the 'Apply' button for these jobs on LinkedIn, they should be directly taken to the site where they can complete the application process. Ensure to exclude jobs from the feed that are aggregated from other third-party sites
- A feed can contain maximum 500K jobs. However, for feeds with 500k jobs or more (large partners):
Split jobs into several feeds based on country/region location
Do not rotate jobs between feeds. Each feed should contain unique and consistent jobs to avoid having a job show on one feed today and later (or also) on another feed. Refer the below example of job rotation that may lead to errors at our end:
Day Source Job ID 1 partition1 123 1 partition2 456 2 partition1 No Job ID with 123 2 partition2 123
Example XML Feed
Spider Name: Jobs_xml
<?xml version="1.0" encoding="UTF-8"?>
<source>
<lastBuildDate>Thu, 11 Sep 2014 19:39:59 GMT</lastBuildDate>
<publisherUrl>[https://www.linkedin.com%3c/publisherUrl%3e]https://www.linkedin.com</publisherUrl>
<publisher>LinkedIn</publisher>
<expectedJobCount><![CDATA[5596]]></expectedJobCount>
<job>
<partnerJobId><![CDATA[12345]]></partnerJobId>
<company><![CDATA[LinkedIn]]></company>
<title><![CDATA[Staff Software Engineer - Applications]]></title>
<description><![CDATA[LinkedIn was built to help professionals achieve more in their careers, and every day millions of people use our products to make connections, discover opportunities and gain insights. Our global reach means we get to make a direct impact on the world’s workforce in ways no other company can. ... ]]></description>
<industry><![CDATA[Internet,Information Technology and Services]]></industry>
<applyUrl><![CDATA[https://www.linkedin.com/jobs/view/1234?trk=linkedin]]></applyUrl>
<companyId><![CDATA[xxxx]]></companyId>
<location><![CDATA[Sunnyvale, CA, US]]></location>
<alternateLocations>
<alternateLocation><![CDATA[Mumbai,IN]]></alternateLocation>
<alternateLocation><![CDATA[Delhi,IN]]></alternateLocation>
<alternateLocation><![CDATA[Bengaluru,IN]]></alternateLocation>
</alternateLocations>
<city><![CDATA[Sunnyvale]]></city>
<state><![CDATA[CA]]></state>
<country><![CDATA[US]]></country>
<postalCode><![CDATA[94085]]></postalCode>
<industryCodes>
<industryCode><![CDATA[120]]></industryCode>
<industryCode><![CDATA[125]]></industryCode>
</industryCodes>
<jobFunctions>
<jobFunction><![CDATA[eng]]></jobFunction>
<jobFunction><![CDATA[it]]></jobFunction>
</jobFunctions>
<experienceLevel><![CDATA[MID_SENIOR_LEVEL]]></experienceLevel>
<jobtype><![CDATA[FULL_TIME]]></jobtype>
<skills>
<skill><![CDATA[Java]]></skill>
<skill><![CDATA[Python]]></skill>
<skill><![CDATA[Oracle]]></skill>
<skill><![CDATA[SQL]]></skill>
</skills>
<salaries>
<salary>
<highEnd>
<amount>![CDATA[100000]]</amount>
<currencyCode>USD</currencyCode>
</highEnd>
<lowEnd>
<amount>![CDATA[50000]]</amount>
<currencyCode>USD</currencyCode>
</lowEnd>
<period>![CDATA[yearly]]</period>
<type>![CDATA[BASE_SALARY]]</type>
</salary>
<salary>
<highEnd>
<amount>![CDATA[50000]]</amount>
<currencyCode>USD</currencyCode>
</highEnd>
<lowEnd>
<amount>![CDATA[20000]]</amount>
<currencyCode>USD</currencyCode>
</lowEnd>
<period>![CDATA[yearly]]</period>
<type>![CDATA[TOTAL_ADDITIONAL]]</type>
</salary>
</salaries>
<workplaceTypes><![CDATA[On-site]]></workplaceTypes>
<listDate><![CDATA[08/28/2023]]></listDate>
<expirationDate><![CDATA[09/28/2023]]></expirationDate>
</job>
<job>
...
</job>
</source>
Referenced Links
- Country Code
- Industry Codes
- Job Function Codes
- Currency Codes
- Experience Level Code
- Job Type Codes
- Retrieving a LinkedIn Company ID: https://www.linkedin.com/help/linkedin/answer/a415420
Note
Ensure that the Company IDs are validated before being sent on the XML feed. Once ingested, it can only be updated if a new Company ID is updated on the feed for the same employer.