- Integration overview
- Integration steps
- 1. Generate an API token
- 2. Create an XML feed
- 3. Configure Indeed Apply for your jobs
- 4. Add Indeed Apply screener questions
- 5. Receive application data from Indeed
- 6. Test your Indeed Apply configuration
- 7. Monitor integration health
- 8. Submit your XML feed for review
- 9. Send disposition data to Indeed
- See also
- Guides
- GraphQL API references
Indeed Apply integration guide for ATS partners
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.
Integration overview
#This guide is for applicant tracking system (ATS) partners.
When you integrate your ATS with Indeed Apply, your clients can enable Easily apply on their job posts, and Indeed sends applicants to their ATS. Indeed Apply makes applying easier for job seekers and helps your clients hire faster.
To integrate with Indeed Apply, you need:
- A signed Developer Agreement between your company and Indeed. Submit each integration request through Become an Indeed partner (opens in a new window).
- A software developer who knows your systems and HTTP, XML, and JSON.
- A way to publish and refresh your XML feed, such as FTP.
- A way to publish screener questions to an HTTPS URL.
- An Indeed Apply API token.
Integrations usually take about six weeks to configure, test, review with Indeed, and deploy.
For an XML integration, you regularly publish an XML feed to Indeed. The feed controls how job details appear on Indeed. To enable Indeed Apply, add Indeed Apply metadata to each job. The metadata adds screener questions to the application and tells Indeed where to send candidate information.
After you add the metadata and any screener questions, Indeed reviews the feed for technical quality and policy compliance.
Work with the Indeed Integrations Delivery (opens in a new window) team to choose how to publish and update the feed, and to review feedback and required fixes.
Integration steps
#1. Generate an API token
#When you become an Indeed partner, Indeed creates an app for your integration. To view the app's Indeed Apply credentials, a client ID and secret, sign in to Partner Console (opens in a new window). The client ID is your Indeed Apply API token. Include this token in each job that you post to Indeed.
2. Create an XML feed
#To configure Indeed Apply, create and maintain an XML feed: an XML document that defines your jobs and how they appear on Indeed.
When your clients create job listings in your system, your XML feed sends them to Indeed.
An XML feed includes:
| Item | Defines |
|---|---|
Basic feed nodes | General feed details, including the XML version, encoding, and ATS information. |
Job feed elements | Job-specific details. Include one set 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.
3. Configure Indeed Apply for your jobs
#To let job seekers apply quickly from Indeed, enable Easily apply with Indeed Apply.
Jobs with Easily apply get 12% more clicks. Job seekers can also apply with their Indeed Resume.
To configure Indeed Apply for your jobs:
- 1.For each job in your XML feed, add Indeed Apply configuration parameters to an
<indeed-apply-data>element. - 2.Set
postUrlin<indeed-apply-postUrl>so that Indeed can send applications to your system. - 3.Make sure that your system can parse the application data.
4. Add Indeed Apply screener questions
#Screener questions show employers whether applicants meet their criteria, so they spend less time screening and more time with candidates.
Indeed doesn't host screener questions. If your system supports them, you must add them to Indeed Apply before Indeed approves your integration.
To add screener questions to Indeed Apply, do one of these:
-
Host the questions as JSON at an HTTPS URL. In each
<job>, put that URL in<indeed-apply-questions>inside<indeed-apply-data>. -
Call the Job Sync API to create a job posting with screener questions.
Since January 2024, screener question configurations have a schema version. Indeed increases the minor version when it adds features. The application payload shows the version as 1.X, such as 1.1 or 1.2. Don't hard-code this value, so that version upgrades don't break your integration. Your screener question JSON doesn't need to match the minor schemaVersion.
Considerations
#-
You can ask up to 500 questions.
Conversion drops sharply when you ask more than 20 questions.
-
Question files can be up to 1 MB.
-
Indeed caches the question file for each unique URL. It refreshes the cache every 24 hours, or sooner if a new request arrives when the cache is more than 1 hour old.
-
To clear the cache after you change the JSON or add resume field standardization, use a new question URL.
-
Employers can't ask for unnecessary personally identifiable information (PII) in a job description or application.
JSON for screener questions reference
#For parameter lists and examples of question types, see Screener questions.
5. Receive application data from Indeed
#To receive application data, specify a URL for each job in the feed. Indeed sends the job's candidate information to this URL as JSON.
Application delivery
#To process applications automatically, use a URL that accepts POST requests from Indeed Apply. Set it in the <indeed-apply-postUrl> parameter. The URL must use HTTPS.
postUrl example
#indeed-apply-postUrl=https%3A%2F%2Fyourposturl.comReturn an HTTP 2XX status code for every application that your system receives. Indeed Apply treats any other status code, POST timeout, or connection timeout as a failure.
If Indeed doesn't get a 2XX status code, it retries the application with exponential backoff. If the last retry fails, Indeed marks the application as failed.
Don't validate the application content during the POST. To validate it or disqualify the applicant, do so after you accept the POST. If your validation causes HTTP failures, Indeed might disable Indeed Apply for the company or for your entire feed.
Don't redirect the POST request, such as with a 301 or 302 redirect. Indeed Apply doesn't support redirects.
Duplicate applications
#When you respond to the POST, treat an application as a duplicate only if both of these are true:
- It uses the same job ID.
- It uses the same job seeker email address as an Indeed application from the last 120 days.
Don't count applications from sources other than Indeed. An application from the same email to a different job ID at the same company isn't a duplicate.
Application data
#Indeed sends application data as a JSON document in the raw body of the POST request, so your system can't process it like a typical form. Read and parse the JSON. Not every application includes every field, so use a JSON parser that treats missing fields as empty and ignores unrecognized fields.
The JSON payload has no maximum size.
The POST body uses UTF-8 encoding. The request includes a header that lets you verify that Indeed sent it.
The file section of the Applicant field contains 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 has a saved version of the candidate's resume, store and use the version in the application JSON instead.
For application data details, see the Application data reference.
Authentication of the POST request
#Each POST request to your postUrl includes an HTTP header that lets you verify that it's authentic.
Indeed computes a message signature with the HMAC-SHA1 algorithm and your Indeed Apply shared API secret, and sends it in the X-Indeed-Signature header.
The signature covers the full, unaltered JSON payload, including the curly braces ({}).
For code examples, see the Message signature generation reference.
Supported SSL certificates
#For supported certificates, see Trusted root SSL certificates.
If your certificate isn't listed, contact the Integrations Delivery Team (opens in a new window).
6. Test your Indeed Apply configuration
#Indeed provides tools to test the components of your Indeed Apply integration. Review these topics to find the available tools and fix integration issues early.
Test Indeed Apply application flow and applicant delivery
#Before you launch a job or integration, test your setup with the Apply XML configuration testing tool (opens in a new window).
Enter a job's Indeed Apply XML metadata, or let the tool generate metadata from parameters that you choose. The tool finds formatting and content errors.
If it finds no errors, it shows Start testing. Select it to review the application experience and submit a test application. If your postUrl is valid, the tool sends a test application payload to that URL. Use it to confirm that your system parses the JSON and shows applicant information 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 application flow. The Configuration section lists every parameter 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 metadata errors that can break Indeed Apply, such as 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 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.
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 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 in the Indeed Apply tags to walk through the application experience and post the application to that URL with the tool's sample data.
Test your Indeed Apply screener questions
#Use the Indeed Apply Questions tool (opens in a new window) to check the syntax of your screener questions JSON and see how the questions appear in the Indeed Apply flow.
Indeed Apply Questions tool
#Paste your entire JSON file into the main field to highlight formatting errors.
Error message examples
#Right-click in the editor to run basic text commands.
Basic text commands
#For more advanced commands, such as those in VS Code, open the Command Palette or press F1.
More advanced commands
#The tool also links to this documentation, so you can look up JSON parameters.
When your JSON has no errors, select Start testing to preview your screener questions as a job seeker.
7. Monitor integration health
#Set up monitoring to make sure that:
- Your integration delivers job applications successfully.
- Your question files are valid and always available.
Indeed also monitors application delivery and other signs of integration health. If problems come up, Indeed might contact you. In some cases, Indeed disables Indeed Apply for some or all job listings in your feed until you fix the issues.
Indeed doesn't lose undelivered applications. If delivery fails, Indeed retries automatically. If delivery still fails, Indeed keeps the applications for 60 days. To request more retries, contact the Integrations Delivery Team (opens in a new window).
If your integration supports screener questions, make sure that the pages that host the question files are always available, don't redirect, and are formatted correctly.
8. Submit your XML feed for review
#When development is done, send your XML feed to your technical point of contact for review, or request support in Partner Console.
9. 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, such as a hire.
Sending disposition data helps your clients get better applications over time.
See the Disposition Sync API guide.
See also
#Guides
#- Application delivery reference — HTTP status codes to return in your
POSTresponse. - Disposition Sync API guide — Send application disposition data to Indeed.
- Increase candidate quality, hire more efficiently (opens in a new window) — How Indeed Apply helps you get more relevant candidates faster.
- Indeed Apply configuration parameters — Restrictions to follow when you configure Indeed Apply in the XML feed.
- Indeed Apply configuration reference — Parameters, examples, and restrictions for Indeed Apply in the XML feed.
- Indeed Apply Policy (opens in a new window) — Indeed Apply lets people apply for jobs directly on Indeed.
- Job Sync API guide > Job details page (signed in to Indeed) — How a job's searchable status appears on the job details page.
- Job Sync XML feed guide — Use an XML feed to define your jobs and how they appear on Indeed.
- JSON for screener questions reference — Parameters for screener questions in JSON.
- Maintaining User Safety (opens in a new window) — How Indeed keeps job seekers safe and protects their personal information.
- Message signature generation reference — Code samples for generating message signatures.
- Trusted root SSL certificates — Root SSL certificates that Indeed Apply trusts.
- XML feed with <indeed-apply-data> — Example feed with one job and an
<indeed-apply-data>element.
GraphQL API references
#createSourcedJobPostings— Submits a job posting to Indeed.updateSourcedJobPostings— Updates a sourced job posting. Claim the job source first.