An XML or JSON feed for job offers is a structured data file that lists vacancy information in a machine-readable format, allowing job boards, aggregators, and search engines to automatically import, display, and index your open positions. Rather than manually posting each job to every platform, a single feed delivers all your listings to multiple destinations at once. The sections below cover everything from what goes inside a job feed to how platforms like Google for Jobs consume them and what to do when something goes wrong. At Openindex, we work with structured data feeds daily, so this guide reflects real-world experience rather than theory.
What types of data does a job feed typically contain?
A job feed typically contains the core details a candidate or platform needs to evaluate and display a vacancy: job title, job description, employer name, location, employment type, salary range, application URL, and publication and expiry dates. Most feeds also include a unique job identifier so platforms can track updates and removals without duplication.
Beyond these essentials, a well-structured vacancy feed often includes:
- Employment type (full-time, part-time, contract, temporary, internship)
- Remote work indicator (on-site, remote, hybrid)
- Education and experience requirements
- Industry or occupational category
- Application deadline
- Contact details or recruiter name
- Department or business unit
The richer the data in each listing, the more accurately job boards can match candidates to roles. Salary information in particular improves click-through rates significantly, and many aggregators now require it for premium placement. Structured job data that is complete and consistent also reduces the likelihood of a feed being rejected or partially imported.
How does a job feed get generated and delivered?
A job feed is generated by an applicant tracking system (ATS), a recruitment platform, or a custom-built backend that exports vacancy data in a structured format. Delivery typically happens via a publicly accessible URL that job boards and aggregators poll on a scheduled basis, usually every few hours or once a day.
There are two common delivery models:
- Pull-based feeds: The receiving platform fetches the feed from your URL at regular intervals. Your system simply keeps the file up to date, and the aggregator handles the rest.
- Push-based feeds: Your system actively sends updated data to the receiving platform, often through an API endpoint. This approach delivers faster updates but requires more integration work on your side.
For organisations managing hundreds or thousands of vacancies, automated feed generation is essential. The feed file is rebuilt whenever a new vacancy is added, an existing one is updated, or a position is filled and needs to be removed. Keeping expiry dates accurate is especially important because stale listings damage your reputation on aggregator platforms and confuse candidates.
What’s the difference between an XML feed and a JSON feed for jobs?
The core difference between an XML feed and a JSON feed for jobs is syntax and readability. XML uses nested tags to wrap each data element, while JSON uses key-value pairs inside curly braces. Both formats carry identical information, but JSON is generally lighter, easier to parse in modern applications, and preferred by most current APIs and platforms.
A simplified XML job listing looks like this:
<job><title>Software Engineer</title><location>Amsterdam</location></job>
The equivalent in JSON reads:
{“title”: “Software Engineer”, “location”: “Amsterdam”}
XML has been the dominant format for job board feeds for many years, and many established platforms still require or prefer it. Larger recruitment networks, older ATS integrations, and government job portals tend to use XML. JSON has become the standard for newer platforms, REST APIs, and Google’s structured data implementation for job listings. When choosing a format, follow the specification of the platform you are feeding. If you are building a feed from scratch and have flexibility, JSON is the more future-proof choice for job listing feeds.
Which job boards and aggregators accept XML or JSON feeds?
Most major job boards and aggregators accept XML or JSON feeds, though each platform has its own schema and technical requirements. Indeed, LinkedIn, Glassdoor, Jobbird, Nationale Vacaturebank, and Monsterboard all support feed-based imports, with XML being the most widely accepted format across the board.
Here is a general breakdown by platform type:
- Large international aggregators (Indeed, LinkedIn, Glassdoor): Accept both XML and JSON, with detailed feed specifications available in their publisher documentation.
- Dutch job boards (Nationale Vacaturebank, Jobbird, Intermediair): Primarily use XML feeds with platform-specific field mappings.
- Niche and industry boards: Requirements vary widely. Most accept XML; some accept JSON via API.
- Google for Jobs: Uses JSON-LD structured data embedded in job posting pages rather than a traditional feed file (covered in the next section).
Before building or submitting a feed, always download the feed specification from the target platform. Field names, required elements, and character encoding rules differ between aggregators, and a feed that works perfectly on one platform may be rejected by another due to a minor structural difference.
How does Google for Jobs use XML and JSON job feeds?
Google for Jobs does not consume a traditional XML or JSON feed file. Instead, it crawls individual job posting pages and reads structured data markup embedded directly in the page’s HTML using JSON-LD format. When Google detects valid job posting schema on a page, it can surface that vacancy in the dedicated Jobs panel within search results.
The structured data Google requires follows the Schema.org JobPosting specification and must include fields such as:
- title
- description
- datePosted
- validThrough (expiry date)
- hiringOrganization (employer name and logo)
- jobLocation or jobLocationType (for remote roles)
- baseSalary (strongly recommended)
- employmentType
This approach means that even if you use XML feeds to distribute vacancies to job boards, you still need JSON-LD markup on each job page to benefit from Google for Jobs visibility. The two systems work in parallel: the feed distributes your listings to aggregators, while the on-page schema markup gives Google the structured job data it needs to display your vacancies directly in search results.
What are common errors in job feeds and how are they fixed?
Common errors in job feeds include missing required fields, incorrect date formats, broken application URLs, duplicate job IDs, and encoding issues that corrupt special characters. These errors cause feeds to be partially imported, rejected outright, or displayed incorrectly on the receiving platform.
The most frequent problems and their fixes are:
- Missing required fields: Each platform specifies mandatory elements. Audit your feed against the platform’s schema documentation and ensure every required field is populated for every listing.
- Invalid date formats: Most platforms expect ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS). Dates written in local formats like DD-MM-YYYY are a common cause of parsing failures.
- Broken or redirecting URLs: Application URLs that return 404 errors or redirect through multiple hops cause listings to be rejected or removed. Test all URLs programmatically before publishing the feed.
- Duplicate job IDs: Each vacancy must carry a unique, stable identifier. If IDs are regenerated on every export, platforms treat each refresh as a new listing and accumulate duplicates.
- Character encoding errors: Feeds should be saved in UTF-8 encoding. Special characters in Dutch, German, or French job titles (such as accented letters) break feeds saved in other encodings.
- Stale listings: Vacancies that have been filled but remain in the feed damage your credibility with aggregators. Automate removal by tying feed generation directly to your vacancy status in the ATS.
Validating your feed with the platform’s own testing tool before submission catches most of these issues before they cause downstream problems.
How Openindex helps with XML and JSON job feeds
We build and maintain structured data feeds for organisations that need reliable, scalable distribution of vacancy data across job boards, aggregators, and search engines. Whether you need a feed built from scratch, an existing feed debugged, or a full crawling and indexing pipeline for job data, we have the technical depth to deliver it.
Working with us on your job feed infrastructure typically includes:
- Custom XML or JSON feed generation tailored to the specifications of your target platforms
- Automated feed updates connected directly to your ATS or vacancy database
- JSON-LD structured data implementation for Google for Jobs visibility
- Feed validation, error monitoring, and ongoing maintenance
- Crawling as a Service for organisations that need to collect and aggregate job data from external sources
- Data as a Service delivery for teams that want clean, structured vacancy data without managing the pipeline themselves
If you are dealing with feed errors, low match rates on aggregators, or want to expand your vacancy distribution without adding manual work, we are ready to help. Contact us to discuss your situation and find the right approach for your organisation.
Häufig gestellte Fragen
Can I use the same job feed for all platforms, or do I need a separate feed per job board?
You typically need platform-specific feeds because each job board has its own required fields, field names, and formatting rules. A smart approach is to maintain one master feed with all available data and transform it into platform-specific versions, rather than building and maintaining each feed independently from scratch.
How often should my job feed be updated?
Your feed should update whenever a vacancy is added, changed, or filled — ideally in near real-time or at least every few hours. Stale or inaccurate listings are one of the most common reasons aggregators penalise or deprioritise a feed, so tying feed generation directly to your ATS vacancy status is strongly recommended.
Do I need a job feed if I only have a few open positions?
If you’re posting fewer than 10–15 vacancies at a time, manually submitting to individual platforms may be sufficient. However, even at small volumes, a structured feed paired with JSON-LD markup on your job pages is worthwhile for Google for Jobs visibility, which requires no platform relationship to benefit from.
What's the fastest way to check if my job feed has errors?
Start with the feed validation tool provided by your target platform (e.g., Google’s Rich Results Test for JSON-LD, or Indeed’s Feed Validator). For broader checks, run your feed through an XML or JSON linter to catch syntax issues, and programmatically test all application URLs to confirm none are broken or returning errors.