- Overview
- Requirements
- Estimated time to develop and deploy
- Roadmap
- Generate an API token
- Create an XML feed
- Configure Indeed Apply for your jobs
- Add Indeed Apply screener questions
- Considerations
- JSON for screener questions
- Receive application data from Indeed
- Application delivery
- Application data
- Authentication of the POST request
- Supported SSL certificates
- Test your Indeed Apply configuration
- Test Indeed Apply application flow and applicant delivery
- Test your Indeed Apply XML metadata
- Test your Indeed Apply screener questions
- Monitor integration health
- Submit your XML feed for review
- Send disposition data to Indeed
ATS integration with Indeed Apply
Integrate with Indeed Apply for applicant tracking system (ATS) partners.
- By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Overview
These instructions help Indeed applicant tracking system (ATS) partners integrate with Indeed Apply.
-
When you integrate your ATS with Indeed, your clients can enable Easily apply on their job posts and send applicant information to their ATS. Indeed Apply improves the job seeker experience and helps your clients hire faster.
-
Before you integrate your ATS with Indeed Apply, sign a Developer Agreement with Indeed.
Requirements
To integrate your ATS with Indeed Apply, you need:
- A signed Developer Agreement between your company and Indeed. All integration builds must go through the formal integration request channel on Become an Indeed partner.
- A software developer who knows your systems and understands HTTP, XML, and JSON.
- A way to publish and refresh the XML feed that you build, such as FTP access.
- A way to publish job screener questions from your system to an HTTPS URL.
- An Indeed Apply API token. See Generate an API token.
Estimated time to develop and deploy
Work with integrated partners shows that this process usually takes about six weeks. This includes configuration, testing, review with Indeed, and deployment for client adoption.
With an XML integration, you configure and publish an XML feed to Indeed on a regular schedule. This lets you control how key job details appear on Indeed. To enable Indeed Apply on Indeed.com, add metadata to each job in the feed. This metadata surfaces screener questions in the Indeed Apply flow and tells Indeed where to send candidate information.
After you configure the XML feed with Indeed Apply metadata and optional screener questions, Indeed reviews the feed for technical quality and policy compliance.
To choose a method for publishing and updating the feed, and to review Indeed's feedback and required fixes, work with the Indeed Integrations Delivery team.
Roadmap
Complete these XML feed-based integration steps:
- Generate an API token
- Create an XML feed
- Configure Indeed Apply for your jobs
- Add Indeed Apply screener questions
- Receive application data from Indeed
- Test your Indeed Apply configuration
- Monitor integration health
- Submit your XML feed for review
- Send disposition data to Indeed
Generate an API token
When you become an Indeed partner, Indeed sets up an app that connects Indeed APIs and services to your product. To view your app and its Indeed Apply API token credentials, sign in to Partner Console. Your API token credentials are a client ID and secret. Provide this API token for each job that you post to Indeed.
Create an XML feed
To configure Indeed Apply for your ATS, create and maintain an XML feed. This XML document defines your jobs and how they appear on Indeed.
When your customers create job listings in your system, your XML feed sends those listings directly to Indeed.
An XML feed includes:
| Item | Define |
|---|---|
Basic feed nodes | General XML feed details, including the XML version, encoding, and ATS information. |
Job feed elements | Job-specific details. Include one set of these elements for each job that appears on Indeed. |
If you create a job through either the createSourcedJobPostings mutation or an XML job feed, expiration of the job requires an action on your part. You must explicitly expire that job.
Even if someone calls the updateSourcedJobPostings mutation or clicks Edit on the Indeed job details page for this job, you must explicitly expire that job.
See also:
See the Job Sync XML feed reference.
Configure Indeed Apply for your jobs
To help job seekers apply quickly from Indeed, use the Easily apply feature through Indeed Apply.
Jobs with Easily apply receive 12% more clicks. Indeed Apply also lets job seekers use their Indeed Resume, which simplifies the application process.
To configure Indeed Apply for your jobs:
- Add Indeed Apply configuration parameters to an
<indeed-apply-data>element for jobs in your XML feed. - Set a
postUrlvalue in the<indeed-apply-postUrl>parameter to accept applications from Indeed. - Verify that your system can parse and handle the application data.
For configuration parameters, see Indeed Apply configuration parameters.
For the <indeed-apply-data> element, see the Indeed Apply XML feed with <indeed-apply-data> element example.
For more information about Easily apply, see Policy - Indeed Apply and What does easily apply mean?
Add Indeed Apply screener questions
Screener questions help employers quickly decide whether applicants meet their criteria. When employers add screener questions, they can spend more time connecting with candidates.
Indeed does not host screener questions for you. If your system supports screener questions, you must implement them in Indeed Apply for your integration to be approved.
To show screener questions in the Indeed Apply flow, you can:
-
Format them in JSON and host them at an HTTPS URL that you include in each
<job>in the<indeed-apply-questions>parameter under the<indeed-apply-data>element.For details, see:
- Indeed Apply XML feed with
<indeed-apply-data>element example - Indeed Apply configuration reference
- Indeed Apply XML feed with
-
Call the Job Sync API to create a job posting with screener questions.
In January 2024, Indeed introduced schema versions for screener question configuration. As Indeed adds features, it makes minor version updates. The application payload shows the schema version as 1.X, such as 1.1 or 1.2. To avoid breaking your integration during major or minor upgrades, keep this value flexible. Your screener question JSON does not need to match the minor schemaVersion.
Considerations
-
You can ask up to 500 questions.
Data shows a sharp drop in conversion when you ask more than 20 questions.
-
Question files can be up to 1 MB.
-
Unique question URLs are cached on the server. Indeed refreshes them every 24 hours, or sooner if a new request arrives after the cache is more than one hour old.
-
When you implement resume standardization support and change the Question URL contents, which are the JSON data, switch to a new URL to clear the cache.
-
Indeed does not allow employers to request unnecessary personally identifiable information (PII) in a job description or during the application process. For more information, see Policy - Personally Identifiable Information (PII).
When a job seeker starts the Indeed Apply process and Indeed requests questions, Indeed caches the questions.
JSON for screener questions
For a list of parameters and examples of specific question types, see Screener questions.
Receive application data from Indeed
To receive application data from Indeed, specify a URL in the feed for each job.
Indeed sends candidate information for that job to this URL as JSON documents.
Application delivery
To process applications programmatically, specify a URL that accepts POST requests from Indeed Apply. The <indeed-apply-postUrl> parameter is a string that defines the URL where Indeed posts the application data. This URL must use HTTPS.
postUrl example
indeed-apply-postUrl=https%3A%2F%2Fyourposturl.comVerify that your system returns an HTTP 2XX status code for every application that it receives successfully. Indeed Apply treats any other HTTP status code, POST timeout, or connection timeout as a failure.
If Indeed does not receive an HTTP 2XX status code because of a connection timeout, POST timeout, or invalid HTTP response, Indeed retries the application. Indeed uses exponential backoff for automatic retries. If delivery still fails after the last retry, Indeed marks the application as a terminal failure.
Do not validate job application content during the POST. If you want to validate the content and disqualify the applicant, do that after the POST. If partner-side validation causes HTTP failures for job seeker data, Indeed might disable Indeed Apply for the company where the application was submitted or for the entire feed.
See the Application delivery reference.
Do not redirect the POST request to another URL, such as with a 301 or 302 response. Indeed Apply does not support redirects.
Duplicate applications
When you respond to the POST, treat an application as a duplicate only if it matches both of these conditions:
- It uses the same job ID.
- It uses the same job seeker email address as an Indeed application from the last 120 days.
Do not use applications that were originally submitted from another source when you determine whether an application is a duplicate. Do not treat an application as a duplicate if the same job seeker email applies to a different job ID at the same company.
Application data
Indeed sends application data in the raw body of the HTTP POST request, so you cannot process the request like a typical form. The request body contains a JSON document that you must read and parse. Indeed does not send every JSON field in every request, so use a robust JSON parser that treats missing fields as empty and ignores unrecognized fields.
A JSON payload has no maximum size.
The POST body uses UTF-8 encoding and includes an authenticity header that helps you verify that Indeed sent the application.
The file section of the Applicant field contains these fields: contentType, data, and fileName.
Indeed determines contentType from fileName.
The data field contains the raw resume file in Base64 encoding.
Your system must support these file types: .txt, .pdf, .doc, .docx, and .rtf.
If your system already stores a version of the provided resume, you must still store and use the updated version from the application JSON.
For application data details, see the Application data reference.
Authentication of the POST request
Indeed Apply sends a POST request to your postUrl with an HTTP header that you can use to verify that the POST is authentic.
Indeed uses the shared API secret for the Indeed Apply credential type and computes a message signature with the HMAC-SHA1 algorithm. Indeed sends this signature in the HTTP X-Indeed-Signature header.
To generate signatures, Indeed Apply uses the full unaltered JSON payload, including the curly braces ({}), and the shared secret.
For code examples that show how Indeed generates the message signature, see the Message signature generation reference.
Supported SSL certificates
For supported certificates, see the Trusted root SSL certificates.
If your certificate is not listed, contact the Integrations Delivery Team.
Test your Indeed Apply configuration
Indeed provides a number of tools that enable you to test the components of your Indeed Apply integration.
To identify and proactively correct integration issues, review these topics to learn about the available testing tools and resources.
Test Indeed Apply application flow and applicant delivery
To test your integration setup and verify that everything works before you launch a job or integration, use the Apply XML configuration testing tool.
You can enter your Indeed Apply XML metadata for a job into the tool, or the tool can generate XML metadata for you from configurable parameters. The tool identifies formatting and content errors so that you can quickly find issues.
If the tool finds no errors, it shows the Start testing button. Select it to review the application experience and submit a test application to verify that the process works correctly. If your postUrl is valid, the tool sends a test application with the application data payload to your postUrl. You can use that test application to verify that your system parses the JSON document correctly and that applicant information appears in your system as expected.
Test your Indeed Apply XML metadata
The first tab of the Indeed Apply XML configuration testing tool lets you enter Indeed Apply metadata from XML and review it in the Indeed Apply application flow. The Configuration section in this tab also lists every parameter included in the XML so you can see your detected job elements.
For the supported parameters, see the Indeed Apply configuration reference.
Indeed Apply XML configuration testing tool - XML tab

