Get reference information for the Job Sync API.

🚧

Closed BETA:

During BETA, Indeed can support a limited number of ATS partners.

Indeed maintains a waiting list. To indicate your interest, submit an integration request. Indeed keeps the request on file and will reach out when ready to onboard you.

📘

Note:

By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.

Mutations

jobsIngest

jobsIngest return type

JobsIngestMutations

Input objects

CreateSourcedJobPostingInput

Input object with job data for the submitted or updated job posting.

Field Type Description
bodySourcedJobPostingBodyInputRequired. Job description.
metadataSourcedJobPostingMetadataInputRequired. Information about the job posting.
applyMethodSourcedJobPostingApplyMethodInputOptional. How to apply to the job.

CreateSourcedJobPostingsInput

Base input object for the createSourcedJobPostings mutation.

Field Type Description
jobPostingsCreateSourcedJobPostingInput[]Required. Job postings to be created.

EmployerIdentifiersInput

Input object of employer ID types, which are communicated individually to non-Indeed internal users.

An employer identifier uniquely identifies an employer.

Clients that have Indeed employer key (encrypted version of fccId):

{
"type": "INDEED_EMPLOYER",
"id": "<Indeed employerKey>"
}

Field Type Description
typeStringRequired. Magic string that indicates the ID type.

If you are an Indeed internal user, view the valid types at EmployerIdentifierType.

Otherwise, the type is communicated individually.

idIDRequired. ID.

ExpireSourcedJobBySourcedPostingIdInput

Input object that contains Indeed employer job ID.

Field Type Description
sourcedPostingIdIDRequired. Indeed employer job ID (UUID4 value).

Indeed generates this unique ID for each submitted job posting, and ATS can get it from the response of job creation.

Use this ID to expire the job posting.

ExpireSourcedJobsBySourcedPostingIdInput

Base input object for the expireSourcedJobsBySourcedPostingId mutation.

Supports bulk expiration of multiple jobs.

Field Type Description
jobsExpireSourcedJobBySourcedPostingIdInput[]Required. Jobs to be expired, by sourcedPostingId.

PeriodRangeInput

An input representing a range of time periods.

If the maximum amount of time is unbounded, exclude the max field or specify null. If the value is a single period, include the same value in the min and max fields.

Field Type Description
minPeriodRequired. The minimum ISO8601 date period or length represented by this range. This field supports ONLY the date portion of ISO8601 durations.
maxPeriodOptional. The maximum ISO8601 date period or length represented by this range. This field supports ONLY the date portion of ISO8601 durations.

If the range is open, exclude this field or set it to null.
If the value is a single period, include the same value in the min and max fields.

SourcedJobPostingApplyMethodInput

Input object with information about how to apply to the job.

Field Type Description
indeedApplySourcedJobPostingIndeedApplyInputOptional. Apply through Indeed Apply.

SourcedJobPostingBodyInput

Field Type Description
titleStringRequired. Job title. Do not include other types of information, such as employment type, job location, job descriptions, copies, or headlines.
subtitleStringOptional. Subheader for the job title.

Example: "A bright and pleasant workplace"

descriptionStringRequired. Description for the job posting.

This field is limited to 65000 bytes. ASCII characters are 1 byte, while other characters are from 2 to 3 bytes.

Ensure that the information in this field matches the details on the URL in your SourcedJobPostingMetadataInput.url field.

This field is the source of the raw text that Indeed shows to job seekers. Includes all job-relevant information, including text that can also be provided in other fields in the XML, such as education or experience.

Note:

Job descriptions require HTML formatting. For a list of supported HTML elements, see Formatting guidelines.

descriptionFormattingSourcedJobPostingFormattingTypeRequired. How to parse description.

You can use an HTML-formatted job description by passing RICH_FORMATTING. In the HTML job description, there are
additional constraints on the HTML attributes and element order.

