- Supported features
- Browser support
- Before you begin
- Set up your Indeed account
- Set up your OAuth application
- Load the plugin script
- Configure the data-indeed-allow-employer-creation parameter
- Toggle visibility
- Display job visibility status
- Enable job visibility in the plugin
- Display a job visibility button
- Job visibility button variants
- Where to display job visibility buttons
- Job visibility best practices
- Job visibility troubleshooting
- Enable sponsored jobs
- Enable sponsored jobs in the plugin
- Display a sponsored job button
- Sponsored job button variants
- Where to display sponsored job buttons
- Sponsored jobs best practices
- Troubleshooting
- The plugin shows "Unable to connect to the server"
- A plugin button doesn't show the correct status
ATS JavaScript Plugin
Integrate Indeed features into your ATS site by making only front-end changes.
See Indeed Plugin Terms.
The Applicant Tracking System (ATS) JavaScript Plugin enables you to integrate Indeed features into your ATS site by making only front-end changes.
Supported features
The plugin supports these features:
- Job visibility: Let employers see how their jobs appear on Indeed and other Indeed PLUS-connected job boards, including why jobs fail moderation checks and how to fix them.
- Sponsored jobs: Let employers sponsor jobs on Indeed from your ATS.
Browser support
All plugin buttons must be rendered on HTTPS pages (HTTP is not supported).
The plugin supports these browsers:
| Chrome | Firefox | Safari | Edge (Chromium) | |
|---|---|---|---|---|
| Linux | ✅ | ✅ | N/A | ❌ |
| macOS | ✅ | ✅ | ✅ | ✅ |
| Windows | ✅ | ✅ | N/A | ✅ |
| Android | ❌ | ❌ | ❌ | ❌ |
| iOS | ❌ | ❌ | ❌ | ❌ |
Before you begin
Before you can integrate plugin features into your ATS site, there are a few things you have to do.
Set up your Indeed account
To use the plugin, you must have an Indeed account associated with your ATS, and you must receive the following ATS keys from your Indeed representative:
- Sponsor ATS key
- Aggregation ATS key (required only for web interviews)
For more information, see Become an Indeed partner.
Set up your OAuth application
The plugin uses OAuth 2.0 (specifically, 3-legged OAuth) to authenticate and authorize clients.
To use the plugin, you must create a 3-legged OAuth app and set it as a public client.
For more information about registering your 3-legged OAuth app, see Authorization code grant type (3-legged OAuth).
Load the plugin script
To integrate the ATS JavaScript Plugin into your ATS site, add this <script> tag:
<script src="https://plugins.indeed.com/ats-plugin/main.js" data-indeed-locale="<LOCALE>" data-indeed-enabled-plugins="<ENABLED-PLUGINS>" data-indeed-oauth-client-id="<CLIENT-ID>" data-indeed-redirect-url="<REDIRECT-URL>" data-indeed-ats-key="<ATS-KEY>" data-indeed-ats-user-id="<ATS-USER-ID>" data-indeed-ats-company-id="<ATS-COMPANY-ID>" data-indeed-plugin-z-index="<Z-INDEX>" data-indeed-allow-employer-creation="<true|false>" crossorigin defer></script>Replace the parameters in angle brackets (<>) with your values.
This table describes the data-indeed-* attributes:
| Attribute | Description |
|---|---|
| Required. The locale of the plugin UI text. The plugin supports English and Japanese.
|
| Required. A comma-separated list of feature IDs to activate in the ATS site. Supported feature ID values:
Examples:
|
| Required. The app's client ID. To get your client ID, see Get your OAuth credentials. |
| Required. One of the app's redirect URLs that runs the plugin. This must have the same origin as any pages that run the plugin. note
In this example, On the page with the URL If your app uses 3-legged OAuth, you can define up to five redirect URLs in Partner Console. |
| Required. The Indeed account's ATS key. To get your ATS key, see Set up your Indeed account. |
| Required. A unique string identifying the current user on the ATS site. As the ATS, you create this string, which should be UTF-8 and contain alphanumeric characters, hyphens ( |
| Required. A unique string identifying the current user's company. As the ATS, you create this string, which should be UTF-8 and contain alphanumeric characters, hyphens ( |
| Optional. The z-index of the plugin's side panel. The default value is 999. Example: |
| Optional. Enable or disable employer creation during the initial user setup. Example: |
Configure the data-indeed-allow-employer-creation parameter
The data-indeed-allow-employer-creation parameter is an optional attribute that controls whether users can create an Indeed employer account during the setup flow. To configure it:
| Option | Description | Use this option when |
|---|---|---|
| Leave unset | During setup, users see an additional screen to identify their user type and account status. | You don't know the user type (direct employer or agency) in advance. |
Set to true | Lets users create employer accounts on Indeed through the plugin. | You know users are direct employers who need to create accounts. |
Set to false | Prevents users from creating employer accounts through the plugin. Users are directed to contact their ATS, Indeed, or their agency for support. | You know users are agencies managing multiple advertisers, or employers using agencies, and account creation should be restricted. |
For agency employers and employers using an agency, setting data-indeed-allow-employer-creation to false is important to prevent the creation of duplicate employer accounts.
For direct employers, setting data-indeed-allow-employer-creation to true streamlines the setup process by skipping the self-identification screen, allowing for quicker integration.
Visual guide
This image shows the user setup flow. The self-identification screen (How do you manage jobs?) appears if data-indeed-allow-employer-creation is not set.

Toggle visibility
The Indeed ATS JavaScript plugin provides a global IndeedAtsPlugin variable with these functions on the script load:
| Function | Visibility |
|---|---|
renderPlugins(): void | Renders all plugin UIs (buttons and side panel) on the page. Unmounts existing UIs before rendering. Called automatically on script load. |
unmountPlugins(): void | Unmounts all plugin UIs (buttons and side panel) from the page. Does nothing if no UIs exist. |
renderButton(root: HTMLElement): void | Renders a plugin button on a root HTML element. Does nothing if the element lacks required |
runmountButton(root: HTMLElement): void | Unmounts a plugin button from a root HTML element. Does nothing if no button exists. |
Use these APIs to control plugin UI visibility. For single page applications, you might need to render buttons in elements that don't exist at script load. Call renderButton when the mount point becomes visible.
Display job visibility status
The ATS JavaScript Plugin's job visibility feature enables employers on your ATS site to view the status of the jobs they have posted.
You can display a job visibility button which, if you set it to be dynamic, displays the visibility status of the corresponding job.
The user can select the button for more details about the visibility status of the job.
Enable job visibility in the plugin
In the <script> tag for the ATS JavaScript Plugin, include job-visibility in the data-indeed-enabled-plugins attribute. See Load the plugin script.
Display a job visibility button
The job visibility button is intended to be displayed for a single job. It cannot show the status of all jobs or a grouping of jobs.
To display a job visibility button, add this <div> element:
<div data-indeed-plugin="job-visibility" data-indeed-employer-job-id="<INDEED-EMPLOYER-JOB-ID>" data-indeed-is-dynamic="false" data-indeed-job-title="<JOB-TITLE>" data-indeed-button-size="<sm|md>"></div>In the previous code snippet, replace the values in angle brackets (<>) with your own values.
This table describes the data-indeed-* attributes:
| Attribute | Description |
|---|---|
data-indeed-plugin | Required. Set to |
data-indeed-employer-job-id | Required. The employer job ID that is returned when your ATS posts the job through the Job Sync API. We recommend that you store this value in your database and associate it with the job identifier in your system. |
data-indeed-is-dynamic | Optional. Value is If If |
data-indeed-job-title | Optional. Title of the posted job. Used as the title in the plugin UI. |
data-indeed-button-size | Optional. The size of the job visibility button. Supported values:
Example: |
Job visibility button variants
The behavior of the job visibility button differs depending on whether it is a dynamic or static button— that is, whether data-indeed-is-dynamic is set to true or false.
Dynamic buttons are still in beta. Button performance might be unstable and/or slow down performance of the entire page.
By embedding the HTML code in Display a job visibility button, the job visibility button for a particular job is generated with its predefined styles.
The button is rendered automatically depending on its current state. The job visibility feature supports these states:
| State | Image | Description |
|---|---|---|
Loading | The plugin is loading the button's state. | |
| Awaiting | The plugin is processing the job in a queue. | |
| Ineligible | The job has unresolved issues and is not visible on Indeed and Indeed PLUS job boards. | |
| Eligible* | The job is visible on Indeed but not on Indeed PLUS job boards. | |
| Eligible | The job is visible on Indeed and Indeed PLUS job boards. | |
| Expired | The job has expired. | |
| Fallback | The button is static or its state could not be loaded. |
Where to display job visibility buttons
When deciding where to display job visibility buttons, consider the context in which employers are most likely to want to view job visibility status.
Also consider the balance of UI elements, making sure that the buttons don't make the page look too busy and complicated.
Here are some recommended places to consider displaying job visibility buttons:
Job list page
If you display job visibility buttons on the job list page, employers can quickly view the visibility status of all jobs.
When there are a large number of jobs on a single page, consider using static buttons (data-indeed-is-dynamic="false") to reduce the time to render many buttons on the page.
Job detail page
Displaying a job visibility button on the job detail page enables employers to quickly view visibility status for a given job.
Consider displaying the button close to related information so employers can see it in the right context.
Job visibility best practices
Follow these guidelines when displaying job visibility buttons:
-
The button is automatically rendered with predefined styles following Indeed branding. Use the generated button without making any changes.
-
The button has a width of 164px. The visible width varies depending on the button's state.
-
The button has a height of 40px (
data-indeed-button-size="md") or 32 px (data-indeed-button-size="sm"). -
The button works best on a light background.
-
Always maintain a minimum 8px margin on all sides of the button.
Job visibility troubleshooting
The job visibility button doesn't show the status
To enable the dynamic button, confirm that data-indeed-is-dynamic="true".
Enable sponsored jobs
See Indeed Plugin Terms.
The sponsored jobs feature of the ATS JavaScript Plugin enables employers on your ATS site to sponsor jobs on Indeed. For more information about sponsored jobs, see Sponsored Jobs API.
Enable sponsored jobs in the plugin
In the <script> tag for the ATS JavaScript Plugin, include sponsored-jobs in the data-indeed-enabled-plugins attribute. See Load the plugin script.
Display a sponsored job button
After enabling sponsored jobs, the Sponsor button is available to use in your ATS site. When an employer selects a Sponsor button, they can sponsor the corresponding job or view the sponsored job's details.
To display a Sponsor button, add this <div> element:
<div data-indeed-plugin="sponsored-jobs" data-indeed-ref-num="<REF-NUM>" data-indeed-source-name="<SOURCE-NAME>" data-indeed-job-title="<JOB-TITLE>"></div>Replace the parameters in angle brackets (<>) with your own values. This table describes the data-indeed-* attributes:
| Attribute | Description |
|---|---|
data-indeed-plugin | Required. Set to |
data-indeed-ref-num | Required. A unique identifier for the job, provided by the employer. The job must be available on Indeed. If the job was created using the Job Sync API, set this to SourcedJobPostingMetadataInput.jobPostingId. If the job was created using an XML job feed, set this to <referencenumber>. |
data-indeed-source-name | Required. The parent organization that is hiring for this job. If the job was created using the Job Sync API, set this to SourcedJobPostingJobSourceInput.sourceName. If the job was created using an XML job feed, set this to <sourcename>. |
data-indeed-job-title | Optional. The title of the job. This is used to auto-fill the campaign name. If you do not provide this value, the campaign name is auto-filled with New Campaign. |
Sponsored job button variants
The Sponsor button appearance varies based on the sponsored job status.
| Status | Description | Image |
|---|---|---|
| None | The job is not being sponsored, or the sponsorship has been deleted. | |
| Scheduled | The job is scheduled to be sponsored. | |
| Spending | The job sponsorship is active and the employer is spending their budget. | |
| Not spending | The campaign is active, but the employer is not spending their budget. In this state, the job's visibility is not being boosted, so it is the same as if it were not being sponsored. See List employer campaigns and statuses for reasons why an employer might not be spending their budget. | |
| Paused | The job sponsorship is paused. | |
| Unavailable | The job cannot be sponsored because it is not available on Indeed. |
Where to display sponsored job buttons
When deciding where to display sponsored job buttons, consider the context in which employers are most likely to want to sponsor jobs.
Also consider the balance of UI elements, making sure that the buttons don't make the page look too busy and complicated.
Here are some recommended places to display sponsored job buttons:
Job list page
If you display sponsored job buttons on the job list page, employers can quickly view sponsored job statuses and manage job sponsorships.

After posting a job
Displaying a sponsored job button immediately after an employer posts a job encourages them to start sponsoring.

Sponsored jobs best practices
Follow these guidelines when displaying a sponsored job button:
| Best practice | Examples |
|---|---|
Maintain a minimum 8px margin on all sides of the button. | ✅ Correct example: ![]() ❌ Incorrect example: ![]() |
The button is 40px tall. Its width depends on its state. Verify the site layout adapts to the button's different states. | ✅ Correct example: ![]() ❌ Incorrect example: ![]() |
The button works best on a light background. | ✅ Correct example: ![]() ❌ Incorrect example: ![]() |
The button renders with predefined Indeed branding styles. Use it without modification. | ✅ Correct example: ![]() ❌ Incorrect example: ![]() |
Troubleshooting
The plugin shows "Unable to connect to the server"
Confirm that:
data-indeed-oauth-client-idis set to the correct client ID.data-indeed-redirect-urlis set to a redirect URL that is registered in Partner Console and that has the same origin as the page running the plugin.
If the issue persists, contact Indeed.
A plugin button doesn't show the correct status
It takes several hours for plugin buttons to update after you make changes to a job posting.







