Frequently asked questions
Answers to common questions about integrating with Indeed APIs.Your OAuth credentials are a client ID and secret. Access these credentials in Partner Console. Exchange the client ID and secret for an access token, which is a long, garbled string. Include this token in every API call to authenticate your app's identity and permissions. Access tokens last one hour.
If you are an ATS that is building an integration that requires the authorization code flow (3-legged OAuth), and you do not have an OAuth application registered with Indeed, you must create an OAuth client ID.
When you become an Indeed partner, Indeed sets up an app that integrates Indeed APIs and services into your product. Indeed grants your Indeed user account access to Partner Console. Use Partner Console to access your app's OAuth credentials: a client ID and secret.
You exchange these OAuth credentials for an access token. Then, include the access token in Indeed API calls to authenticate your app's identity and permissions.
Access tokens expire after one hour, so exchange your OAuth credentials for a new access token every hour.
For the authorization code flow (3-legged OAuth), your app must request an authorization code, which grants your app permission to act on behalf of a user and their associated employer account. For example, use this flow to create an Indeed interview or create a sponsored campaign.
The user of the account to which you want access grants you this code, which expires in 10 minutes. After you get an authorization code, log in to Partner Console with your Indeed user account.
On the Dashboard, select your app in the Apps list. The Credentials tab on the app details page lists your OAuth credentials: a client ID, secret, and authorization code. You exchange these credentials for an access token.
When you request an access token, you receive a response like this:
{ "access_token": "<access_token>", "refresh_token": "<refresh_token>", "id_token": "<id_token>", "scope": "offline_access employer_access email", "consented_scope": "offline_access employer_access email", "convid": "1er835qvtu54n800", "token_type": "Bearer", "expires_in": 3600}Paste the ID token into the JWT debugger.
Indeed redirects the user to the page at the redirect_uri endpoint with the code and state parameters appended. For example:
http://www.companyname.com/oauth/indeed?code=rXZSABCyYQHQ&state=employer12Send a POST request to https://apis.indeed.com/oauth/v2/tokens.
Provide the code, client_id, client_secret, redirect_uri, and grant_type parameters. Optionally, include the employer parameter.
See Get access token that represents an employer.
This authorization link triggers the display of these screens:
| Screen | Description |
|---|---|
| Authentication | Appears when the user is logged out of Indeed. |
| OAuth consent | Enables a user to grant consent for any scopes that the OAuth app requests, such as the employer_access scope. |
| Indeed employer selection | Enables a user to select an employer from a list of employers associated with the user account. |
If an employer is associated with the user account, set prompt=select_employer when you request the authorization code. This parameter shows the user the Indeed employer selection screen so the user can pick the employer account.
An access token represents only one employer. To switch employers, get a new access token.
Every Indeed Apply Sync integration must support screener questions, Equal Employment Opportunity (EEO) questions through the updated schema that captures demographic data (when supporting US employers), and Disposition Sync.
This short video summarizes the new functionality and the actions your organization must take. You can also download the Indeed Apply Enhancements presentation.
Indeed requires Disposition Sync to close the data loop and accurately track an applicant's progress through the hiring process. This data improves matching algorithms and optimizes performance for clients. Disposition Sync is mandatory for every Indeed Apply Sync integration, alongside screener questions and EEO compliance (where applicable).
Indeed continuously evaluates and adjusts its obligations as laws and regulations change. As legal requirements evolve, Indeed updates its policies and practices to align with applicable data protection and privacy laws.
Indeed fully complies with GDPR and other relevant privacy legislation. Indeed uses Disposition Sync data only to improve job matching and hiring outcomes, and processes all data under its privacy policies and applicable regulations. For more information about Indeed's GDPR compliance, see Indeed GDPR Compliance.
Today, employer-specific data does not improve client-specific matching, but disposition data tells Indeed which candidates employers consider strong fits. Indeed feeds this signal directly into its matching models to fine-tune candidate recommendations.
Using candidate disposition data from ATSs, indexed jobs receive 14% more positive outcomes overall.
Employers often opt out of Indeed Apply integrations because the integration does not support voluntary EEO and required knockout questions.
Indeed has a company-wide requirement that every integration must support screener questions and flag EEO questions for US jobs. The employer remains responsible for how it asks the demographic questions. By requiring every integration to flag EEO questions for US jobs, Indeed drives higher-quality integrations and gives job seekers a consistent experience.
Your client credentials are an Indeed Apply API token and secret. Access these credentials in Partner Console.
Use the shared API secret, which has the Indeed Apply credential type.
Indeed computes a message signature with the HMAC-SHA1 algorithm and sends the signature in the X-Indeed-Signature HTTP header.
Indeed Apply sends a POST request to your postUrl with an HTTP header that you can use to verify the request's authenticity.
Today, EEO and demographic questions apply only to US-based jobs for EEO compliance.
Indeed supports qualification-type questions. These non-blocking questions let the applicant move to the next section in the apply flow even when the answer does not meet the qualification, and Indeed still delivers the application.
Use the Indeed Apply Questions tool to verify the syntax of your screener questions JSON file. The tool also shows how the screener questions appear in the Indeed Apply application flow.
Before you push a job or integration live, test your integration with the Indeed Apply XML configuration testing tool. On the Configurable Parameters tab, enter the relevant information to start testing the end-to-end apply flow.
For POST requests, an application is a duplicate when it has the same job ID and comes from the same job seeker email as an Indeed application within the last 120 days.
When you check for duplicates in your POST response, ignore applications that came from a source other than Indeed. Also, do not treat applications from the same job seeker email to a different job ID at the same company as duplicates.
For XML that Indeed crawls on a URL or hosts on an FTP server you provide, Indeed refreshes the job data four times a day at six-hour intervals, starting from the time of the last request. For Indeed-hosted FTPs, Indeed refreshes the XML feed when it receives a new file, as often as every two hours. More frequent file uploads can delay updates to the job data; if you see a delay in feed indexing, scale back the upload frequency.
As long as you include the standard fields, you can add any field, such as <branch_id>. If specific information must appear on Indeed, put it in the <description> field.
Indeed's visibility rules determine search results. The Search Quality team prioritizes jobs that are legitimate, unique, easy to apply for, and have detailed descriptions and locations.
If the data on the client site corresponds to a data target on Indeed, and the tags match the supported tags, the job appears on the search results page.
If a tag does not match an Indeed tag, visibility depends on factors such as the market, the device (desktop or mobile), and others.
If a tag contains information that must appear, ask the client to add the information inside the <description> tag.
Jobs that do not meet these criteria might not appear in search results. Confirm that your clients follow the Search Quality team's best practices for posting.
If clients have trouble finding their jobs on Indeed, contact Indeed for help.
Indeed requires a URL to the job description, not the apply page, for these reasons:
- If Indeed Apply fails, Indeed redirects the job seeker to the job URL.
- If a client opts out of Indeed Apply, job seekers still need a way to apply.
- The Indeed aggregation engine needs an active URL to confirm job content and activity.
For companies new to Indeed, or for new job sources from companies already on Indeed, Indeed requires a contact email address to verify the account and enable organic syndication.
Indeed does not always use the email address, but requires it for every job.
Provide the job in every language where an open position exists, as a unique job in the XML feed. If you reuse the reference number in the XML feed, Indeed shows only the first occurrence of the job.
Provide the job in every location where an open position exists. Indeed rejects region-wide postings that are not region-wide jobs from organic visibility. Each job must have a unique location, a unique reference number, and represent a unique job; otherwise, the job loses visibility on Indeed.
To post a state-wide job, send the state and country information by using those elements, and leave the <city> and <postalcode> elements blank.
Example: a statewide job in Texas:
<city> <![CDATA[]]></city><state> <![CDATA[TX]]></state><country> <![CDATA[US]]></country><postalcode> <![CDATA[]]></postalcode>Example: a statewide job in Tokyo:
<city> <![CDATA[]]></city><state> <![CDATA[東京都]]></state><country> <![CDATA[JP]]></country><postalcode> <![CDATA[]]></postalcode>To post a country-wide job, send the country using the <country> element, and send a blank value for <city>, <state>, and <postalcode>.
Example: a US nationwide job:
<city> <![CDATA[]]></city><state> <![CDATA[]]></state><country> <![CDATA[US]]></country><postalcode> <![CDATA[]]></postalcode>Example: a Japan nationwide job:
<city> <![CDATA[]]></city><state> <![CDATA[]]></state><country> <![CDATA[JP]]></country><postalcode> <![CDATA[]]></postalcode>Post jobs to the most specific and accurate location possible. All jobs must include all elements used in the feed, even if those elements are blank, as the examples show.
You can use the <city> or <state> elements to indicate that a job is fully remote by sending the value "remote". If you use this value, enter "remote" in both elements. Alternatively, enter "remote" in one element and leave the other blank. Do not enter "remote" in one element and a real location in the other element.
If you have a job that is fully remote but requires residency in a specific state, you can use the <remotetype> element in conjunction with the statewide posting schema.
Japan only. When posting remote jobs in Japan, leave <city> and <state> blank and use <remotetype>. If you have a fully remote job that requires residence in a specific prefecture, you can use the <remotetype> element in combination with the prefecture-wide posting schema.
Example: A fully-remote job in Texas:
<city> <![CDATA[]]></city><state> <![CDATA[TX]]></state><country> <![CDATA[US]]></country><postalcode> <![CDATA[]]></postalcode><remotetype> <![CDATA[Fully remote]]></remotetype>Example: A fully-remote job in Tokyo:
<city> <![CDATA[]]></city><state> <![CDATA[東京都]]></state><country> <![CDATA[JP]]></country><postalcode> <![CDATA[]]></postalcode><remotetype> <![CDATA[Fully remote]]></remotetype>Remote type values:
- Fully remote: The employee works remotely or from home.
- Hybrid remote: The employee works both in-office and remotely on a consistent basis.
Example: a fully remote job in the US:
<city> <![CDATA[Remote]]></city><state> <![CDATA[]]></state><country> <![CDATA[US]]></country><postalcode> <![CDATA[]]></postalcode><remotetype> <![CDATA[Fully remote]]></remotetype>Example: a fully remote job in Japan:
<city> <![CDATA[]]></city><state> <![CDATA[]]></state><country> <![CDATA[JP]]></country><postalcode> <![CDATA[]]></postalcode><remotetype> <![CDATA[Fully remote]]></remotetype>Example: a hybrid remote job in Austin, TX:
<city> <![CDATA[Austin]]></city><state> <![CDATA[TX]]></state><country> <![CDATA[US]]></country><postalcode> <![CDATA[78701]]></postalcode><remotetype> <![CDATA[Hybrid remote]]></remotetype>Example: a hybrid remote job in Minato, Tokyo:
<city> <![CDATA[港区三田]]></city><state> <![CDATA[東京都]]></state><country> <![CDATA[JP]]></country><postalcode> <![CDATA[100-8602]]></postalcode><remotetype> <![CDATA[Hybrid remote]]></remotetype>You cannot. Indeed Apply applies to every job on the client account. Clients can opt out of Indeed Apply at the account level, but not at the job level.
Steps and considerations:
- Opt in from your ATS: Opt in or opt out of Indeed Apply directly from your ATS platform. For help, contact your ATS.
- Troubleshooting: If Indeed Apply does not work as expected, confirm the client opted in. If issues persist, gather examples of jobs that do not show Easy Apply and contact Indeed support.
Use the <state> field for Japanese prefectures.
You can invite the job seeker to visit your site, but you cannot require additional questions to complete the application.
The X-Indeed-Signature header authenticates every POST request from Indeed and is always required. Indeed returns HTTP 401 when the signature does not match.
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.
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.
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.
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.
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.
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.
When an employer changes the status of an Indeed candidate in the ATS, the ATS sends the new status signal to Indeed, along with an anonymized application ID and a date/time stamp.
Indeed's job seeker product team aggregates and analyzes the disposition data Indeed collects from global ATSs. Indeed uses this data to improve job advertisement targeting and the application experience, so candidates can better understand how the skills on their resumes meet your requirements.
When clients are already opted in, encourage them to move candidates through the stages within their ATS. For example, after a recruiter reviews a CV, change the status to reviewed/screened, and so on.
Statuses vary by ATS. The most important thing is that Indeed receives as many updates as possible for every candidate in the employer's pipeline.
Clients who send continuous stage and status updates can:
- Help Indeed deliver better-matched candidates over time.
- Quickly identify which roles do not yet have enough candidates, so the client can shift focus and budget to the roles that need help.
- Better understand hiring timelines by analyzing how long each stage typically takes.
Indeed considers any signal beyond NEW, INCOMPLETE, and UNABLE_TO_MAP a quality signal. To qualify for tiered status, an ATS must reach a quality signal adoption rate of at least 55%.
Indeed measures an ATS's disposition adoption rate as the share of Indeed Applyable jobs that send disposition signals back to Indeed. If every one of your clients opts in to Indeed Apply and the ATS confirms applicant receipt, your disposition adoption rate is 100%. If half of your clients opt in to Indeed Apply but the ATS sends disposition signals on every one of those jobs, your disposition adoption rate is also 100%.
Indeed understands that ATS partners cannot control how their clients move candidates through the hiring funnel. Indeed measures disposition signal adoption as the share of Indeed Apply-enabled jobs that send a signal. If Indeed receives confirmation that the ATS received the application, that counts as a signal sent. Indeed encourages partners to map every quality disposition signal, encourage clients to use the signals, and automate signal delivery to Indeed when applicants reach milestones to improve the performance of the Indeed Apply integration and build a higher-quality pipeline over time.
Salary and location fields are data nodes that partners send to Indeed with their clients' jobs. According to job seekers, salary is one of the most important pieces of information. Job location is one of the most-requested details for a job description, and ideally as precise as possible.
Jobs with salary and a precise location perform better. Sponsored indexed jobs with salary and a precise location receive:
- 2.5X more impressions per job
- 2.3X more clicks per job
- 3.3X more apply starts per job
Indeed does not provide a sandbox environment. You can read data from Indeed APIs in production with no cost or impact to your account. When you test create and update operations, create test campaigns in a paused state (status=paused) to prevent spending.
To clear an account budget, contact your client success representative.
For XML that Indeed crawls on a URL or hosts on an ATS-provided FTP site, Indeed refreshes the job data four times a day, every six hours, from the time of the last request. For Indeed-hosted FTPs, Indeed refreshes the XML feed when it receives a new file, as often as every two hours. More frequent uploads can stop previous runs and prevent job updates.
You can add any field you like (such as <job_type> or <branch_id>) as long as you include the standard fields.
Indeed's visibility rules determine search results. The Search Quality team prioritizes jobs that are legitimate, unique, easy to apply to, and have detailed descriptions and locations. Jobs that do not meet these criteria might not appear in search results. Confirm that your clients follow the Job Posting Standards. If clients have trouble finding their jobs on Indeed, they can contact Indeed for help.
Indeed requires a URL that points to the job description (not the apply page) for these reasons:
- If Indeed Apply fails, Indeed redirects the job seeker to the job URL.
- If a client opts out of Indeed Apply, job seekers still need a way to apply.
- The aggregation engine needs an active URL to confirm job content and activity.
Provide the job in every language you currently support, as a unique job in the XML. If you reuse the reference number in the XML, Indeed shows only the first occurrence of the job.
Provide the job in every location where an open position exists. Indeed rejects region-wide postings that are not region-wide jobs from organic visibility. Each job needs a unique location, a unique reference number, and must represent a unique job; otherwise, the job loses visibility on Indeed.
Indeed requires city, state or province, country, and postal code elements. If you do not provide these elements, the job does not receive organic visibility by default.
If you have legitimate region-wide postings or remote work opportunities, include them in the file and have your clients request organic visibility. If your client has an Indeed account, they can sign in to get support. Clients without an account can submit questions to Indeed through the Indeed website.
For companies new to Indeed, or for new job sources from companies already on Indeed, Indeed requires a contact email address to verify the account and enable organic syndication. Indeed does not always use the email address, but requires it for every job.
Remove every <job> element for the client's jobs from the XML. Clients cannot opt out job by job, and must opt out of distribution to Indeed entirely. If the XML and the client's job portal show different job volumes, Indeed prefers the source with the larger volume for accuracy.
Include the <remotetype> element and pick one of these options:
- Fully remote
- Hybrid remote
- WFH Flexible (US only)
For Indeed to treat a job as "fully remote," include one of these phrases: "This is a remote position," "Employees work remotely," or "Remote work allowed."
For Indeed to treat a job as having "work from home flexibility," include one of these phrases: "Flexible work from home options available," "Work from home days possible," or "Options for working from home."
To post a remote job, use the elements that Indeed reads for location data: <city>, <state>, <country>, and <postalcode>.
To post a remote job in the US, set <city> to "Remote" and leave <state> and <postalcode> blank. Otherwise, Indeed does not post the job as a remote position.
Every job postings index uses February 1, 2020 as the baseline (= 100). This baseline keeps comparisons consistent across countries and time periods.
Seasonally adjusted (SA) indices remove typical seasonal patterns to reveal underlying trends. Non-seasonally adjusted (NSA) indices show raw data, including normal seasonal fluctuations such as holiday hiring.
- Indeed updates job postings and remote work data daily.
- Indeed updates wage growth data monthly.
- Indeed updates AI job postings data daily.
Coverage varies by dataset. Use the findHiringLabCountriesPublic query to see the available countries for each dataset and granularity level.
To get historical data, use cursor-based pagination. Start with your filters, then use the after parameter and the cursor values from previous responses to page through the results.
The maximum is 50 results per request. Use pagination to retrieve larger datasets.
The API returns data in chronological order. Use pagination and the date field in your application logic to filter to your desired time range.
Use the filtering options to view jobs by company, date, or status.
Indeed limits Data viewer access to partners in Japan with Job Sync integrations. If you believe you should have access, contact your Indeed representative.
Rejected in the Data viewer means Indeed received the job but it failed moderation.
Contact your Client Success team for guidance. The Data viewer does not show specific rejection reasons.
Switching the integration type changes which jobs Indeed rejects, because moderation rules differ between Indeed and Indeed PLUS. Indeed might reject a job for Indeed PLUS but accept it for Indeed. In that case, the job appears on the Indeed website but is not eligible for Indeed PLUS features.
The Data viewer does not show expired jobs.
The Data viewer does not show HTTP logs. It shows only the moderation status of jobs you posted successfully.
Indeed builds technical partnerships that deliver seamless and secure hiring solutions across platforms. To learn more and tell us about your partnership goals, complete the form on the partners page.
Indeed is actively expanding capacity. Provide your company's estimated annual job volume so Indeed can prioritize your integration request. Indeed contacts you at the email address you provided when next steps are ready.
Indeed refreshes the program annually every June. Submit proof of eligibility through the Google Form attached in the program announcement email. Indeed updates tiered partners annually based on the most up-to-date status of their Indeed integrations. After your initial launch, meet the adoption criteria for two consecutive quarters and maintain that rate throughout the program year.
Indeed notifies qualifying partners by email in June, before publishing the tiered partners on indeed.com in July.
Every integrated partner receives technical support for their integration with Indeed. Indeed provides onboarding and integration launch support to Silver Tier partners, and a dedicated partner manager to Platinum partners. To get a dedicated partner manager, meet the criteria for the Platinum Tier.
You do not need dedicated partner management to deliver a high-impact integration to shared customers.
Today, only ATS platforms can join this program. Every ATS partner outside Japan can qualify for the tiering program if it meets the criteria, regardless of country of operation. Indeed runs a separate Japanese tiering program for regional partners.
The Indeed Integrations Delivery team supports every partner. Tiered partners receive priority technical support, and any partner can request support through the support form in Partner Console.
If you do not meet the adoption rate for one quarter, Indeed sends a warning. If you do not improve, you can lose your tier benefit after a second consecutive quarter that does not qualify.
Keep your active integrations serviceable throughout the program year. Update integrations to match Indeed's product release or update schedule. If you do not maintain your integration, you can lose your tier benefits. Partners on Feed Source Approval (FSA) can also lose tiered status.
The annual deadline to meet the Partner Program criteria is June 1. To be eligible for tiering, you must have met the deadline for Indeed Apply compliance.
| Deadline | Requirement |
|---|---|
| April 1 | Indeed Apply Policy for all partners. Indeed Apply integrations are required to have: Screener questions, Equal Employment Opportunity (EEO) questions (for US jobs), and Disposition Sync capabilities. |
| June 1 | Achieve tiered status. See the Partner Program requirements. |
For partners who commit to migrating to the Job Sync API to achieve Gold or Platinum status, the deadline to complete development work and go live is October 1. If a partner commits to launching to achieve tiered status and does not go live by October 1, they lose their tiered status.
Indeed uses Disposition Sync feedback only to improve matching algorithms and hiring performance for clients. Indeed does not use the data for any other purpose, and retains it only to meet legal and compliance obligations.
- Short-term use: The data refines job recommendations, optimizes candidate-employer connections, and provides real-time insights into hiring outcomes.
- Long-term use: Aggregated data over time improves AI-driven models, which makes hiring more efficient and more relevant for employers and job seekers.
Indeed processes, stores, and uses Disposition Sync data strictly under its privacy policies and legal obligations.
- Processing and use: Indeed uses the data only to improve job matching algorithms, improve hiring performance for clients, and provide insights into applicant progress. Indeed does not use the data for any other purpose.
- Storage and security: Indeed stores the data securely and retains it only as long as needed to fulfill these functions, while complying with all applicable legal and regulatory requirements.
- Data sharing: Indeed does not share Disposition Sync data with other entities or third parties, except as required by law or as the privacy policies state.
For full details on how Indeed handles data, see:
Indeed tracks API usage as the Developer Agreement Terms describe; see the Indeed Developer Agreement. Indeed also requests disposition signals from partners to improve job matching and hiring outcomes.
The Indeed Privacy Policy (for example, section 4, Purposes, Uses and Disclosures of Information) explains how Indeed processes personal data and why. Indeed uses the data to improve products, determine user preferences, detect fraudulent activity, and for certain marketing purposes. The Developer Agreement covers this.
Indeed anonymizes disposition statuses and processes them securely to protect privacy. Indeed enforces strict data protection measures to comply with privacy laws and to keep all tracked data secure.
Indeed retains personal data only as long as needed for the purposes for which Indeed collects or processes the data, as the Privacy Policy describes, or as needed to meet a legal obligation. When Indeed no longer needs to store personal data, Indeed deletes it, subject to applicable legal requirements.
Indeed uses industry-standard security measures to protect the personal data under its control against unauthorized access, disclosure, destruction, and accidental loss. Indeed adapts these practices to the nature of the data, the processing context, the risks involved, and the available technology. For more information, see the Indeed Trust Center.
Clients on an Indeed Apply compliant ATS can opt out of sending disposition signals to Indeed; opt out through the ATS. Direct Employers who own their feed and do not want to share signals with Indeed can skip building the Disposition Sync integration.
If you use the Indeed Apply Sync integration, you must develop Disposition Sync. If you do not, you risk losing access to Indeed Apply.
To check whether your ATS qualifies to integrate with Indeed, review the Applicant tracking system (ATS) guidelines.
For terms of service, privacy, and data management policies, see Terms of Service.
For Indeed's policies, see Policies.
Indeed sets up the Developer Agreement when your company applies to become an Indeed partner. Submit your integration request through Become an Indeed partner. Indeed reviews your application, vets the integration build, and sends the Developer Agreement for you to sign as part of onboarding. Before you start, review the Indeed Developer Agreement.
The agency agreement and the Developer Agreement serve different purposes and operate independently. The agency agreement governs the broader relationship; the Developer Agreement grants access to Indeed's Public API under separate terms.
Indeed keeps terms and technical documents online so it can update them when laws or technical requirements change. The parties agree to any material changes.
Sign in to Partner Console with your Indeed user account. On the Dashboard, select your app in the Apps list. The Credentials tab on the app details page shows your OAuth credentials: a client ID and secret.
Any partner can request support through the support form in Partner Console. Tiered partners receive priority technical support.
Indeed uses automated crawlers to discover and index jobs from public websites. The two Indeed crawlers are Indeedbot (general job indexing) and Indeedshopbot (retail job indexing). For technical details about user agents, IP ranges, and how to allow or block these crawlers, see About Indeed crawlers.