salarySourcedJobPostingSalaryInputOptional. Structured salary information for this job.
hasProbationaryPeriodJobHasProbationaryPeriodRequired. Indicates whether the job has a probationary period.
probationaryPeriodSourcedJobPostingProbationaryPeriodInputOptional. Probationary period with a specific salary.

In Japan, some jobs have probationary periods with different salaries. Use this entity only for jobs in Japan with a probationary period. If your job is not in Japan or is in Japan and does not have a probationary period, do not include this entity. It might lead to your job being moderated.

locationSourcedJobPostingLocationInputRequired. Job location.
benefitsString[]Required. A list of benefits associated with the job.

Specify separate, distinct benefits as multiple strings in the list.

If the job does not have explicit non-salary benefits, specify an empty list.

SourcedJobPostingFineGrainedJobSalaryInput

Input object with salary information for the job.

Use minor currency units, such as cents, pence, or yen, for salary values.

Field Type Description
totalSalaryMinorInt64Optional. The total salary of a job for the specified period, in minor currency units.

Examples:

$102.50 -> 10250

€102.50 -> 10250

£102.50 -> 10250

¥10250 -> 10250

workingHoursFloatOptional. Expected number of hours of work expected per period. This is not necessarily a maximum number of hours a worker can work during the period, but an expected minimum.

Examples:

  • if period is HOUR and totalSalaryMinor is the amount of wage per hour, then set this field to 1.
  • if period is MONTH, then set this field to the total working hours per month.
totalOvertimeHoursFloatOptional. Total maximum overtime work hours for this job in the specified period, through period.
statutoryOvertimeHoursFloatOptional. Statutory overtime work hours in the specified period, through period. Accepts fractions of an hour.
fixedOvertimeSalaryMinorInt64Optional. If the overtime pay, fixedOvertimePay, is not included in the pay and is a fixed value, specify it in this field.

Examples:

$102.50 -> 10250

€102.50 -> 10250

£102.50 -> 10250

¥10250 -> 10250

fixedOvertimePayBooleanRequired. If a base salary already presumes a certain number of overtime hours without pay, a job must positively affirm this in this field.

Example: In the US, jobs that meet certain requirements can be designated as overtime exempt.

For more information, see the U.S. Department of Labor Fact Sheet #17A: Exemption for Executive, Administrative, Professional, Computer & Outside Sales Employees Under the Fair Labor Standards Act (FLSA).

Example: In Japan, fixed overtime means that the overtime wage is already fixed into the salary. For details, see What is Fixed Overtime Pay?.

SourcedJobPostingIndeedApplyInput

Input object of Indeed Apply information for the job.

Field Type Description
jobMetaStringOptional. Additional information.

This information is not displayed externally, but it is sent when using the apply through the POST URL.

postUrlWebUrlRequired. URL to which Indeed posts the application data. Encode this URL. Must be HTTPS.
phoneRequiredJobRequirementOptional. Indicates whether the phone number field is displayed on the job.

Default is OPTIONAL.

coverLetterRequiredJobRequirementOptional. Indicates whether the message or cover letter field is required.

Default is OPTIONAL.

resumeRequiredJobRequirementOptional. Indicates whether a resume is required (YES) or optional (OPTIONAL), or whether to hide the resume upload option from the user (NO).

If you specify optional or hidden (NO), you must include screener questions. You must support .pdf, .doc, .docx, .rtf, and .txt formats for resumes.

Default is YES.

resumeFieldsRequiredIndeedApplyConfigurationResumeField[]Optional. List of resume fields that the job seeker's resume must include.

This field overwrites the phone configuration parameters, if provided.

resumeFieldsOptionalIndeedApplyConfigurationResumeField[]Optional. List of resume fields that the job seeker's resume can include.

This field overwrites the phone configuration parameters, if provided.

nameFormatIndeedApplyNameFormatTypeOptional. Indicates whether a single field for the full name is sufficient in the apply form, or the full name must be split into first and last name.
applyQuestionsWebUrlOptional. URL that returns a JSON-formatted string of questions to ask during the Indeed Apply application process.
apiTokenIDRequired. API token. Required for Indeed Apply. For more details, see Generate an API token.

