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.
  • US locations - City, State (for example, “San Francisco, CA”)
  • Non-US locations - City, Country/Region (for example, “London, United Kingdom”)
LinkedIn automatically maps this to a country/region and postal code unless those fields are provided. If the job needs to be posted in multiple locations, please ensure to fill out the 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.
  • US locations - City, State (for example, “San Francisco, CA”)
  • Non-US locations - City, Country/Region (for example, “London, United Kingdom”)
LinkedIn automatically maps this to a country/region and postal code unless those fields are provided. If the job needs to be posted in multiple locations, please ensure to fill out the 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:
  • City and country are mandatory for On-site and Hybrid jobs
  • For US based On-site and Hybrid jobs, City and State fields are acceptable
  • Remote jobs require either Country only, City and Country, or Country Cluster.
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 &lt;

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>

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.