- Integration overview
- Integration steps
- 1. Sign a Developer Agreement with Indeed
- 2. Authenticate
- 3. Create an XML feed
- 4. Configure Indeed Apply for your jobs
- 5. Add Indeed Apply screener questions
- 6. Receive application data from Indeed
- 7. Test your Indeed Apply configuration
- 8. Monitor integration health
- 9. Submit your XML feed for review
- 10. Send disposition data to Indeed
- See also
- Guides
- GraphQL API references
Indeed Apply integration guide for direct employers
Integrate with Indeed Apply, for direct employers and third parties acting on their behalf.
- 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 direct employers. If you send an XML feed, with or without Indeed Apply, follow these guidelines.
Your XML feed controls how your jobs appear on Indeed. Adding Indeed Apply lets job seekers apply more easily, which can help you hire faster.
If you have questions, contact your Client Success representative. If you don't have one, use this web form (opens in a new window).
To integrate with Indeed Apply, you need:
- A signed Developer Agreement between your company and Indeed. See 1. Sign a Developer Agreement with Indeed.
- 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.
- Single requester rule: Only the party that builds the integration can request and hold the API key or SFTP credentials. Indeed doesn't allow proxy requests, where an employer requests a key for a third-party integrator.
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. 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 your Client Success representative to set up feed publishing and updates, and to review feedback and required fixes.
Integration steps
#1. Sign a Developer Agreement with Indeed
#Sign a Developer Agreement with Indeed, then submit an integration request through Become an Indeed partner (opens in a new window).
After Indeed approves your account, Indeed gives you access and sends you a questionnaire about your integration.
2. Authenticate
#Japan only
#- 1.Sign in to your Indeed account on Manage app credentials (opens in a new window), then select Register new application.
- 2.Enter your app name and description, select Indeed Apply as the credential type, then select Save and continue.
- 3.Select Complete registration.
To get your Indeed Apply token, return to Manage app credentials. Use the client ID as the token.
Outside of Japan
#To build an Indeed Apply XML integration, contact the Indeed Client Success team (opens in a new window). After you sign the Developer Agreement, Indeed creates an app that connects Indeed APIs and services to your product.
To view your app and Indeed Apply API token, sign in to Partner Console (opens in a new window):
- Use the client ID and client secret as the API token credentials.
- Include this API token in each job you post to Indeed.
3. 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 you create job listings in your system, your XML feed sends them to Indeed.
An XML feed includes:
- Basic feed nodes — Define general feed details, such as the XML version and encoding.
- Job feed elements — Define job-specific details. Include one set of these elements for each job that you want to appear 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.
4. Configure Indeed Apply for your jobs
#To let job seekers apply quickly on 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.
5. 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:
- Format your questions in JSON.
- Host them at an HTTPS URL.
- In each
<job>, put that URL in<indeed-apply-questions>inside<indeed-apply-data>.
Schema versions
#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.
-
Keep the questions file under 1 MB.
-
Use a unique URL for each question file. Indeed caches question files and refreshes them 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.
-
Don't ask for unnecessary personally identifiable information (PII) in a job description or application.
6. 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 the JSON payload is missing a required key, return HTTP 400 instead.
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 employer 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 your Client Success representative.
7. Test your Indeed Apply configuration
#Use Indeed's testing tools to find issues in your integration 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
#On the tool's first tab, enter the Indeed Apply metadata from your XML and review it in the application flow. The Configuration section lists the parameters that the tool found in the XML.
Indeed Apply XML configuration testing tool - XML tab
#The tool also finds metadata errors that can make Indeed Apply fail, such as missing required parameters and formatting issues, and shows an alert for each one.
Example: Incorrect parameter format error
#Example: Missing parameter error
#On the second tab, enter parameters, and the tool generates the matching Indeed Apply XML metadata. You can also preview the job in the application flow.
After the tool generates the metadata, add it to your XML feed.
Configuration testing tool - Configurable parameters tab
#To add more parameters, select them from the list and fill them in. The tool adds them to the generated XML.
If you include your postUrl, you can go through the application flow and send a test application to that URL.
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 application flow.
Indeed Apply Questions tool
#Paste your full JSON file into the main field to find 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.
8. 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 jobs 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 your Client Success representative.
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.
9. Submit your XML feed for review
#To avoid delays, complete these checklists before you send your XML feed to your Client Success representative.
Pre-submission checklists
#XML file
#| Checklist | Confirm (Yes/No) |
|---|---|
Include all basic feed nodes, including the XML version and encoding: | |
Include a | |
Include every company associated with the jobs. | |
Don't include test jobs. | |
URL-encode all metadata URLs in the XML file, including | |
Don't include HTML escape characters such as | |
Include salary tags on all jobs. | |
Make sure that the external ID matches the career site content. | |
Include an |
Indeed Apply - Screener questions
#| Checklist | Details | Confirm (Yes/No) |
|---|---|---|
XML content | Include Indeed Apply parameters in each | |
URL-encode all URLs in the Indeed Apply parameters, including | ||
Send | ||
HTTP codes / Security for POST requests | Return HTTP | |
Return HTTP | ||
Return HTTP | ||
Return HTTP | ||
Return HTTP | ||
Return HTTP | ||
Verify the | ||
Use HTTPS for the Indeed Apply | ||
Alerts and logging | Enable alerts for
Provide an example of these logs as a screenshot or text file. | |
Enable alerts for Screener question logs should include:
Provide an example of these logs as a screenshot or text file. | ||
Job seeker application data delivery | Get the candidate's first and last name from | |
Capture and store uploaded CV files correctly. See the example. | ||
Capture and store Indeed Resume CV files correctly. See the example. | ||
Don't limit the application payload size. | ||
Screener questions | Follow the best practices for screener questions. | |
Capture and store cover letters and other documents in the application. See Applicant fields. | ||
Don't ask for PII, such as a full Social Security number (SSN), in screener questions. | ||
General requirements | Set the source of Indeed Apply applications to "Indeed". | |
Use the analytics field to categorize applications as organic, sponsored, or Indeed Targeted Ad. | ||
Make sure that your SSL certificate is valid and current. |
10. Send disposition data to Indeed
#Disposition data describes updates to an application in your system.
An update can be any change in your workflow after a candidate applies, such as a hire.
Sending disposition data helps you get better applications over time.
See also
#Guides
#- Application data reference — Fields in the application JSON
POSTbody. - Application data reference > applicant object fields — Fields that describe the applicant.
- Application data reference > Application payload with Indeed Resume example — Example
POSTbody when the applicant applies with an Indeed Resume. - Application data reference > Application payload with resume upload example — Example
POSTbody when the applicant uploads a resume file. - 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 reference — Parameters, examples, and restrictions for Indeed Apply in the XML feed.
- 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.
- Policy - Indeed Apply (opens in a new window) — Indeed's policy for applying to jobs directly on Indeed.
- 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.