SourcedJobPostingJobContactInfoInput

Field Type Description
contactEmailEmailAddressRequired. Email address of the contact for the job.

Required by the Indeed Search Quality team.

Indeed recommends that the contact email domain be the same email domain as the URL of the company, or the companyWebsite.

contactNameStringOptional. Name for the client's contact.
contactPhonePhoneNumberOptional. Phone number for the client's contact.

SourcedJobPostingJobContactInput

Input object that lists job contacts.

Provides users access to the job in some systems on Indeed.

Field Type Description
contactTypeString[]Required. Closest roles that the contact has:
  • contact. For the primary contact information for the job.
  • hiring manager. For the hiring manager.
  • recruiter. For a recruiter.
  • user. For other users, such as interviewers or coordinators.
  • Both contact and recruiter. If the contact for a job is also the recruiter, for instance.
contactInfoSourcedJobPostingJobContactInfoInputRequired. Information about how to reach the contact.

SourcedJobPostingJobSourceInput

Field Type Description
companyNameStringRequired. Name of the company where the job is performed.
companyWebsiteWebUrlOptional. Root website of the company. For example, https://www.indeed.com. If the company is a franchise, use the brand website.
sourceNameStringRequired. The name of the parent organization that is hiring for the role. For example, if subsidiaries or franchises with multiple-branded locations under the same company exist, those jobs have the same value in the sourceName field. The sourceName must be unique across all job groups, and a sourceName can have only one sourceType, which is the type of organization.

When a user claims their jobs on Indeed, this identifier determines the granular group of jobs that are associated with their account.

sourceTypeStringRequired. Type of organization that is hiring for this role:
  • Employer. Direct employer, ad agency acting on behalf of the direct employer, or recruitment process outsourcer (RPO).
  • Job Board. Job board.
  • Staffing Agency. Staffing agency or recruitment firm.
employerIdsEmployerIdentifiersInput[]Optional. Replaces externalEmployerId and employerKey.

SourcedJobPostingLocationInput

Implementation detail: We'll need to format this info into the existing detailed_location UDDT.

Field Type Description
latitudeFloatOptional. Latitude of the location where the job is performed.
longitudeFloatOptional. Longitude of the location where the job is performed.
countryCountryCodeRequired. Country code of the country where this job is located. For the list of country codes, see Supported language codes, country codes, and locales. Corresponds to GIS admin0.
streetAddressStringOptional. Street address of the primary work location for the job. Include the street name and number.

Example (USA): 1600 Pennsylvania Ave

Example (Japan): 2-7-2

cityRegionPostalStringOptional. City and administrative region for your country, such as state, county, or prefecture, and postal code.

Example (USA): Washington, District of Columbia, 20500

Example (Japan): 100-8994 東京都千代田区丸の内

Example (UK): Mayfair, London, W1J

SourcedJobPostingMetadataInput

Field Type Description
jobSourceSourcedJobPostingJobSourceInputRequired. Information about the source of the job, whether a company, agency, franchise, and so on.
jobPostingIdStringRequired. A unique identifier for the job within the applicant tracking system (ATS). Historically, this value is the reference number.
jobRequisitionIdStringOptional. Requisition ID for the job in your applicant tracking system (ATS). This value does not need to be unique.
evergreenRequisitionIdStringOptional. Evergreen requisition ID for the job in your ATS. Use this value when there are multiple job postings over time for the same job.
talentPoolIdStringOptional. Talent pool ID. Use this value to track the talent pool applications to which this job should be tagged.
taxonomyClassificationSourcedJobPostingTaxonomyInputOptional. Classification of the job within Indeed.
datePublishedDateTimeRequired. Date when this job was first published.

Note:

If your site publishes the publication date, this date must match the date on your site.

urlWebUrlRequired. URL for this job posting on your site. Use the URL for the job description page, not the application page. Include the source=Indeed token URL parameter to track clicks from Indeed.
numberOfHiresIntOptional. Number of people to be hired for this job posting.
expirationDateDateTimeOptional. Date when hiring expires for this posting.

