FAQs
Job Sync API FAQs.
Job Sync API integration
The Job Sync API has the same capabilities as the Indeed Apply XML feed. Use the Job Sync API instead of an XML integration.
After you integrate with the Job Sync API, submit your integration for review.
When you onboard, Indeed creates an app with 2-legged OAuth credentials (a client ID and secret). Get the credentials in Partner Console, exchange them for an access token, and include the token in your API calls. Tokens expire after one hour.
Your OAuth credentials are a client ID and secret, which you access in Partner Console. Exchange the credentials for an access token, and include the token in every API call to authenticate your app. Access tokens expire after one hour.
Call the API in real time to keep jobs fresh.
Indeed assigns each client a tier and rate limit based on the client's needs. See Rate limiting.
You cannot. Indeed returns only the sum.
Indeed does not provide a diagram, because the Indeed UI changes frequently.
Submit and upsert job postings
You can create up to 100 jobs per request, but create only one per request because of HTTP request size limits.
You cannot schedule a future post. Indeed publishes jobs 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 every Indeed language and country.
Indeed uses the client's contact email to verify the business entity that posts the job. Indeed does not display contactEmail.
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. If set to a city, the job is not remote. | Leave blank. |
createSourcedJobPostings has no field equivalent to the XML <keywords> tag.
Post one job posting for each position-and-location pair.
If you change jobPostingId, sourceName, or the client ID, the API returns a new sourcedPostingId.
Before you change any of these fields, call expireSourcedJobsBySourcedPostingId with the current sourcedPostingId to expire the job.
Always store the sourcedPostingId. You need it to expire or reactivate jobs. See Expire job postings.
In the description, specify how long the job takes to complete.
For example:
For 1.2M JPY over a three-month project, specify 0.4M JPY per 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.
Indeed previously required cityRegionPostal in Japan; Indeed no longer uses it.
Call findEmployerJobsPartner to list your job postings. The response includes a sourcedPostingId for each job. Use that ID with createSourcedJobPostings or updateSourcedJobPostings to update the job, or with expireSourcedJobsBySourcedPostingId to expire it.
Job visibility
Indeed might review jobs that do not meet its standards and ask the hiring company for more information. To keep jobs visible to job seekers, follow Job Posting Standards - English or Job Posting Standards - Japanese.
After you create a job posting, Indeed takes one to two hours to publish and index it.
Indeed PLUS integrates with multiple job boards. Each job board decides which fields appear.
For jobs in Japan: For job postings, see Japan-specific job field visibility. For employers, see Japan employer field visibility.
Partners and employers cannot control where jobs appear.
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.
The Searchable status applies to both job alerts and organic jobs.
Sponsored jobs do not show Needs sponsorship; they show Searchable.
Job seekers do not see these jobs in Indeed search results.
You can view job visibility only for open jobs.
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 finds a discrepancy, Indeed follows up to investigate the gap and confirm that you meet your contractual obligations.
If each ATS partner submits every job that it has access to, the ATS is compliant. When the feed and the career site differ, your partner manager helps you find which jobs are 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. If you do not have one, send the letter to marketplacesupport@indeed.com.
Employers can opt out of confidential or future job listings. Indeed keeps a record of the job, but does not show it in search or in the employer's account.
Expire job postings
Call expireSourcedJobsBySourcedPostingId to expire a job posting. After it expires, the job no longer appears on Indeed.
To reactivate it, see Reactivate an expired job.
The sourcedPostingId 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 the job's sourcedPostingId.
To reactivate an expired job, call createSourcedJobPostings with the same jobPostingId and sourceName as the expired job, just as you would update 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 the job's statistics and configuration. Reactivating after 30 days can return a new sourcedPostingId, so handle both the same and a new sourcedPostingId in your code.
Save the sourcedPostingId. You need it to expire or reactivate jobs.
Jobs do not expire automatically. 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. |
The client usually lacks access to the job. Have the client contact Indeed Support so Indeed can link their employer account to the jobs.
Get support
Most Job Sync API errors include information that helps 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.