- 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.
Based on work with hundreds of partners, this integration usually takes about six weeks. That timeline includes setup, testing, review with Indeed, and deployment for client use.
-
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:
jobRequisitionIdandjobPostingIdinSourcedJobPostingMetadataInputSourcedJobPostingJobContactInput
Integration roadmap
Complete these steps before you submit your integration to Indeed for review:
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 review existing client names. Later, use those names in |
| 2. | Sign a Developer Agreement between your company and Indeed, then submit a formal integration request through Become an Indeed partner. | After Indeed approves your account, it enables access and sends a questionnaire that asks about:
|
| 3. | Send each job with its public job description page URL. | Indeed crawls this URL to confirm that it matches the job you send. If you omit it, your integration review can be delayed. |
| 4. | Log full requests and responses when you encounter an integration problem. | Provide these logs to Indeed for troubleshooting. |
Job Sync API integrations must be comprehensive. For each client, send all publicly available jobs, or every job shown on the client’s career page. Clients can opt out, but if they do, you must expire and stop sending all jobs for that client.
When new, updated, or expired jobs go live on client career sites, send those changes immediately. If Indeed does not receive an update within 15 minutes, job visibility can be reduced. When you first submit existing jobs through the API, send them in batches of 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 job postings and send applicant data to their ATS. Indeed Apply improves the job seeker experience and can help clients hire faster.
To test Indeed Apply end to end in your software, add it to one sandbox job. A sandbox job is a job you send to the sandbox source that Indeed provides. Then open the job directly and apply to it. Include screener questions in your test.
To configure Indeed Apply:
-
Set the Indeed Apply fields in
SourcedJobPostingIndeedApplyInput.To receive application data from Indeed, set
postUrlto the URL where Indeed sends application data. -
Verify that your system can parse and process the application data.
See also:
3. Add Indeed Apply screener questions
Screener questions help employers quickly decide whether applicants meet their criteria. When employers use screener questions, they can spend more time connecting with qualified 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. Indeed sends candidate information for that job to the URL as JSON.
To process applications programmatically:
-
Receive application data at the HTTPS URL you define in
postUrl.For example:
"postUrl": "https://www.example.com/jobs" -
Return an HTTP
2XXstatus code for every application your system receives successfully. Indeed treats any other HTTP status code,POSTtimeout, or connection timeout as an error.If Indeed does not receive an HTTP
2XXresponse because of a connection timeout,POSTtimeout, or invalid HTTP response, it retries the application with exponential backoff. 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. Partner-side validation errors 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 HTTP status codes.
Duplicate applications
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.
Do not use applications from other sources when deciding whether an Indeed application is a duplicate. Do not treat applications from the same job seeker email as duplicates if they use different job IDs, even at the same company.
Application data
Indeed sends application data in the raw body of the HTTP POST request, so you cannot process it like a standard form submission. 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 unknown fields.
A JSON payload has no maximum size.
The POST body uses UTF-8 encoding and includes an authenticity header to help you verify that Indeed sent the application.
The file section of the Applicant field includes these fields: contentType, data, and fileName.
- Indeed determines
contentTypefromfileName. datacontains the raw resume file in Base64 encoding.- Third-party systems must support these file types:
.txt,.pdf,.doc,.docx, and.rtf.
For details, see the Application data reference.
Authentication of the POST request
Indeed Apply sends a POST request to your postUrl with an HTTP header you can use to verify that the request is authentic.
Indeed uses the shared API secret for the Indeed Apply credential type and calculates a message signature with the HMAC-SHA1 algorithm. It sends that signature in the HTTP X-Indeed-Signature header.
To generate signatures, Indeed Apply uses the full, unmodified JSON payload, including the curly braces ({}), and the shared secret.
For code examples, see the Message signature generation reference.
Supported SSL certificates
For supported certificates, see Trusted root SSL certificates.
If your certificate is not listed, contact the Integrations Delivery Team.
See also:
SourcedJobPostingIndeedApplyInput.postUrl- 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 production.
When Indeed enables your API access, it assigns source names and shares them with partners. Use only your assigned source name in
SourcedJobPostingJobSourceInput.sourceNamefor all test jobs.If you use any other string for test jobs, Indeed cannot validate those jobs. You must expire them before sending real jobs.
Make test jobs look like real jobs. For example, do not use titles such as Fake test job, and include a real job description. Jobs sent with the sandbox source are hidden from job seekers.
If you add Indeed Apply to a sandbox job, you can test it end to end by opening the job directly and applying to it. Include screener questions in your test.
After your test jobs are error-free, review your sandbox jobs. On the Indeed Employer page, sign in with the account you used to register your app, 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 for organizations associated with your jobs. Use those values for production jobs from those organizations. Otherwise, clients might not find their jobs on Indeed, and support requests can increase.For more guidance, 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 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 delay go-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 reduced.
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 created during development.
Keep your jobs updated so they match all data shown on your clients' websites.
Many partners include job type, job category, and full addresses on the career site.
Before Indeed makes Job Sync API feeds live, it compares API data with career sites to verify that the feed includes all available data. Launch is delayed until the API sends the same data shown on the career site.
As part of the review, Indeed compares your integration with career sites. Send all career site data through your integration.
Complete the Indeed Apply checklist that Indeed shares with you.
To test different HTTP error scenarios, 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 verify your
postUrl.
7. Confirm your integration
After your integration meets these requirements, provide documentation with screenshots 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:
- Job applications are delivered successfully.
- Question files are valid and consistently available.
Indeed also monitors delivery success and other integration health indicators for ATS partners. 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 retries automatically at regular intervals after the original submission. If delivery still fails, Indeed retains applications for 60 days. You can request additional retries from the Integrations Delivery Team.
If your integration supports screener questions, verify that the pages hosting those files remain 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 might be hired.
When you send disposition data to Indeed, your clients can receive higher quality applications over time.
See the Disposition Sync API Guide.