If provided and not changed by a future request, the job can be removed from Indeed.

photosSourcedJobPostingPhotoInput[]Optional. Photos for the job.
contactsSourcedJobPostingJobContactInput[]Required. User and contact information for the job.

Must include exactly one contact with a contactType that includes contact.

studentMetadataSourcedJobPostingStudentMetadataInputOptional. Metadata that defines aspects of jobs that are for college/university students and recent graduates.

The existence of a non-null value indicates that this is a job posting for an
internship, soon to be graduated, or recently graduated students.

applicationDueDateDateOptional. The date when applications are due.

This date is inclusive. If 2024-08-01 is specified,
then applications are accepted all day on 2024-08-01.

SourcedJobPostingPhotoInput

Field Type Description
photoUrlWebUrlRequired. URL of the photo associated with the job.

SourcedJobPostingProbationaryPeriodInput

Field Type Description
probationaryConditionsStringOptional. Text description of the probationary period. Add here the detail on working conditions (e.g. salary, working hours, employment types) during the probationary period if it is different from one after the probation.
probationarySalarySourcedJobPostingSalaryInputOptional. Salary information for the probationary period.

SourcedJobPostingSalaryInput

Input object of structured salary information for the job. Use the minor currency units for your locale.

In the US, cents is the most minor unit.

In Japan, Yen is the most minor unit.

Use maximumMinor and minimumMinor to express a salary range.

If your salary is fixed, set both maximumMinor and minimumMinor to the same value. If your salary has a minimum, set only minimumMinor.

The currency field uses ISO-4217 codes. For example, USD or JPY.

The salaryFrequency field accepts hour, day, week, month, mile, or year.

Field Type Description
currencyCurrencyCodeRequired.
maximumMinorInt64Optional. Maximum amount in the local minor currency.
minimumMinorInt64Required. Minimum amount in the local minor currency.
periodStringRequired. Period to pay.

This value also applies to other fields within this input object. For example, if period == MONTHLY, then working
hours under fineGrainedSalaryInformation are the expected number of working hours per month.

To ensure your job appears on Indeed, one of the following values is recommended:

  • DAY
  • HOUR
  • MILE
  • MONTH
  • WEEK
  • YEAR
  • TASK

Note:

If TASK is selected, field taskBasedSalaryInformation must also be provided.

fineGrainedSalaryInformationSourcedJobPostingFineGrainedJobSalaryInputOptional. Additional information related to the salary for the job.
taskBasedSalaryInformationSourcedJobPostingTaskBasedSalaryInputOptional. Additional information related to the task for the job.

SourcedJobPostingStudentMetadataInput

Metadata that defines aspects of jobs that are for college/university students
and recent graduates.

Field Type Description
startMonthYearMonthInput[]Required. The month the internship starts. If the internship has multiple options in which it may start, specify each month.
periodPeriodRangeInputOptional. Length of the internship, using the date portion of ISO8601. That is, P[n]Y[n]M[n]W[n]D, without any hours, minutes, or seconds specified.

When specifying months or years, for the purposes of searching for jobs and
range validation:

UnitDays
1 Month30
1 Year365

If weeks are specified (P2W), it is normalized to and output as days (P14D).
Otherwise, the same input is maintained, even with the internal conversion for search and validation purposes.

Examples:

InputOutputDays
P1M30DP1M30D60
P2MP2M60
P2WP14D14
P1M2W3DP1M17D47
graduationYearInt[]Required. The year(s) a candidate must plan to graduate for the candidate to be considered for the job.

If there is no strict requirement, do not specify any value.

programTypeStringOptional. The type of internship program.
  • OpenCompanyProgram: A shorter, from 1 to 3 days, engagement to learn more about a company.
  • InternshipProgram: A longer, at least approximately one month, engagement where the candidate performs specific work for a company.

SourcedJobPostingTaskBasedSalaryInput

Input object with task information for the job.

