FAQs
Job Sync API FAQs.
Job Sync API integration
Job Sync API has the same capabilities as the Indeed Apply XML feed. Use Job Sync API instead of an XML integration.
After integrating with the Job Sync API, submit your integration for review.
When you onboard, an app is created with 2-legged OAuth credentials (client ID and secret). Get them in Partner Console, exchange them for an access token, and include it in API calls. Tokens expire after one hour.
Your OAuth credentials are a client ID and secret, accessible in Partner Console. Exchange them for an access token and include it in every API call to authenticate your app. Access tokens expire after one hour.
Call APIs in real time to keep jobs fresh.
Indeed assigns each client a tier and rate limit based on their needs. See Rate limiting.
No. You can only get the sum.
The Indeed UI changes frequently, so no.
Submit and upsert job postings
Up to 100 jobs, but create only one per request due to HTTP request size limits.
Jobs are published as soon as you post them.
Call
createSourcedJobPostingsto create the job on Indeed. SetemployerIdsto associate the posting with the employer.Example:
typeisFOOATS_EMPLOYER_IDand employer ID isabc123in your ATS. CallcreateSourcedJobPostingswith:{"employerIds": [{"type": "FOOATS_EMPLOYER_ID","id": "abc123"}]}Provision the Employer Data API to create this ID. View it in Partner Console.
Call
patchEmployerwith these values:{"id":{"type": "FOOATS_EMPLOYER_ID","id": "abc123"}}idmust equalemployerIds. For details, see Employer Data.
For each employer, choose a unique sourceName value. The sourceName is a human-readable company or organization name for a group of jobs, such as a parent organization, that are managed together and that is hiring for the role.
This value is not a numeric value or ID. However, you can append a numeric value or ID to the name for uniqueness. For example:
| Do | Don't |
|---|---|
| |
| |
Multiple job groups under one employer: Use a unique value per job group. For subsidiaries or franchises with many branded locations, use the same sourceName. The value must be unique across job groups and have a single sourceType (organization type).
Company name change: Keep the original sourceName; update companyName to the new name.
Franchises managed separately: Use a value such as store number or store ID:
sourceName: "ConvenienceMart store ID 345"Duplicate source names: Make the name unique (for example, add location) so users can tell sources apart.
Branches that manage jobs separately: Use unique values. Example: ConvenienceMart has two branches and three stores. For each branch and store to manage jobs separately, use these companyName and sourceName combinations:
| Branch | Store |
|
|---|---|---|
| Tokyo | Shibuya station | |
| Shinjuku station | | |
| Osaka | Osaka station | |
Set isGlobalDefault to true to use this employer across all Indeed languages and countries.
Indeed uses the client's contact email to verify the posting business entity. contactEmail is not displayed.
A remote job does not require in-person attendance at a specific work site.
Someone can perform a:
- Remote national job from anywhere in the nation.
- Remote regional job from anywhere in a region, such as a prefecture.
To define a remote national or regional job, set the following fields:
| Remote job type | remoteType | cityRegionPostal | streetAddress |
|---|---|---|---|
| National | Fully Remote | Leave blank. | Leave blank. |
| Regional | Fully Remote | Leave empty for jobs in Japan; otherwise set to the region. note If set to a city, the job is not remote. | Leave blank. |
createSourcedJobPostings does not contain a field that is equivalent to the XML <keywords> tag.
Post one job posting for each position and location pair.
Changing jobPostingId, sourceName, or client ID causes the API to return a new sourcedPostingId.
Before changing any of these fields, call expireSourcedJobsBySourcedPostingId with the current sourcedPostingId to expire the job.
Always store sourcedPostingId. You need it to expire or reactivate jobs. See Expire job postings.
In the description, specify the expected duration to complete the job.
For example:
If 1.2M JPY for three months project, specify 0.4M JPY/month
To define a salary range or fixed salary, set these fields:
| To define | minimumMinor | maximumMinor |
|---|---|---|
| Salary range | Set to minimum salary. | Set to maximum salary. |
| Salary range with minimum salary only | Set to minimum salary. | |
| Fixed salary | Set to fixed salary. | Set to fixed salary. |
Include this data in these fields:
| Field | Value |
|---|---|
jobPostingId | Unique ID across your ATS (a UUID is allowed). Reposting with this ID can reopen a previously expired job. |
jobRequisitionId | Human-readable ID; uniqueness across the ATS is not required. Ideally unique per client within a |
- If you submitted the job posting on Indeed, upsert the posting.
- If another partner submitted the job posting on Indeed, update the posting. The update operation is primarily for ad agencies.
Japan Only. All partners except advertising agencies and Indeed PLUS Publisher Network partners can update the posting.
Call createSourcedJobPostings with your job updates. Use the same jobPostingId, sourceName, and OAuth client ID as at creation—Indeed deduplicates on these. Include all required job details even when unchanged.
Japan required it previously; it is no longer used.
Call findEmployerJobsPartner to list your job postings; the response includes sourcedPostingId per job. Use that ID with createSourcedJobPostings or updateSourcedJobPostings to update, or with expireSourcedJobsBySourcedPostingId to expire.
Job visibility
Jobs that do not meet Indeed's standards may be reviewed and require more information from the hiring company. To keep jobs visible to job seekers, follow Job Posting Standards - English or Job Posting Standards - Japanese.
After you create a job posting, it takes one to two hours to appear on Indeed and become searchable.
Indeed PLUS is integrated with multiple job boards. Each job board determines which fields appear.
For jobs in Japan: For information on job postings, see Japan-specific job field visibility. For information on employers, see Japan employer field visibility.
No.
To enable job visibility for your clients, see the Job Sync API guide.
In the ATS, clients see an image for each job that indicates whether the job:
- Is searchable on Indeed.
- Needs sponsorship to become searchable.
Is not found because either:
- The job does not exist.
- The user does not have access to that job.
When a client clicks on an image, they access additional information about the job on Indeed.

