- 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 agencies and third parties
Let clients turn on Indeed Apply for their jobs and send applications to the right platform.
- 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 agencies and third-party platforms.
When you integrate your platform with Indeed Apply, your clients can enable Easily apply on their job posts, and Indeed sends applicants to the right platform. Indeed Apply makes applying easier for job seekers and can help clients hire faster.
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 developer who knows your systems and HTTP, XML, and JSON.
- A way to publish and refresh the XML feed, such as FTP.
- A way to publish screener questions at an HTTPS URL.
- An Indeed Apply API token. See 2. Authenticate.
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 your clients' job listings 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. 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
#After you become a partner, Indeed creates an app for your integration. Get the app's Indeed Apply API token in Partner Console (opens in a new window). See Credentials.
Include this token in each job that 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 your clients create job listings in your system, your XML feed sends them to Indeed.
An XML feed includes:
| Item | Definition |
|---|---|
Basic feed nodes | General feed information, such as the XML version, encoding, and your platform details. |
Job feed elements | Job 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.
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 an applicant meets their requirements, 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 your integration doesn't break. Your screener question JSON doesn't need to match the minor schemaVersion.
Considerations
#-
You can ask up to 500 questions.
Conversion drops sharply after 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 new requests arrive when the cache is more than 1 hour old.
-
Employers can't ask for unnecessary personally identifiable information (PII) in a job description or application. For more information, see Maintaining User Safety (opens in a new window).
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-postUrlMake sure that your system returns an HTTP 2XX status code for every application that it 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 automatic 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 an Indeed application from the last 120 days has the same job ID and job seeker email.
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 part of the Applicant field contains contentType, data, and fileName.
Indeed determines contentType from the fileName.
The data field contains the raw resume file, encoded in Base64.
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 brackets ({}).
For code examples, see the Message signature generation reference.
Supported SSL certificates
#For supported certificates, see the Trusted root SSL certificates.
If your certificate isn't on the list, contact the Integrations Delivery Team (opens in a new window).
7. 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
#To test your integration before a job or integration goes live, use 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 the tool finds no errors, it shows Start testing. Select it to go through the application as a job seeker and submit a test application. If your postUrl is valid, Indeed sends the test application to it, so you can confirm that your system parses the JSON and shows the applicant information correctly.
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 JSON file into the main field of the tool to highlight formatting errors.
Error message examples
#Right-click the editor to run basic text commands.
Basic text commands
#For more advanced commands, such as those in VS Code, select 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:
- The integration successfully delivers job applications.
- 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 of your feed's job listings 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.
9. 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.
10. Send disposition data to Indeed
#Disposition data describes updates to an application in your platform.
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 data reference — Field reference for the application JSON
POSTbody. - Application delivery reference — HTTP status codes to return in your
POSTresponse. - Credentials — Your app uses credentials, such as an OAuth client ID and secret, to integrate with some services.
- Increase candidate quality, hire more efficiently (opens in a new window) — Indeed Apply is our candidate-friendly application process that helps you build your pipeline with more relevant candidates faster.
- Indeed Apply configuration parameters — When you configure Indeed Apply in the XML feed, follow these restrictions:
- Indeed Apply configuration reference — Parameters, examples, and restrictions to configure Indeed Apply through the XML feed.
- Indeed Apply Policy (opens in a new window)
- 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 — JSON screener question parameters.
- Maintaining User Safety (opens in a new window) — Indeed works to keep job seekers safe and protect their personal information.
- Message signature generation reference — Code samples for generating message signatures.
- Indeed Apply Policy (opens in a new window) — Indeed Apply lets people apply for jobs directly on Indeed.
- Trusted root SSL certificates — Root SSL certificates that Indeed Apply trusts.
- XML feed with <indeed-apply-data> — This example XML feed has one job with an
<indeed-apply-data>element.
GraphQL API references
#createSourcedJobPostings— Submits a job posting to Indeed.updateSourcedJobPostings— Updates a sourced job. Claim the job source before calling this mutation.