Field Type Description
taskLengthMinutesInt64Required. Duration of task.
taskDescriptionStringRequired. Description for task.

This field is limited to 65000 bytes. ASCII characters are 1 byte, while other characters are from 2 to 3 bytes.

SourcedJobPostingTaxonomyInput

Field Type Description
jobTypesString[]Optional. Type or types of job, such as full- or part-time or contract.
categoriesString[]Optional. List of job categories that help job seekers when searching. This optional field is highly recommended to include for job management or to reflect additional information from the job details page. For example, you might find it useful to include facility or department information in this field.
remoteTypeStringOptional. Location flexibility.

Use one of the following strings to best describe this role's location flexibility.

  • Fully Remote. Job can be performed remotely. No on-site work is required.
  • Hybrid Remote. Job involves a mix of on-site and remote days, typically within the same week.
  • COVID-19. Job is fully remote for COVID-19-related circumstances. Eventually, the job returns to partially or fully office-based.

Note:

The data collected from this field does not determine location.

educationStringOptional. Desired education level for this job.
experienceStringOptional. Desired experience for this job.
occupationsString[]Optional. Occupation or occupations applicable to this job.
attributesString[]Optional. One or more SUIDs or strings that represent taxonomy attributes.
attributesBlobStringOptional. Raw taxonomy input, for rare cases. Incorrect usage of this field can result in the job not appearing on Indeed.

YearMonthInput

An input type representing a year and month. This type is useful when
input must represent an entire month, instead of a specific date.

Field Type Description
yearIntRequired. The ISO8601 year for a period representing a whole, single, month.
monthIntRequired. The ISO8601 month for a period representing a whole, single, month.

Return types

CreateSourcedJobPostingResult

An intermediary type. A null jobPosting indicates a problem occurred during job creation. The GraphQL errors object indicates the problem for each null value by indicating the index in the error object.

This object might be updated with additional fields later that would be associated with each posting in a request, regardless of whether it was successful.

Field Type Description
jobPostingSourcedJobPostingOptional.

CreateSourcedJobPostingsPayload

Field Type Description
resultsCreateSourcedJobPostingResult[]Required. Return type for each job posting in the createSourcedJobPostings mutation.

The values in the array cannot be null. However, the corresponding jobPosting object can be null inside each value.

A null jobPosting object indicates that Indeed did not accept the job.

For rejected job postings, see the returned Error object.

ExpireSourcedJobByJobPostingIdAndSourceInfo

Data from the associated ExpireSourcedJobByJobPostingIdAndSourceInput.

Field Type Description
jobPostingIdStringRequired.
sourceNameStringRequired.

ExpireSourcedJobBySourcedPostingIdInfo

Data from the associated ExpireSourcedJobBySourcedPostingIdInput.

Field Type Description
sourcedPostingIdStringRequired.

ExpireSourcedJobResult

Field Type Description
trackingKeyStringRequired. Return type for ExpireSourcedJobsBySourcedPostingIdPayload.

Internal tracking ID from logrepo.

inputDataExpireSourcedJobResultInfoOptional. Input values associate with this result. Value is null in the case of an error.

ExpireSourcedJobsBySourcedPostingIdPayload

Field Type Description
resultsExpireSourcedJobResult[]Required. The payload for the expireSourcedJobsByPostingId mutation.

JobsIngestMutations

Field Type Description
createSourcedJobPostingsCreateSourcedJobPostingsPayloadOptional. Submit a job posting for ingestion into Indeed.

Successful responses indicate that Indeed received the job posting. The job is indexed and made available (pending spam and fraud detection) at a later time (minutes to hours).

If a job is not accepted, the corresponding SourcedJobPostingPayload has a null aggregationId, with an error in the standard GraphQL errors object.

expireSourcedJobsBySourcedPostingIdExpireSourcedJobsBySourcedPostingIdPayloadOptional. Expires a job posting.

Specify the sourcePostingId from the submitted job posting.

Indeed does not verify that the job exists before responding, so the response is always ACCEPTED.

