- Integration roadmap
- 1. Complete the integration prerequisites
- 2. Configure Indeed Apply for your jobs
- 3. Add Indeed Apply screener questions
- 4. Receive application data from Indeed
- Duplicate applications
- Application data
- Authentication of the POST request
- Supported SSL certificates
- 5. Code your integration
- 6. Validate and test your integration
- 7. Confirm your integration
- 8. Monitor integration health
- 9. Send disposition data to Indeed
Integrate with the Job Sync API
End-to-end guide to integrating the Job Sync API.
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Use the Job Sync API to create and manage job postings on Indeed and Indeed PLUS.
Work with hundreds of integrated partners shows that this process usually takes about six weeks. This includes configuration, testing, review with Indeed, and deployment for client adoption.
-
jobRequisitionIdis optional in the schema, but Indeed requires it when it differs fromjobPostingId.For Japanese job postings: Set it to the same value as the ID or
jobPostingId. -
Hiring manager and recruiter values in
SourcedJobPostingJobContactInputare optional in the schema, but Indeed requires them when available.
See also:
Integration roadmap
To submit an integration to Indeed for review:
| # | Step |
|---|---|
1. Complete the integration prerequisites
Before you integrate, complete these steps:
| # | Step | Note |
|---|---|---|
| 1. | Collect your clients' names and send them to Indeed. | Indeed helps you review existing client names. Later, you use these names in the |
| 2. | Complete and sign a Developer Agreement between your company and Indeed. Submit a formal integration request through Become an Indeed partner. | After Indeed approves your account, it enables your access and sends a questionnaire that asks about:
|
| 3. | Verify that you send each job with its public job description page URL. | Indeed crawls this URL to verify that it matches the job that you send. If you omit this URL, the integration can be delayed. |
| 4. | Log full requests and responses when you encounter an integration problem. | Provide these logs to Indeed to troubleshoot errors. |
Indeed requires the Job Sync API to be a comprehensive integration. You must send all publicly available jobs, or every job that appears on the client's career page, for each client. Clients can opt out, but if they do, you must expire and stop sending every job from that client.
When new, updated, or expired jobs go live on your clients' career sites, send those changes immediately. If Indeed does not receive a job update within 15 minutes, the job's visibility can be lowered. When you first send jobs through the API, you might have a large number of existing jobs. When you submit those jobs, send batches with fewer than 100 jobs.
2. Configure Indeed Apply for your jobs
When you integrate your ATS with Indeed, your clients can enable Easily apply on their job postings and send applicant information to their ATS. Indeed Apply improves the job seeker experience and helps your clients hire faster.
If you add Indeed Apply to one of your sandbox jobs, which is a job that you send to the sandbox source that Indeed provides, you can test Indeed Apply end to end in your software by going directly to the job and applying to it. Include screener questions in your testing.
To configure Indeed Apply for your jobs:
-
For each job, configure Indeed Apply information in the
SourcedJobPostingIndeedApplyInputobject fields.To accept application data from Indeed, set
SourcedJobPostingIndeedApplyInput.postUrlto the URL where Indeed sends application data. -
Verify that your system can parse and handle the application data.
See also:
3. Add Indeed Apply screener questions
Screener questions help employers quickly determine 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 for Indeed to approve your integration.
To show screener questions in the Indeed Apply flow, see Create job posting with screener questions.
4. Receive application data from Indeed
To receive application data from Indeed, specify a URL for each job. This URL receives candidate information as JSON documents for that job.
To process applications programmatically:
-
Receive application data from Indeed at the HTTPS URL that you define in the
SourcedJobPostingIndeedApplyInput.postUrlfield.For example:
"postUrl": "https://www.example.com/jobs" -
Verify that your system returns an HTTP
2XXstatus code for every application that it receives successfully. Indeed treats any other HTTP status code,POSTtimeout, or connection timeout as an error.If Indeed does not receive an HTTP
2XXstatus code because of a connection timeout,POSTtimeout, 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 thePOST. Errors caused by partner-side validation of job seeker data can cause Indeed to disable the integration.Do not redirect the
POSTrequest to another URL, such as with a301or302response. Indeed does not support redirects. See the HTTP status codes.
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 applications from the same job seeker email to a different job ID at the same company as duplicates.
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
contentTypefromfileName. - The
datafield contains the raw resume file in Base64 encoding. - Third-party systems must support these file types:
.txt,.pdf,.doc,.docx, and.rtf.
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.
See also:
SourcedJobPostingIndeedApplyInput.postUrlfield- HTTP status codes
- Application delivery
- Duplicate applications
- Application data
- Authentication of the POST request
- Supported SSL certificates
5. Code your integration
To code your integration:
- Use the simulated GraphQL environment to test the Job Sync API without using the production environment.
When Indeed enables your API access, it assigns a few source names and shares them with partners. Use only your assigned source name in the
SourcedJobPostingJobSourceInput.sourceNamefield for all test jobs.If you use any other string in the
sourceNamefield for test jobs, Indeed cannot validate those jobs. You must then expire those jobs before you send actual jobs.Make test jobs match real jobs. For example, do not use titles such as Fake test job, and include a real job description. When jobs use the sandbox source, Indeed hides them from job seekers.
If you add Indeed Apply to a sandbox job, which is a job that you send to the sandbox source that Indeed provides, you can test Indeed Apply end to end in your software by going directly to the job and applying to it. Include screener questions in your testing.
After your test jobs are error-free, review your sandbox jobs. On the Indeed Employer page, sign in to the account that you used to register your app, and then select the Jobs tab.
After Indeed validates your test jobs, it notifies you that you can send your existing batch jobs and live job updates for review.
Before you validate and test your integration, every non-test job must use a
sourceNamevalue that identifies the organization that owns the job.Production jobs must not use your Indeed-provided
<sourceName>test value.During testing, the Indeed team can give you a list of
sourceNamevalues that represent organizations associated with your jobs. When you send production jobs, use thosesourceNamevalues for jobs from those organizations. If you do not, clients might not find their jobs on Indeed, and your support requests can increase.For specific guidance about using
sourceName, see How do I distinguish employers in job postings?
6. Validate and test your integration
To validate and test your integration:
Verify that you do not receive any common GraphQL error codes when you send your current list of jobs.
Verify that HTML text in the
descriptionfield is not HTML-escaped.Include all companies in your jobs.
Indeed already has a list of most jobs, so missing companies can prevent your feed from going live.
Verify that you include all jobs available on your clients' career sites.
This includes jobs from sub-brands or subsidiaries of the parent company. If job volume differs between career sites and the API feed, visibility for jobs from your integration can be lowered.
Every job must have a unique URL in the
urlfield.Verify that job salaries, locations, and other metadata match the jobs on your career site.
Verify that the
jobRequisitionIdfor each job matches the requisition ID on your career site.Provide hiring manager or recruiter email addresses, if available.
Send expirations for all test jobs that you created during development.
Keep your jobs updated so that they match all data shown on your clients' websites.
Many partners include job type, such as full-time or part-time, job category, such as bakery, retail, or shipping, and full addresses on the career site.
Before Indeed makes Job Sync API feeds live, it checks API data against career sites to verify that the feed includes all available data. It delays launch until the API sends the same data that appears on the career site.
As part of the review, Indeed compares your integration against career sites. Send all career site data through your integration.
Complete the Indeed Apply checklist that Indeed shares with you.
To test different scenarios for different HTTP errors, see the HTTP codes / Security for post requests row in the checklist.
Use Indeed Apply Integration Tools: Test Indeed Apply Questions to validate screener question formatting and to submit an application to and verify your
postUrlvalue.
7. Confirm your integration
After your application meets these requirements, provide documentation with screenshots of the completed integration that show:
- Indeed branding and placement in the employer's integration menu
- How an employer submits a job with Indeed Apply
- How employer job analytics show source tracking for Indeed applicants
- How an employer disables Indeed Apply for jobs
After Indeed receives the documentation, reviews your integration, and approves it, you receive an email notification.
8. Monitor integration health
When you integrate with Indeed Apply, set up monitoring to verify that:
- The integration delivers job applications successfully.
- Question files are valid and consistently available.
Indeed also monitors whether applications are delivered successfully to ATS partners, 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 jobs 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.
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. 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.