- 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 the Indeed PLUS platform.
Experience with hundreds of integrated partners shows that it generally takes six weeks to configure, test, work with Indeed team members to review your integration, and deploy it 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, you must:
| # | Step | Note |
|---|---|---|
| 1. | Collect your clients' names and send them to Indeed. | Indeed helps you with existing client names. Later, you use these names in the |
| 2. | Complete and sign a Developer Agreement between your company and Indeed. Formally request an integration at Become an Indeed partner. | After your account is approved, Indeed enables your access and sends you a questionnaire that asks about:
|
| 3. | Make sure that you send each of your jobs with its public job description page URL. | Indeed crawls this URL to ensure it matches the job sent. If you omit this URL, the integration can be delayed. |
| 4. | When you encounter a problem with your integration, log your full requests and responses. | Provide 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, to Indeed for each of your clients. Clients can opt-out, but if they do so, you must expire and stop sending every job from this opted-out client.
When new, updated, and expired jobs go live on your clients’ career sites, send changes immediately. If Indeed does not receive an update for a client's job change within 15 minutes, the job's visibility can be lowered. When you first send jobs through the API, Indeed knows that you might have a large number of existing jobs. When submitting these jobs, send batches of fewer than 100 jobs.
2. Configure Indeed Apply for your jobs
By integrating your ATS with Indeed, your clients can enable the Easily apply feature on their job postings and deliver applicant information to their ATS. Indeed Apply improves the job seeker experience, and helps your clients make the right hires faster.
If you add Indeed Apply to one of your sandbox jobs, which are jobs that you send to the sandbox source that Indeed provides, you can test Indeed Apply end-to-end to your software by navigating directly to your 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 the
SourcedJobPostingIndeedApplyInput.postUrlfield to the URL to which Indeed posts the application data. -
Ensure your system can parse and handle the application data.
See also:
3. Add Indeed Apply screener questions
Screener questions enable employers to quickly determine whether an applicant meets their criteria. Adding screener questions to jobs enables employers to focus on connecting with rather than vetting candidates. Indeed does not host screener questions on your behalf. If your system supports screener questions, you must implement them to have Indeed approve your integration.
To surface screener questions in the Indeed Apply application flow, see Create job posting with screener questions.
4. Receive application data from Indeed
To receive application data from Indeed, specify a URL in the feed for each job. This URL receives candidate information in the form of 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" -
Make sure your system returns an HTTP
2XXstatus code for all applications that it successfully receives. Indeed considers any other HTTP status codes,POSTtimeouts, or connection timeouts as errors.If Indeed does not receive an HTTP
2XXstatus code either through a connect timeout,POSTtimeout, or invalid HTTP response, Indeed tries to resend the application. Indeed uses an exponential backoff method for automatic resends. After the last automatic retry, if delivery is still unsuccessful, Indeed terminally fails the application.Partners should NOT perform any validation on the content of the job application during the
POST. To validate the job content and disqualify the applicant, perform that validation downstream of thePOST. Any errors that are related to partner validation of job seeker data can cause Indeed to disable the integration.Do not redirect the
POSTrequest to another URL, such as through a301or302redirect. Indeed does not support redirects. See the HTTP status codes.
Duplicate applications
For the purposes of responding to the POST, consider an application a duplicate if it is for the same job ID and from the same job seeker email as an Indeed application within the last 120 days.
Do not use applications originally submitted from a source other than Indeed to determine whether an application is a duplicate when responding to the POST. Additionally, do not consider applications from the same job seeker email to a different job ID at the same company a duplicate.
Application data
Because Indeed sends the application data as the raw body of the HTTP POST request, you cannot process the request like a typical form. The body of the request contains a JSON document that you must read and parse. Not all JSON fields are provided, so use a robust JSON parser that treats missing fields as empty and ignores unrecognized fields.
A JSON data payload has no maximum size.
The POST body is encoded as UTF-8 and contains an authenticity header that is used to verify that Indeed is sending you the application.
A file portion of the Applicant field contains these fields: contentType, data, and fileName.
-
contentTypeis determined based on thefileName. -
The
datafield contains the raw resume file, which is Base64-encoded. -
The third party must support the following 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 that contains an HTTP header that you can use to verify the authenticity of the POST.
Using the shared API secret, which has the Indeed Apply credential type, Indeed uses the HMAC-SHA1 algorithm to compute a message signature. This signature is sent as an HTTP X-Indeed-Signature header.
To generate signatures, Indeed Apply uses the full unaltered JSON payload, including the curly brackets ({}) and the shared secret.
For code examples that show how the message signature is generated, 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 needing to test in the production environment.
When Indeed enables your access to the API, they allocate a few source names and communicate those to partners. Partners are expected to only use their allocated 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, and you must expire those jobs before sending any actual jobs.Test jobs must be just like actual jobs. For example, do not use titles like Fake test job, and ensure that the job has a real description. When jobs are on the sandbox source, Indeed hides them from job seekers.
If you add Indeed Apply to one of your sandbox jobs, which are jobs that you send to the sandbox source that Indeed provides, you can test Indeed Apply end-to-end to your software by navigating directly to your job and applying to it. Include screener questions in your testing.
After your test jobs are error-free, view your sandbox jobs. On the Indeed Employer page, sign in to the account that you registered your app with, then select the Jobs tab.
After Indeed validates your test jobs, Indeed notifies you that you can send your existing batch jobs and live job updates for review.
Before you validate and test your integration, all non-test jobs must have a
sourceNamevalue that indicates the organization to which they belong.Production jobs should not use your Indeed-provided
<sourceName>value.During testing, the Indeed team might give you a list of
sourceNamevalues that represent organizations that are associated with your jobs. When you send production jobs, Indeed asks that you use thosesourceNamevalues for jobs from those organizations. Failure to do so can block your clients from finding their jobs on Indeed, and can increase your client support requests.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:
Validate that you do not receive any Common GraphQL error codes when sending 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 any missing companies prevent your feed from going live.
Ensure you have included all jobs available on the clients’ career sites.
This includes jobs from sub-brands or subsidiaries of the parent company. Discrepancies in job volume between career sites and what you send by API can lower the visibility for the jobs from your integration.
Every job must have a unique URL in the
urlfield.Job salaries, locations, and other job metadata must match the jobs on your career site.
The
jobRequisitionIdon each job must match the requisition IDs on your career site.Provide hiring manager or recruiter email addresses, if available.
Send expirations for all test jobs that you created during development.
Actively update your jobs to match all data that appears on your clients’ websites.
Many partners include the job type, such as full-time or part-time, the job category, such as bakery, retail, or shipping, and full addresses on their career site.
Before Indeed makes Job Sync API feeds live, they check API data against career sites to ensure they get all the data possible, and they hold launch until they get the same data that the career site shows.
As part of Indeed's eventual review, Indeed checks against career sites. Send all data on the career site as part of your integration.
Go through the Indeed Apply checklist shared with you.
To test various 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 questions formatting, and to submit an application to and validate your
postUrlvalue.
7. Confirm your integration
After your application meets these requirements, provide documentation that includes screenshots of the completed integration that covers the following:
- Indeed’s branding and placement in employer’s integration menu
- Walk through of employer submitting a job with Indeed Apply
- Walk through of employer job analytics that shows source tracking for Indeed applicants
- Walk through of how an employer would disable Indeed Apply for their jobs
After Indeed receives the documentation, reviews your integration, and approves you, you receive an email notification.
8. Monitor integration health
When you integrate with Indeed Apply, set up monitoring to ensure that:
- The integration successfully delivers job applications.
- Questions files are valid and consistently available.
Indeed also monitors whether applications are delivered successfully to our ATS partners, along with other integration health indicators. If any problems arise, Indeed might contact you. In some cases, Indeed can disable the Indeed Apply feature for some or all of your feed’s jobs until you correct any issues.
Undelivered applications are not lost. In case of failure, retry attempts are made automatically at periodic intervals after the original application is submitted. If delivery is not possible, applications are retained for 60 days and retry attempts can be made on request by contacting the Integrations Delivery Team.
If your integration supports screener questions, verify that the pages that host those files are consistently available, do not redirect, and are properly formatted.
9. Send disposition data to Indeed
Disposition data is information about an update 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. An example of disposition data is, a candidate is hired.
By sending disposition data to Indeed, your clients receive higher quality applications over time.
See the Disposition Sync API Guide.