The tool also flags errors in your metadata that can break Indeed Apply. For example, the tool detects a missing required parameter or an incorrectly formatted file. In either case, the tool shows an alert.
Example: Incorrect parameter format error

Example: Missing parameter error

The second tab of the Apply XML configuration testing tool lets you fill in configurable parameters and generates the matching Indeed Apply XML metadata. You can also preview how the job appears in the application flow with the information you provide.
After the tool generates the metadata, add it to your XML feed. For an example, see Create an XML feed.

Indeed Apply XML configuration testing tool
Beyond the default parameters, you can add more parameters from a list of options. After you select and fill them in, the tool adds them to the generated XML.
This tool lets you mock up your Indeed Apply integration. Provide your postUrl within the Indeed Apply tags to walk through the application experience and post the application to the URL you specified in the tool's sample data.
Test your Indeed Apply screener questions
You can also use the Indeed Apply Questions tool to verify the syntax of your Screener Questions JSON file. This tool shows how screener questions appear in the Indeed Apply application flow.
Indeed Apply Questions tool

You can paste your entire JSON file into the main field of this interactive tool to highlight errors in formatting.
Error message examples

Right-click on the editor to run basic text commands.
Basic text commands

For more advanced commands, such as those in VS Code, open Command Palette or press F1.
More advanced commands