When a client clicks on an image, several statuses can appear. See Job status.
When a user views a job in your partner UI, you can update the status once per hour. Indeed does not control this.
Yes.
No, they show Searchable.
Job seekers do not see these jobs in Indeed search results.
No. You can view job visibility for open jobs only.
Visibility booleans for expired jobs can be inaccurate. Do not show them to your users.
Indeed compares the job volume from your ATS feed with the number of jobs visible on the employer's career site. If Indeed captures any discrepancies, Indeed follows up to investigate gaps and ensure compliance with contractual obligations.
If each ATS partner submits all jobs they have access to, the ATS is compliant. When feed and career site jobs differ, partner managers help you find which jobs might be missing and from which client.
To withhold a job from Indeed (for example, future jobs or for privacy or confidentiality), the employer must submit a cease and desist on company letterhead. Share the letter with your partner manager or, if unmanaged, send it to marketplacesupport@indeed.com.
Employers can opt out of confidential or future job listings. Indeed keeps a record of the job; it does not appear in search or in the employer's account.
Expire job postings
Call expireSourcedJobsBySourcedPostingId to expire a job posting. The job no longer appears on Indeed.
To reactivate, see Reactivate an expired job.
It usually persists. It can change if the job stays expired for more than 30 days.
Call createSourcedJobPostings to get the sourcedPostingId.
To expire a job posting, call expireSourcedJobsBySourcedPostingId with that job's sourcedPostingId.
To reactivate an expired job, call createSourcedJobPostings with the same jobPostingId and sourceName as the expired job, as when updating an active job.
Update datePublished to set the reactivation date in your ATS.
You can reactivate a job within 30 days after it expires.
After 30 days, Indeed might archive job statistics and configuration. Reactivating after 30 days can return a new sourcedPostingId. Ensure your code handles both the same and a new sourcedPostingId.
Save the sourcedPostingId. Use it to expire or reactivate jobs.
Call the API to expire jobs.
Troubleshooting
GRAPHQL_PARSE_FAILED indicates a syntax error in the GraphQL operation string, often from unescaped HTML in the description field. See Job description formatting and GRAPHQL_PARSE_FAILED error.
Issues can occur when posting jobs. Review and fix your data for a successful integration.
| Issue | Description |
|---|---|
hasProbationaryPeriod defaults to UNKNOWN | In Japan, that value often fails screening. The field does not apply in other locales. |
| Data is not properly formatted | Improperly formatted data results in invalid API calls, indicating untrustworthy integration data. See Create job posting. |
| Job links do not lead to jobs | Provide links to job detail pages on your site. Indeed uses these to verify job content consistency and validity. Ensure links lead to job detail pages, not application forms or other pages. Valid links help Indeed keep data aligned and enable job seekers to verify jobs on your corporate website. |
| Job descriptions are incomplete | Include all required information in job descriptions. Data in specific fields is not always displayed to job seekers. Job descriptions are the ultimate source of truth. See Job description formatting. |
| Partner site and Indeed job description layout differ | Indeed checks your website to confirm content matches. If the job description layout differs significantly, Indeed can mark the job inactive due to content mismatch and expire it. Keep job description order consistent between your site and Indeed data. |
| Data is incompatible with Indeed systems | If Indeed determines a considerable portion of your data causes incorrect displays, you must fix it. Considerable portion is judged by issue prevalence and impact on job seekers. Example: providing |
| Job content misuses API fields | Providing clickbait in title, non-location data in location, or other irrelevant information can cause Indeed to block your integration. Considerable portion is judged by issue prevalence and impact on job seekers. |
| Jobs are not up to date | Jobs on Indeed must be expired or updated to match your site. Outdated jobs cause issues for job seekers. Keep jobs current, or Indeed can block your integration or expire out-of-sync content. See Upsert job posting. |
Usually the client lacks access to the job.
Have the client contact Indeed Support so Indeed can link their employer account to their jobs.
Get support
Most Job Sync API errors include information to help you triage.
See Troubleshoot GraphQL errors.
If you cannot resolve an error, submit a support request with:
- Full request and response payloads.
- Steps to reproduce.
- Error description.