SourcedJobPosting

Return type for an accepted job posting. Indeed considers a job as accepted if it is a complete job that is accepted for indexing.

Even if accepted, it might not appear on Indeed if it does not adhere to the Indeed Job Posting Standards.

If an accepted job does not appear on Indeed, see My job is not shown on Indeed.

Field Type Description
sourcedPostingIdIDRequired. UUID for the job, or the Indeed employer job ID.

Indeed generates this unique ID for each submitted job posting.

Use this ID to expire the job posting.

Unions

ExpireSourcedJobResultInfo

Enumerations

IndeedApplyConfigurationResumeField

Values for required and optional resume fields.

See Indeed Resume JSON object fields. This API has the same support.

PHONE
LOCATION
POSITIONS
EDUCATION
SKILLS
LANGUAGES
CERTIFICATIONS
NAME_PRONUNCIATION
DATE_OF_BIRTH
GENDER

IndeedApplyNameFormatType

"""
Show two fields for an applicant's first and last name
"""
FIRST_LAST_NAME
"""
Show a single field for an applicant's full name
"""
FULL_NAME

JobHasProbationaryPeriod

UNKNOWN
NO
YES

JobRequirement

"""
The field will not be shown on the application form.
"""
NO
"""
The field will be shown the an application form as an optional field.
Job Seeker can skip it to complete an application.
"""
OPTIONAL
"""
The field will be shown on the application form as a required field.
Job Seeker must fill it in to complete an application.
"""
YES

SourcedJobPostingFormattingType

Types for formatting.

RICH_FORMATTING
TEXT

Supported language codes, country codes, and locales

Supported language codes, country codes and locales
languageCode countryCode locale Description
cs cs Czech
cs CZ cs-CZ Czech (Czech Republic)
de de German
de BE de-BE German (Belgium)
de CH de-CH German (Switzerland)
de DE de-DE Standard German
en en English
en AE en-AE English (United Arab Emirates)
en AU en-AU Australian English
en BE en-BE English (Belgium)
en CA en-CA Canadian English
en CH en-CH English (Switzerland)
en GB en-GB British English
en HK en-HK English (Hong Kong)
en IE en-IE English (Ireland)
en IN en-IN English (India)
en MY en-MY English (Malaysia)
en NZ en-NZ English (New Zealand)
en PH en-PH English (Philippines)
en SG en-SG English (Singapore)
en US en-US American English
en ZA en-ZA English (South Africa)
es es Spanish
es ES es-ES Spanish (Spain)
es MX es-MX Spanish (Mexico)
fr fr French
fr BE fr-BE French (Belgium)
fr CA fr-CA French (Canada)
fr CH fr-CH French (Switzerland)
fr FR fr-FR French (France)
it it Italian
fr CH fr-CH Italian (Switzerland)
it IT it-IT Italian (Italy)
ja ja Japanese
jp JP jp-JP Japanese (Japan)
nl nl Dutch
nl BE nl-BE Dutch (Belgium)
nl NL nl-NL Dutch (Netherlands)
pl pl Polish
pl PL pl-PL Polish (Poland)
pt pt Portuguese
sv sv Swedish
sv SE sv-SE Swedish (Sweden)
uk uk Ukrainian
uk UA uk-UA Ukrainian (Ukraine)
zh zh Chinese
zh HK zh-HK Chinese (Hong Kong)
zh SG zh-SG Chinese (Singapore)

Common errors

The Job Sync API common errors are:

Error Description and common causes
BAD_USER_INPUT The value of an input parameter is invalid. In particular, the request has incorrect, missing, or incongruent information. For details, see the error message.
UNAUTHENTICATED The request was not attempted because it did not include sufficient authentication credentials. For details on authentication, see Indeed authentication.
FORBIDDEN Valid authentication credentials are present but have not been authorized for the endpoint. Ensure that your credentials have been mapped to a corresponding job feed. Without this mapping, you cannot post or edit jobs. Attempting to expire a job outside of your feed also triggers this error.