The tool also includes a link to this documentation so that you can review the relevant JSON parameters when needed.
After your JSON is formatted correctly, select Start testing to preview how your screener questions appear to job seekers.
Monitor integration health
When you integrate with Indeed Apply, set up monitoring to verify that:
- Your integration delivers job applications successfully.
- Your question files are valid and consistently available.
Indeed also monitors whether applications are delivered successfully to agency platforms or third-party platforms, as applicable, along with other integration health indicators. If problems occur, Indeed might contact you. In some cases, Indeed can disable Indeed Apply for some or all job listings in your feed until you fix the issues. Indeed does not lose undelivered applications. If delivery fails, Indeed automatically retries delivery at regular intervals after the original submission. If delivery still is not possible, Indeed retains applications for 60 days. You can request additional retries by contacting the Integrations Delivery Team.
If your integration supports screener questions, verify that the pages hosting those files stay available, do not redirect, and use the correct format.
Submit your XML feed for review
After you complete development, submit your XML feed to your technical point of contact for review, or request support through Partner Console.
Send disposition data to Indeed
Disposition data describes updates to an application in your ATS.
An update can be a change in a recruiter's workflow or an action that a recruiter or candidate takes after the candidate applies. For example, a candidate is hired.
When you send disposition data to Indeed, your clients receive higher quality applications over time.
See the Disposition Sync API Guide.