メインコンテンツまでスキップ

Integrating with Indeed through IA HTML metadata

Integrate with Indeed Apply by using Indeed Apply HTML metadata.

法的注意

This document is intended for those completing integrations using a non-standard method outside of Indeed's traditional, multi-source feeds.

Job delivery

Indeed handles the acquisition of your clients jobs through web crawling. Make sure your client’s job pages are available to be scraped by third-party sites, and grant the Indeed bot (user agent “IndeedBot 1.1”) access to your domains. Our services regularly check job content for updates to maintain the most accurate list of jobs still available.

In the event that a client no longer wants Indeed to crawl their jobs, they should submit a request using this page.

To facilitate the best possible launch, provide Indeed with a full list of job list URLs for your clients before the integration goes live.

Adding Indeed Apply

Use the Indeed Apply (IA) API to mark your jobs with the Easily Apply label on Indeed and allow job seekers to apply without leaving Indeed.

The IA API takes approximately two to three weeks to implement from start to deployment.

Generating an API token

Before you can implement an Indeed Apply integration, complete these steps:

日本のみ

  1. Manage app credentialsページでIndeedアカウントにサインインし、Register new applicationを選択します。

  2. アプリ名と説明を入力し、クレデンシャルタイプとしてIndeed Applyを選択して、Save and continueを選択します。

  3. Complete registrationを選択します。

    Indeed Applyトークンを取得するには、Manage app credentialsページに戻ります。クライアントIDがIndeed Applyトークンです。

日本以外

Indeed Apply XML連携を構築するには、Indeed Client Successチームにお問い合わせください。デベロッパー契約を締結すると、Indeed APIとサービスをお客様のプロダクトに組み込むアプリをIndeedがセットアップします。

アプリとそのIndeed Apply APIトークンクレデンシャルを表示するには、Partner Consoleにサインインします。

  • APIトークンクレデンシャルは、クライアントIDとクライアントシークレットです。
  • Indeedに投稿する各求人にこのAPIトークンを含めてください。

Adding IA by using HTML elements

Add Indeed Apply configuration attributes to a span> element with the class indeed-apply-widget.

IA HTML metadata example

This example shows the markup required for Indeed Apply through HTML.

<span class="indeed-apply-widget"
data-indeed-apply-apiToken="INSERT YOUR APITOKEN HERE"
data-indeed-apply-jobId="7775e2bc62b7f77e"
data-indeed-apply-jobLocation="New York, NY 10110"
data-indeed-apply-jobCompanyName="Your Company"
data-indeed-apply-jobTitle="Test Engineer"
data-indeed-apply-jobUrl="http://www.yourcompany.com/careers/yourjob123.html"
data-indeed-apply-postUrl="http://www.yourcompany.com/process-applications"
data-indeed-apply-jobMeta="right-rail-apply-button">
</span>

IA configuration parameters

Set up the Indeed Apply API using these configuration parameters.

All parameters should use this format in the span class: data-indeed-apply-”parameter”.

Do not use HTTP for Post URLs

If you currently use HTTP Post URLs, please migrate them to HTTPS immediately. Here is an article that provides instructions for how to convert HTTP → HTTPS.

List of parameters
Parameter nameRequiredDescriptionExample
jobUrlNo

The canonical URL to the complete job description. Encode this URL in XML files.

For applications on Indeed, the joburl is set in the apply button to the specific URL on Indeed where the apply occurs.

http%3A%2F%2Fwww.yourcompany.com%2F%0Acareers%2Fyourjob123.html
jobIdNo

The ID of the job, used for your own internal tracking.

This field can contain a maximum of 256 ASCII characters.

7775e2bc62b7f77e
jobTitleYes

The title of the job to display externally.

This value should match the <title> field in the XML.

Test Engineer
jobCompanyNameYesThe name of the company. This should match the value provided in the <company> field in the xml.Your Company
jobLocationYesThe location of the job.New York, NY 10110
jobMetaNoArbitrary information. This information does not appear externally, but is sent when using the apply through the post URL.right-rail-apply-button
apiTokenYesThe "Client ID" value generated with your Indeed Apply credentials. See Generating an API Token.your-api-token
postUrlYesThe URL to which Indeed posts the application data. Encode this URL in XML files. Must be HTTPS.https%3A%2F%2Fwww.yourcompany.com%2Fprocess-applications
phoneNoA string value indicating whether the phone number field should be displayed on the job. Acceptable values are optional, hidden, or required. The default value is optional.optional
coverletterNo

A string value indicating if the message or coverletter field is required. Acceptable values are optional, hidden, or required. The default value is optional.

This field is a freeform text field. If an attachment is expected consider using a screener question to request a file upload.

required
resumeNo

Specifies whether to require a resume, make a resume optional, or to hide the resume upload option from the user. Acceptable values are optional, hidden, or required. Default is required. If you select optional or hidden, you must include screener questions.

You must support .pdf, .doc, .docx, .rtf, and .txt formats for resumes.

Acceptable values are optional, hidden, or required. The default value is required. If you select optional or hidden, you must include screener questions. You must support .pdf, .doc, .docx, .rtf, and .txt formats for resumes.

required
nameNoA string value indicating if the name field in the apply form should be split into first and last name (name="firstlastname") or if a single field for the full name is sufficient (name="fullname"). The default value renders a single field for the full name. We recommend using name="firstlastname".firstlastname
questionsNoA URL which returns a JSON-formatted string of questions to be asked during the Indeed Apply application process. For more information about creating questions, see Screener questions. Encode this URL in XML files. Must be HTTPS.https%3A%2F%2Fwww.yourcompany.com%2Fjob1234%2Fquestions.json

Screener questions

Format screener questions in JSON and post them to a URL (HTTPS) that is included in the data-indeed-apply-questions parameter. Indeed does not host screener questions on your behalf. If your system supports screener questions you must implement them on Indeed Apply to have your integration approved.

Before you begin

Considerations

  • You can provide a maximum of 500 questions. However, our data indicates that a sharp drop-off in conversion occurs when more than 20 questions are asked.
  • Questions files should be no larger than 1 MB.
  • Questions files are cached server-side by unique question URLs and refreshed every 20 minutes.

    Questions are ONLY cached when they are requested by Indeed when a jobseeker starts the Indeed Apply process.

  • The format of type=date impacts how the application is passed to the third party as well as the parsing of min and max. The job seeker still enters the date based on their locale, not the specified format, and validation error messages are in their locale’s format.
  • For type=date, use yyyy instead of yy in the format to prevent confusion.

Verify the syntax of your JSON file and preview the look of your screener questions using the Indeed Apply Questions tool.

Best practices

  • Only include questions that are relevant to the job.
  • Include as few screener questions as possible. Remember that some job seekers answer these questions on mobile devices.
  • Use the “pagebreak” question type to split your application into logical sections. Indeed inserts pagebreaks by default if none are included in your JSON, but this can split your application up in unintended ways. Indeed displays up to ten questions on each page for both mobile and desktop.
  • Do not repeat questions that can be answered from a job seeker’s resume, or have already been collected during the Indeed Apply application process, e.g., basic contact details.
  • Follow local laws when determining which questions to ask. Consult your legal department about questions your local laws may prohibit.
  • Provide guidance to job seekers when answers require a specific format.
  • Indeed uses the SimpleDateFormat, so month must be formatted as MM. Using mm causes misconfiguration.

JSON for screener questions

This topic describes the parameters that you use to build all question types. For examples of specific question types, see Screener question types.

JSON screener question parameters

JSON screener question parameters
NameRequired?DescriptionAllowed valuesExample
idYesUnique ID for this question.any stringstrengths
typeYesDescribes the type of question.textarea
text
select
hierarchical
multiselect
date
file
information
pagebreak
textarea
question

No for type=information and type=pagebreak Yes for all other types

The question text that applicants see.any stringVeteran status?
text

Yes for type=information Not supported for all other types.

Text that applicants see.any stringThese questions are optional.
options

Yes for type=select and type=multiselect

The list of options available in the drop-down menu.JSON

[{ "value":"1", "label":"Female" ]}

value

Yes for type=select and type=multiselect

The value corresponding to each option that is returned for questions with drop-down menus.any string1
label

Yes for type=select and type=multiselect

The text for options in any drop-down menus.any stringFemale
requiredNoAllows you to set a question as required. When required:true is present, Indeed Apply forces a non-empty text field or a non-empty selection. When the required parameter is not present, questions are optional. If a question is optional, a possible answer value is "". true"required":true
format

Yes for type=date No for type=text

The accepted format of the input. If used with type:text, the question accepts only integer, decimal, or numeric_text validation answers. If used with type:date, the question only accepts SimpleDateFormat with MM. Text formats:
  • integer
  • decimal
  • numeric_text
  • other locale specific formats (please use Unicode CLDR as a guide)
Date formats:
  • integer
  • dd/MM/yyyy
integer, dd/MM/yyyy
limitNoFor type=text and type=textarea, the character limit for the answer. any integer100
minNoFor format=integer or format=decimal, the minimum value for the answer. For type=date, the date that the answer must be on or after.

any integer for format=integer
any decimal for format=decimal
any date for type=date (in the specified format)

0
maxNoFor format=integer or format=decimal the maximum value for the answer. For type=date, the date the answer must be on or before.

any integer for format=integer
any decimal for format=decimal
any date for type=date (in the specified format)

100
conditionNoMarks a question as conditional, depending on the answer to a previous select question. Specify the id of the previous question as well as the option value that activates this question.
For example, you might ask the applicant if they served in the military. If they answer yes, you display a conditional question that asks what branch they served in.
JSON

"condition":{ "id": "parent1", "value": 0}

Screener question types

textarea

A question that displays a multi-line text entry field. Used for questions with long-form answers.

textarea example

{
"id": "envirotext",
"type": "textarea",
"question": "Describe your ideal work environment:"
}

text

A question that displays a single-line text entry field. Used for questions with shorter answers.

See these examples and the previous table for more information on the different formats available for text questions: integer, decimal, and numeric_text.

text examples

No format specification:

{
"id": "city",
"type": "text",
"question": "What city are you located in?",
"required": true
}

Integer: Displays whole numbers; does not allow for decimals or leading zeroes

{
"id": "age",
"type": "text",
"question": "Age?",
"format": "integer",
"min": "16",
"max": "75"
}

Numeric text: Allows for numbers with leading zeroes; does not allow for decimals

{
"id": "experience",
"type": "text",
"format": "numeric_text",
"question": "How many years of experience do you have in this field?",
"required": false
}

Decimal: Displays numbers with decimals; allows for leading zeroes

{
"id": "gpa",
"type": "text",
"format": "decimal",
"question": "What was your GPA?",
"required": true
}

select

A question that displays a drop-down menu that allows the applicant to select a single answer. Used for questions with multiple choice answers.

If you include five or fewer answer options, those options appear as radio buttons. If you include more than five options, those options appear in a drop-down menu.

select example

{
"id": "gender",
"type": "select",
"question": "Gender?",
"options": [{
"value": "0",
"label": "Decline to answer"
},
{
"value": "1",
"label": "Male"
},
{
"value": "2",
"label": "Female"
}
]
}

multiselect

A question that displays a list of checkboxes that allows the applicant to select multiple answers. Used for questions with multiple answers.

multiselect example

{
"id": "favoritecolors",
"type": "multiselect",
"question": "Select your two favorite colors:",
"options": [{
"value": "0",
"label": "Maize"
},
{
"value": "1",
"label": "Blue"
},
{
"value": "2",
"label": "Green"
}
]
}

conditional

A question that is or is not displayed based on responses to previous questions. For example, you might ask an applicant if they are at least 18 years of age. If they answer no, you ask if they can provide required work documentation.

conditional example

[{
"id": "profile-atLeast18",
"question": "Are you at least 18 years of age?",
"required": true,
"options": [{
"value": "1",
"label": "Yes"
},
{
"value": "0",
"label": "No"
}
],
"type": "select"
},
{
"id": "profile-permit",
"question": "Can you provide a work permit?",
"required": true,
"condition": {
"id": "profile-atLeast18",
"value": "0"
},
"options": [{
"value": "1",
"label": "Yes"
},
{
"value": "0",
"label": "No"
}
],
"type": "select"
}
]

hierarchical

A question that displays additional questions and responses based on previously selected answers. For example, you might ask an applicant to choose a state. Then, depending on what they select, you could offer them a drop-down list of cities within that state. Each hierarchical question is limited to 3 levels, for example: state/city/county.

Hierarchical questions are similar to conditional questions. However, hierarchical questions may be better suited to certain question types where an initial selection defines potential answers for subsequent questions. Using the hierarchical functionality reduces the total number of questions needed to obtain related information.

hierarchical example

[{
"id": "hierarchical",
"type": "hierarchical",
"question": "State",
"required": true,
"options": [{
"value": "0",
"label": "California"
}, {
"value": "1",
"label": "Texas"
}, {
"value": "2",
"label": "New York"
}],
"hierarchicalOptions": [{
"id": "cali_cities",
"options": [{
"value": "0",
"label": "San Francisco"
}, {
"value": "1",
"label": "Los Angeles"
}],
"condition": {
"id": "hierarchical",
"value": "0"
}
}, {
"id": "texas_cities",
"options": [{
"value": "0",
"label": "San Antonio"
}, {
"value": "1",
"label": "Austin"
}],
"condition": {
"id": "hierarchical",
"value": "1"
}
},
{
"id": "sa_zipcodes",
"options": [{
"value": "0",
"label": "78212"
}, {
"value": "1",
"label": "78209"
}],
"condition": {
"id": "texas_cities",
"value": "0"
}
}
]
}]

date

A question that displays a text field that only accepts date entry. Used for questions that must be answered with a date.

format is required when using this screener question type. The format must be dd/MM/yyyy or another locale-specific format that meets Unicode CLDR formatting. Indeed uses the SimpleDateFormat, so month must be formatted as MM. Using mm causes misconfiguration.

date example

{
"id": "startdate",
"required": true,
"type": "date",
"question": "Start date?",
"format": "dd/MM/yyyy",
"min": "01/02/2014",
"max": "03/04/2014"
}

file

A question that shows a file upload interface. Use for questions that require a file upload as an answer, such as certifications, portfolios, or example work. As Application data delivery options describes, the answer data in the JSON POST request contains the contentType, data, and fileName fields.

Accepted file types: doc, docx, gif, jfif, jif, jpe, jpeg, jpg, pdf, png, rtf, tif, tiff, txt

File size limit: 5 MB. The maximum combined limit per application is 15MB, including resume file.

Do not use this question type to acquire resumes. Instead, use the “Resume” IA configuration parameter.

file example

{
"id": "file2",
"type": "file",
"question": "Please attach a recent example of your work.",
"required": true,
"min": "1",
"max": "3"
}

information

A text display that does not require a response. Used to include explanatory text or provide section headings. You can include these HTML elements in the text: <b>, <p>, <br>, <li>, <ul>, <ol>, <a href=" ">. Only HTTP and HTTPS protocols are allowed in URLs. Links open in a new tab.

Do not use <br> to force line breaks after paragraphs. Indeed automatically inserts line breaks between paragraphs.

information example

[{
"id": "first_header",
"type": "information",
"text": "The next set of questions are <b>optional</b> and are for recording purposes only. Make sure to view the < a href = 'http://www.eeoc.gov/employers/upload/poster_screen_reader_optimized.pdf' > EEO is the Law < /a> poster.",
"fontsize": 8
}]

pagebreak

Used to group questions on a page. All questions included between two pagebreak types appear on the same page. You can group up to 20 questions on the same page. Indeed defaults to 3 questions per page on desktop and groups all questions onto a single page for mobile.

pagebreak example

[{
"id": "page1_open",
"type": "pagebreak"
},
{
"id": "question_sample",
"type": "text",
"question": "Age?"
},
{
"id": "page1_close",
"type": "pagebreak"
}
]

JSON post example

Screener questions and their answers are a part of the questionsAndAnswers section in the JSON file.

  • questionsAndAnswers: (Improved format)
  • questionsAndAnswers: A list of
  • question: question as described in the previous section
  • answer: the answer given to the above question
  • url: the URL from which the questions were retrieved
  • retrievedOnMillis: the datetime in milliseconds at which the questions were retrieved

Click this link to view or download a full example JSON post file. (Contains both the Legacy and Current formats.)

Testing your screener questions?

Verify the syntax of your JSON file and preview the look of your screener questions using the Indeed Apply Questions tool.

Test the entire Indeed Apply application flow by using our external testing tool. This can include the full screener question process.

Application data delivery

PostUrl

If you process applications programmatically, specify a URL where Indeed Apply sends a POST request. The data-indeed-apply-postUrl data attribute must be a string containing the URL where Indeed posts the application data. The URL must be HTTPS.

Because Indeed sends the application data as the raw body of the HTTP POST request, the request cannot be processed like a typical form. The body of the request contains a JSON document that must be read and parsed. Not all JSON fields are provided, so you should use a robust JSON parser that treats missing fields as empty and ignores unrecognized fields.

The JSON data payload has no maximum size.

The POST body is encoded as UTF-8 and contains an authenticity header that is used to verify that Indeed is sending you the application.

A file portion of the Applicant field contains three fields: contentType, data, and fileName.

  • ContentType is determined based on the fileName.
  • The data field contains the raw Base64-encoded resume file.
  • These filetypes must be supported by the third party: txt, pdf, doc, docx, rtf.

Do not redirect the POST to another URL, that is, through a 301 or 302 redirect. Indeed Apply does not handle redirects.

JSON application data

JSON Resume upload example

{
"id": "2b806761c722b0bf431e67168a74bfaf4d67e6070d6ac0160cace3277f6b99df",
"job": {
"jobId": "123456",
"jobKey": "8q2w4e4r5t6y7u8i",
"jobTitle": "Test Engineer",
"jobCompany": "Your Company",
"jobLocation": "Austin TX",
"jobUrl": "http://www.yourcompany.com/careers/yourjob123",
"jobMeta": "job-meta"
},
"applicant": {
"fullName": "Indeed Tester",
"coverletter": "Cover Letter of Indeed Tester for Your Company",
"email": "Indeed.Tester@indeed.com",
"phoneNumber": "+123321-1111111",
"resume": {
"file": {
"id": "13ffsffc30b0737c5b2927c0sfqq24rr8a214ef4ca6cacded5dcaa3032e8fcd3",
"fileName": "Indeed_Tester-Upload-Resume.pdf",
"contentType": "application/pdf",
"data": "VBeead131ERi0x"
}
},
"verified": true
},
"questions": {
"url": "https://apply.qa.indeed.net/indeedapply/static/questions/basic.json",
"retrievedOnMillis": 0,
"questions": [{
"id": "automation_exp",
"question": "How many years of Automation experience do you have?",
"type": "text",
"required": true,
"format": "integer",
"min": "0",
"max": "99",
"limit": "300",
"options": [],
"hierarchicalOptions": []
},
{
"id": "japanese",
"question": "Do you speak Japanese?",
"type": "select",
"required": true,
"options": [{
"label": "Yes",
"value": "0"
},
{
"label": "No",
"value": "1"
}
],
"hierarchicalOptions": []
},
{
"id": "experience",
"question": "Describe your most favourite ice cream flavor",
"type": "textarea",
"required": false,
"options": [],
"hierarchicalOptions": []
},
{
"id": "extra",
"question": "Website Url",
"type": "text",
"required": false,
"options": [],
"hierarchicalOptions": []
},
{
"id": "multi",
"question": "Which countries would you relocate to? (you can select multiple)",
"type": "multiselect",
"required": false,
"options": [{
"label": "United States",
"value": "0"
},
{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
},
{
"label": "Other",
"value": "4"
}
],
"hierarchicalOptions": []
}
],
"answers": [{
"id": "automation_exp",
"value": "12"
},
{
"id": "japanese",
"value": "0"
},
{
"id": "experience",
"value": "Ice Cream"
},
{
"id": "extra",
"value": "www.testurl.com"
},
{
"id": "multi",
"values": [
"1",
"2",
"3"
]
}
]
},
"questionsAndAnswers": {
"url": "https://apply.qa.indeed.net/indeedapply/static/questions/basic.json",
"retrievedOnMillis": 0,
"questionsAndAnswers": [{
"question": {
"id": "automation_exp",
"question": "How many years of Automation experience do you have?",
"type": "text",
"required": true,
"format": "integer",
"min": "0",
"max": "99",
"limit": "300",
"options": [],
"hierarchicalOptions": []
},
"answer": "12"
},
{
"question": {
"id": "japanese",
"question": "Do you speak Japanese?",
"type": "select",
"required": true,
"options": [{
"label": "Yes",
"value": "0"
},
{
"label": "No",
"value": "1"
}
],
"hierarchicalOptions": []
},
"answer": {
"label": "Yes",
"value": "0"
}
},
{
"question": {
"id": "experience",
"question": "Describe your most favourite ice cream flavor",
"type": "textarea",
"required": false,
"options": [],
"hierarchicalOptions": []
},
"answer": "Ice Cream"
},
{
"question": {
"id": "extra",
"question": "Website Url",
"type": "text",
"required": false,
"options": [],
"hierarchicalOptions": []
},
"answer": "www.testurl.com"
},
{
"question": {
"id": "multi",
"question": "Which countries would you relocate to? (you can select multiple)",
"type": "multiselect",
"required": false,
"options": [{
"label": "United States",
"value": "0"
},
{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
},
{
"label": "Other",
"value": "4"
}
],
"hierarchicalOptions": []
},
"answer": [{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
}
]
}
]
},
"analytics": {
"ip": "0.0.0.0",
"advNum": "1212121212121",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
"device": "desktop",
"sponsored": false
},
"appliedOnMillis": 1629153774243,
"locale": "nl"
}

JSON Indeed Resume example

{
"id": "2b806761c722b0bf431e67168a74bfaf4d67e6070d6ac0160cace3277f6b99df",
"job": {
"jobId": "123456",
"jobKey": "8q2w4e4r5t6y7u8i",
"jobTitle": "Test Engineer",
"jobCompany": "Your Company",
"jobLocation": "Austin TX",
"jobUrl": "http://www.yourcompany.com/careers/yourjob123",
"jobMeta": "job-meta"
},
"applicant": {
"fullName": "Indeed Tester",
"firstName": "Indeed",
"lastName": "Tester",
"coverletter": "Cover Letter of Indeed Tester for Your Company",
"email": "Indeed.Tester@indeed.com",
"phoneNumber": "+123321-1111111",
"resume": {
"file": {
"fileName": "Indeed_Tester.pdf",
"contentType": "application/pdf",
"data": "JVBERi0xL=="
},
"html": "<html><head></head><body>Resume Content</body></html>",
"json": {
"firstName": "Indeed",
"lastName": "Tester",
"email": "Indeed.Tester@indeed.com",
"headline": "headline",
"summary": "summary",
"additionalInfo": "additionalinfo",
"phoneNumber": "555-555-4321",
"location": {
"country": "US",
"city": "Austin, TX",
"postalcode": "12345"
},
"personalDetails": {},
"skills": "Skill 1, Skill 2, Skill 3",
"positions": {
"_total": 2,
"values": [{
"startDateMonth": "01",
"startDateYear": "2015",
"endCurrent": true,
"title": "Product Manager",
"company": "Indeed",
"location": "Austin, TX",
"description": "This is a job I had. This is a description of what I did there. Resume used for testing purposes only."
},
{
"startDateMonth": "04",
"startDateYear": "2010",
"endDateMonth": "01",
"endDateYear": "2015",
"endCurrent": false,
"title": "Software Engineer",
"company": "Indeed",
"location": "Austin, TX",
"description": "This is a job I had. This is the description of what I did. Used for testing purposes only."
}
]
},
"educations": {
"_total": 1,
"values": [{
"degree": "Bachelor of Arts",
"field": "Graphic Design",
"school": "University of Texas",
"location": "Austin, TX",
"startDate": "2014",
"endDate": "2019",
"startDateYear": "2014",
"endDateYear": "2019",
"startDateMonth": "01",
"endDateMonth": "02",
"endCurrent": false
}]
},
"languages": {
"_total": 1,
"values": [{
"language": "French",
"proficiency": "Fluent"
}]
},
"links": {
"_total": 1,
"values": [{
"url": "http://www.indeed.com"
}]
},
"awards": {
"_total": 1,
"values": [{
"dateMonth": "04",
"dateYear": "2020",
"title": "Award Title",
"description": "award description"
}]
},
"certifications": {
"_total": 0,
"values": []
},
"associations": {
"_total": 1,
"values": [{
"startDateMonth": "01",
"startDateYear": "2014",
"endDateMonth": "06",
"endDateYear": "2018",
"endCurrent": false,
"title": "Group Title",
"description": "group description"
}]
},
"patents": {
"_total": 1,
"values": [{
"dateMonth": "04",
"dateYear": "2012",
"title": "Patent Title",
"description": "patent description",
"patentNumber": "12345",
"url": "http://www.indeed.com"
}]
},
"publications": {
"_total": 1,
"values": [{
"dateMonth": "08",
"dateYear": "2019",
"title": "Publication Title",
"description": "publication description",
"url": "http://www.indeed.com"
}]
},
"militaryServices": {
"_total": 1,
"values": [{
"startDateMonth": "02",
"startDateYear": "2003",
"endDateMonth": "05",
"endDateYear": "2009",
"endCurrent": false,
"serviceCountry": "US",
"branch": "military branch",
"rank": "rank",
"commendations": "military commendations",
"description": "military service description"
}]
}
},
"text": "resume in text format"
},
"verified": true
},
"questions": {
"url": "https://apply.qa.indeed.net/indeedapply/static/questions/basic.json",
"retrievedOnMillis": 0,
"questions": [{
"id": "automation_exp",
"question": "How many years of Automation experience do you have?",
"type": "text",
"required": true,
"format": "integer",
"min": "0",
"max": "99",
"limit": "300",
"options": [],
"hierarchicalOptions": []
},
{
"id": "japanese",
"question": "Do you speak Japanese?",
"type": "select",
"required": true,
"options": [{
"label": "Yes",
"value": "0"
},
{
"label": "No",
"value": "1"
}
],
"hierarchicalOptions": []
},
{
"id": "experience",
"question": "Describe your most favourite ice cream flavor",
"type": "textarea",
"required": false,
"options": [],
"hierarchicalOptions": []
},
{
"id": "extra",
"question": "Website Url",
"type": "text",
"required": false,
"options": [],
"hierarchicalOptions": []
},
{
"id": "multi",
"question": "Which countries would you relocate to? (you can select multiple)",
"type": "multiselect",
"required": false,
"options": [{
"label": "United States",
"value": "0"
},
{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
},
{
"label": "Other",
"value": "4"
}
],
"hierarchicalOptions": []
}
],
"answers": [{
"id": "automation_exp",
"value": "12"
},
{
"id": "japanese",
"value": "0"
},
{
"id": "experience",
"value": "Ice Cream"
},
{
"id": "extra",
"value": "www.testurl.com"
},
{
"id": "multi",
"values": [
"1",
"2",
"3"
]
}
]
},
"questionsAndAnswers": {
"url": "https://apply.qa.indeed.net/indeedapply/static/questions/basic.json",
"retrievedOnMillis": 0,
"questionsAndAnswers": [{
"question": {
"id": "automation_exp",
"question": "How many years of Automation experience do you have?",
"type": "text",
"required": true,
"format": "integer",
"min": "0",
"max": "99",
"limit": "300",
"options": [],
"hierarchicalOptions": []
},
"answer": "12"
},
{
"question": {
"id": "japanese",
"question": "Do you speak Japanese?",
"type": "select",
"required": true,
"options": [{
"label": "Yes",
"value": "0"
},
{
"label": "No",
"value": "1"
}
],
"hierarchicalOptions": []
},
"answer": {
"label": "Yes",
"value": "0"
}
},
{
"question": {
"id": "experience",
"question": "Describe your most favourite ice cream flavor",
"type": "textarea",
"required": false,
"options": [],
"hierarchicalOptions": []
},
"answer": "Ice Cream"
},
{
"question": {
"id": "extra",
"question": "Website Url",
"type": "text",
"required": false,
"options": [],
"hierarchicalOptions": []
},
"answer": "www.testurl.com"
},
{
"question": {
"id": "multi",
"question": "Which countries would you relocate to? (you can select multiple)",
"type": "multiselect",
"required": false,
"options": [{
"label": "United States",
"value": "0"
},
{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
},
{
"label": "Other",
"value": "4"
}
],
"hierarchicalOptions": []
},
"answer": [{
"label": "Canada",
"value": "1"
},
{
"label": "Mexico",
"value": "2"
},
{
"label": "Belize",
"value": "3"
}
]
}
]
},
"analytics": {
"ip": "0.0.0.0",
"advNum": "1212121212121",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36",
"device": "desktop",
"sponsored": false
},
"appliedOnMillis": 1629153774243,
"locale": "nl"
}

IA JSON fields

Top-level fields

Top-level fields
Field nameDescriptionExample
id Unique ID for the application as assigned by Indeed.
Include this ID with the application status when sharing disposition data with Indeed.
5156eb63c9a0a8ac 9358c3a444a2818c 8a5ffdbcba5960ec 0cace3277f6b99df
appliedOnMillis The date and time the user applied expressed in standard Unix time. 1324051581711
jobA job object representing the data provided by your button's HTML data attributes.See Job object fields
applicantAn applicant object representing the applicant.See Applicant object fields
analytics

An object containing this information:

  • ip – IP address of the user

  • referer – page the Easily Apply button is on if the button is present

  • userAgent – device/user agent of the user

  • targetedApplyAd – returns true for Indeed Apply ads served on Indeed

  • trackingUid – a value used internally by Indeed teams

  • sponsored – returns true if the job is sponsored on the Indeed search engine results page, and returns false if the job is organic, meaning not sponsored, on Indeed

sponsored returns empty/absent if the job click did not originate on Indeed, such as when a user applies from a third-party website or if the job seeker was directed to apply through Indeed's Targeted Ads (ITA) product. Third-party sites cannot specify whether a job is sponsored.

To track sponsored job clicks on third-party sites, enable URL tracking. Because JSON responses do not include the "sponsored" parameter, you must also enable XML-only responses. Sponsored job tracking from third-party websites must be configured per job in your client's Advertiser accounts and appended to the joburls, which can then be tracked by the ATS.

localeThe locale that was used when applying to the job.en_US

Job object fields

These fields are based on the button configuration.

Job object fields
Field nameDescriptionExample
jobTitle The title of the job to display. Test Engineer
jobCompany

The name of the company.

This name is jobCompanyName in the data-attributes.

Your Company
jobLocation The location of the job. New York, NY 10110

Applicant fields

Applicant fields
NameAlways provided?DescriptionExample
fullNameYesThe name of the applicant. If the user uses their Indeed Resume, this value is their firstName and lastName. John Doe
emailYesThe email of the applicant.

john.doe@indeed.com

phoneNumberNoThe phoneNumber if provided by the applicant.555-555-4321
coverletterNoThe cover letter of the applicant. If a user did not provide a cover letter, the JSON object omits this field.My cover letter
resumeNoAn object representing the user's resume.

See the Resume fields section

verifiedYes

Indicates whether a job seeker's email address is verified. Is true if:

  • The user is logged into a verified account, and their email address on the application matches the email address associated with the account, or
  • The user is logged out but their email has been verified by a one-time password

In all other cases, value is false.

true

Resume fields

Resume fields
Field nameResume uploadIndeed ResumeDescription
fileYesYesAn object containing the binary resume file.
textNoYesA text representation of the resume. Only provided if the user is using their Indeed Resume.
htmlNoYes A representation of the resume. Only provided if the user is using their Indeed Resume.
jsonNoYesA JSON structured representation of the resume data. See Indeed resume below.

Resume file fields

Resume file fields
NameDescriptionExample
dataThe file's raw binary bytes encoded using base 64.SGVsbG8h=
fileNameThe file name of the uploaded resume. When using the Indeed Resume, the file name is autogenerated.resume.txt
contentTypeThe content type identified using the resume file's extension.application/octet-stream

Indeed Resume fields

An array-like object that contains a _total field and a values field. The _total field is an integer indicating the length of the array. The values field is a JSON array containing the _total objects.

Deprecation notice

The publicProfileUrl field is deprecated and will be removed on June 30, 2026. Until removal, the field returns an empty string. Remove publicProfileUrl from your integration before this date.

Indeed Resume fields
Field nameTypeDescription
firstNamestringThe applicant's first name.
lastNamestringThe applicant's last name.
headlinestringThe applicant's resume headline.
summarystringThe applicant's resume summary.
publicProfileUrlurlDeprecated. Returns an empty string. Scheduled for removal on June 30, 2026.
additionalInfostringAny additional info.
phoneNumberstringThe phone number of the user if included on the user's Indeed Resume.
locationobjectJSON object representing the user's location if provided.
location.citystringThe applicant's city.
location.countrystringThe applicant's country.
location.postalcodestringThe applicant's postal code.
Personal detailsobject

Personal details supplied by applicant.

These are only applicable in certain markets as noted on each field.

skillsstringThe applicant's skills.
positionsarray-likeAn array-like object of position objects.
educationsarray-likeAn array-like object of education objects.
languagesarray-likeAn array-like object of language objects.
linksarray-likeAn array-like object of link objects.
awardsarray-likeAn array-like object of award objects.
certificationsarray-likeAn array-like object of certification objects.
associationsarray-likeAn array-like object of association objects.
patentsarray-likeAn array-like object of patent objects.
publicationsarray-likeAn array-like object of publication objects.
militaryServicesarray-likeAn array-like object of military service objects.

Personal details fields

Personal details fields
Field NameTypeApplicable MarketsDescriptionExample
highestLevelOfEducationSingle ValueAE, AU, BE, BR, CA, CL, CO, CR, CZ, DK, EC, ES, GB, HK, HU, IE, IT, LU, MX, NG, NL, NO, PA, PE, PL, PT, RO, RU, SE, TR, TW, UA, UY, VE, VN,ZAA dropdown with localized levels of education for each corresponding market, where a job seeker can select their highest level.GCSE or equivalent
Diploma of Higher Education
employmentEligibilitySingle ValueAE, AU, BH, EG, GB, HK, IT, KW, MA, NZ, OM, QA, RU, SA, SGAsks if job seekers are eligible to work in a country.Yes
highestCareerLevelSingle valueFR, HK, IN, KR, VN, ZAJob seekers can select their highest career level from 4 options.New Grad
industryMulti ValueAE, AR, BH, BR, CL, CN, CO, CR, EC, EG, ES, FR, GB, IE, IN, KR, KW, LU, MA, MX, NG, OM, PA, PE, QA, RU, SA, TR, TW, UA, UY, VE, ZAA drop-down where job seekers can select the industry in which they work/specialize.Arts & Entertainment
driversLicenseMulti ValueAR, BE, CL, CO, CR, CZ, EC, ES, GB, IT, JP, MX, NL, PA, PE, RU, TR, UY, VE, ZAA dropdown with localized Driver License options for each corresponding market.Light Vehicles
dateOfBirthDateAE, AR, BH, BR, CK, CN, CO, CR, EC, EG, ES, FR, HK, ID, IN, IT, JP, KR, KW, MA, MX, MY, NG, OM, PA, PE, PT, QA, RU, SA, SG, TR, TW, UA, UY, VE, VN, ZA3 dropdowns - date, month and year. Order is localized per market.DD-MM-YYYY
educationDescriptionOpen textCH, DE, NO, SE, UA, UY, VN, VNJob seekers can describe their education.Open text
genderSingle ValueJPThe job seeker’s gender.Female
disabilitySingle ValueBR, IT, MX, ZAA dropdown with different disability options (BR) or yes/no for remaining markets.Cognitive
OR
Yes
ethnicitySingle ValueZAA dropdown with ethnicity options.African
veteranStatusSingle ValueKRA job seeker’s veteran status.Applicable
NYSCStatusSingle ValueNGA dropdown for a job seeker's NYSC status.Ongoing
employmentSupportStatusSingle ValueKRA job seeker’s employment support status.Applicable
willingToTravelSingle ValueAR, CL, CO, CR, EC, ES, MX, PA, PE, UY, VEA dropdown for a job seekers' willingness to travel.Yes
europeanUnionWorkPermitSingle ValueIEAsks job seekers if they have a European Work Permit.Yes
citizenshipSingle ValuePH, SG, ZAA dropdown for a job seeker's citizenship.South African Citizen
IDPCheckboxUAAsks job seekers whether they are an internally displaced migrant.IDP (Internally Displaced Migrants)
employmentEligibilityMultiCountriesMulti ValueES, INA dropdown that asks job seekers which countries they are eligible to work in.Afghanistan
idNumberNumericBR, IT, TR, ZAAsks job seekers to type in their ID Number.Numeric value
totalYearsOfExperienceNumericID, INAsks job seekers about their years of experience.3
hobbiesAndInterestsOpen textCZ, HU, KR, LU, PL, ROAsks job seekers about their hobbies and interests.Open text

Indeed resume position fields

Indeed resume position fields
Field nameTypeDescriptionExample
titlestringThe title of the job.Product Manager
companystringThe company's name.Indeed
locationstringThe location of the position.Austin, TX
descriptionstringThe description of the position.--------
startDateMonthstring A string containing a number (1-12) representing the starting month. "09"
startDateYearstringA string containing a number representing the year of the start date."2007"
endDateMonthstringA string containing a number (1-12) representing the ending month."09"
endDateYearstring A string containing a number representing the year of the end date. "2007"
endCurrentbooleanA flag indicating if this is a current position.true

Indeed resume education fields

Indeed resume education fields
Field nameTypeDescriptionExample
degreestringThe degree level attained for this education listing.B.A.
fieldstringThe degree field studied for this education listing.Computer Science
schoolstringThe institution for this education listing.University of Texas
locationstringThe institution location.Austin, TX
startDateMonthstring A string containing a number (1-12) representing the starting month. "09"
startDateYearstringA string containing a number representing the year of the start date."2007"
endDateMonthstringA string containing a number (1-12) representing the ending month."09"
endDateYearstring A string containing a number representing the year of the end date. "2007"
endCurrentbooleanA flag indicating if this education is in progress.true

Indeed resume language fields

Indeed resume language fields
Field nameTypeDescriptionExample
languagestringA spoken, written, or signed language.French
proficiencystringThe level of proficiency in a spoken, written, or signed language.Fluent
Indeed resume link fields
Field nameTypeDescriptionExample
urlstringThe URL of the link.https://www.indeed.com

Indeed resume award fields

Indeed resume award fields
Field nameTypeDescriptionExample
titlestringThe title of this award.Best PM at Indeed
descriptionstringThe description for this award.Awarded for being the best PM in my company.
dateMonthstring A string containing a number (1-12) representing the month. "09"
dateYearstringA string containing a number representing the year."2007"

Indeed resume certification fields

Indeed resume certification fields
Field nameTypeDescriptionExample
titlestringThe title of this certification.PMP
descriptionstringThe description of this certification.Project Management Professional certification
startDateMonthstring A string containing a number (1-12) representing the starting month. "09"
startDateYearstringA string containing a number representing the year of the start date."2007"
endDateMonthstringA string containing a number (1-12) representing the ending month."09"
endDateYearstring A string containing a number representing the year of the end date. "2007"
endCurrentbooleanA flag indicating if this is a current certification.true

Indeed resume association groups fields

Indeed resume association groups fields
Field nameTypeDescriptionExample
titlestringThe title of this association.Society for Technical Communication
descriptionstringA description of this association.A professional association for technical communication professionals.
startDateMonthstring A string containing a number (1-12) representing the starting month. "09"
startDateYearstringA string containing a number representing the year of the start date."2007"
endDateMonthstringA string containing a number (1-12) representing the ending month."09"
endDateYearstring A string containing a number representing the year of the end date. "2007"
endCurrentbooleanA flag indicating if this is a current association.true

Indeed resume patent fields

Indeed resume patent fields
Field nameTypeDescriptionExample
titlestringThe title of this patent.--------
descriptionstringThe description of this patent.--------
patentNumberstringThe patent number.--------
urlstringThe URL for this patent.--------
dateMonthstring A string containing a number (1-12) representing the month. "09"
dateYearstringA string containing a number representing the year."2007"

Indeed resume publication fields

Indeed resume publication fields
Field nameTypeDescriptionExample
titlestringThe title of this publication--------
descriptionstringA description of this publication.--------
urlstringA URL for this publication.--------
dateDaystring A string containing a number representing the day of the month. "03"
dateMonthstring A string containing a number (1-12) representing the month. "09"
dateYearstringA string containing a number representing the year."2007"

Indeed resume military service fields

Indeed resume military service fields
Field nameTypeDescriptionExample
serviceBranchstringThe service branch for this service entry.--------
branchstringThe branch for this service entry.--------
rankstringThe rank for this service entry.--------
descriptionstringA description for this service entry.--------
commendationsstringAny commendations earned for this service entry.--------
startDateMonthstring A string containing a number (1-12) representing the starting month. "09"
startDateYearstringA string containing a number representing the year of the start date."2007"
endDateMonthstringA string containing a number (1-12) representing the ending month."09"
endDateYearstring A string containing a number representing the year of the end date. "2007"
endCurrentbooleanA flag indicating if this is a current position.true

POST authenticity

The post request sent to your postUrl contains an HTTP header that can be used to verify the authenticity of the post. Using the shared API secret, Indeed Apply computes a message signature using the HMAC-SHA1 algorithm. This signature is sent as an X-Indeed-Signature HTTP header. The code examples below demonstrate how the message signature is generated.

Using C# (version 6.0)

using System;
using System.Security.Cryptography;
using System.Text;
class MainClass
{
public static void Main(string[] args)
{
String message = getMessage();
// This is a sample api Secret for demonstration do not alter
String apiSecret = "Y0ur api secret key not shared &$%@";
String signature = computeSignature(message, apiSecret);
// Compare the message paylod signature hashed value to the pre-determined signature from the send.
if (signature.Equals("SGadPKocf3HD1LYXm3xGObB6hzk="))
{
Console.WriteLine("Successful signature validation using B64 HMAC SHA1: " + signature);
}
else
Console.WriteLine("Invalid Signature: " + signature);
}
static string computeSignature(string input, String key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
HMACSHA1 myhmacsha1 = new HMACSHA1(keyBytes);
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hash = myhmacsha1.ComputeHash(inputBytes);
return System.Convert.ToBase64String(hash);
}
static string getMessage()
{
string msg = "{'locale':'en_US','applicant':{'fullName':'John Doe','email':'john.doe@example.com'}}";
return msg;
}
}

Using Java (openjdk version 17.0.4.1)

import javax.crypto.Mac;
import javax.crypto.spec.*;
import javax.crypto.SecretKey;
import java.util.Base64;
public class App {
public static void main(String[] args) {
String message = getMessage();
String apiSecret = "Y0ur api secret key not shared &$%@";
String signature = computeSignature(message, apiSecret);
if(!signature.equals("SGadPKocf3HD1LYXm3xGObB6hzk="))
System.out.println("Invalid Signature: "+signature);
else
System.out.println("Successful signature validation using B64 HMAC SHA1: " + signature);
}
static String computeSignature(String message, String apiSecret) {
try{
byte[] keyBytes = apiSecret.getBytes();
SecretKey signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
return new String(Base64.getEncoder().encode(mac.doFinal(message.getBytes("UTF-8"))));
} catch(Exception e) {
System.out.println(e.getMessage());
throw new RuntimeException(e);
}
}
public static String getMessage() {
return "{'locale':'en_US','applicant':{'fullName':'John Doe','email':'john.doe@example.com'}}";
}
}

Using Perl (version 5.0)

use Digest::SHA qw(hmac_sha1_base64);
use Encode qw(encode);
# your secret key
$key = "Y0ur api secret key not shared &\$\%\@";
# test message
$message = get_message();
# compute signature
$signature = hmac_sha1_b64_string($key, $message);
if ($signature eq "SGadPKocf3HD1LYXm3xGObB6hzk=") {
print "Successful signature validation using B64 HMAC SHA1: " . $signature, "n";
} else{
print "Invalid Signature: ", $signature, "n";
}
sub hmac_sha1_b64_string {
$keybtes = encode("UTF8", $key);
$databytes = encode("UTF8", $message);
$b64digest = hmac_sha1_base64($databytes, $keybtes);
# Perl does not pad b64 output, so we have to do it manually
while(length($b64digest) % 4) {
$b64digest.= '=';
}
return $b64digest;
}
sub get_message {
return "{'locale':'en_US','applicant':{'fullName':'John Doe','email':'john.doe\@example.com'}}";
}

Using PHP (version 7.0)

function sign($str, $key) {
$opts= OPENSSL_RAW_DATA;
$digest= hash_hmac("sha1", $str, $key, $raw_output = TRUE);
$signature= base64_encode($digest);
return$signature;
}
$api_secret= "Y0ur api secret key not shared &$%@";
$message= "{'locale':'en_US','applicant':{'fullName':'John Doe','email':'john.doe@example.com'}}";
$signature= sign($message,$api_secret);
if( $signature!= "SGadPKocf3HD1LYXm3xGObB6hzk=")
print("Invalid Signature ". $signature);
else
print("Successful signature validation using B64 HMAC SHA1: " . $signature);

Using Python (version 3.10)

from hashlib import sha1
import hmac
import base64
# your secret key
secret = "Y0ur api secret key not shared &$%@".encode("utf-8")
# test message
message = "{'locale':'en_US','applicant':{'fullName':'John Doe','email':'john.doe@example.com'}}".encode('UTF-8')
print(message)
# compute the hash
message_hashed = hmac.new(secret, message, sha1)
digest = message_hashed.digest()
# b64 encode the hash. this is the message authentication value.
signature = base64.b64encode(digest)
if signature != b'SGadPKocf3HD1LYXm3xGObB6hzk=':
print("Invalid Signature: " + str(signature))
else:
print('Successful Signature Validation using B64 HMAC SHA1: ' + str(signature))

Using Node JS (LTS 16)

// Dependencies
const fs = require('fs');
const crypto = require('crypto');
const secret = "Your secret key - this the secret key associated with your Indeed Apply"
const xIndeedSignature = "This is the value of the X-Indeed-Signature return as part of the request headers";
/* Read data.json, this is the raw payload indeed send you in the body of the response.
create a data.json in the same directory with your index.js file
*/
const data = fs.readFileSync('data.json', {
encoding: 'utf8',
flag: 'r+'
});
// Encode data in base64
const encodedStr = new Buffer.from(data).toString('base64');
//compute the hash
const signature = crypto.createHmac('SHA1', secret).update(encodedStr, 'base64').digest('base64');
// check the computed signature against the X-Indeed-Signature provided in the request_headers of your application
if (signature !== xIndeedSignature) {
console.log(`invalid signature: ${signature}`, `\nX-Indeed-Signature: ${xIndeedSignature}`);
} else {
console.log(`Computed signature matches: ${signature}`);
}

Using SSL

See the Trusted root SSL certificates for supported certificates. If your certificate is not listed, follow up with your Integrations Delivery contact to test and verify your integration.

Testing and monitoring your IA integration

We want to help you provide the best possible experience for job seekers and employers who use Indeed. Review these sections to avoid issues with your integration.

Testing IA

Test your Indeed Apply code using the Indeed Apply test tool. Using the test tool, you can enter job metadata and generate the appropriate XML element or HTML code. You can also enter your own XML element or HTML code and verify that Indeed reads the metadata correctly.

Verify the syntax of your JSON file and preview the look of your screener questions using the Indeed Apply Questions tool.

Monitor integration health

When integrating with Indeed Apply, set up monitoring to ensure:

  • The integration successfully delivers job applications
  • Questions files are consistently available and valid

Indeed monitors whether applications are delivered successfully to our partners, along with other health indicators. If any problems arise, Indeed contacts you. In some cases, Indeed disables the Apply feature for some, or all, jobs until issues are fixed.

Undelivered applications are not lost. In case of failure, retry attempts are made automatically at periodic intervals after the original apply. If delivery is not possible, applications are retained for 60 days and retry attempts can be made on request.

To avoid integration issues, make sure you are returning HTTP status code 200 for all applications that are successfully received. Indeed Apply considers any other HTTP status codes, post timeouts or connect timeouts to be failures.

Additionally, return these statuses in these conditions:

  • 409 (Conflict): Use if there is a duplicate application already in your system. We define duplicate as an application from the same job seeker email, to the same jobid, within 120 days.
  • 410 (Gone): Use if a job Indeed attempts to post to is expired or no longer available. If you respond with HTTP 410, Indeed expires the job from our search results. If the job is still present in the XML at the time of the next feed run, Indeed activates the job.

If your jobs use screener questions, also ensure the pages that host those files:

  • are consistently available
  • do not redirect
  • are properly formed

Common integration issues

These common issues can cause integration errors with POST or Question URLs:

Common issues
IssueSolution
Redirecting to another location, e.g., via 301 redirects

Ensure the POST and Question URLs do not include redirects.

If you must include a protocol change (i.e. HTTP to HTTPS), be sure to:

  • send a 301 redirect error
  • include the precise HTTPS version of your URL in the location header

Any alternative behavior causes errors.

Expired SSL certificateRenew your SSL certificate. For more information, see the Trusted root SSL certificates.
Misconfigured SSL

Use an SSL server test to analyze and help diagnose the problem. See https://www.ssllabs.com/ssltest/.

Make sure to:

  • send the full certificate chain
  • check that none of the certificates in the chain require additional downloads

Any alternative behavior causes errors.

Question’s JSON is invalid or doesn’t follow Indeed’s requirements definitionReview the screener question requirements. Use the Test Indeed Apply Questions tool to preview changes.
Other issues accessing the resource (404, 500 errors, timeouts)

Implement strategies to ensure your resources reliably scale to accommodate high-traffic periods. Additionally, use appropriate HTTP response codes to help us investigate any issues that may occur.

As Indeed does not have a post size limit, please ensure you're able to handle any size post from Indeed. If you are unable to accommodate this request, please return an HTTP 413 error to indicate the post was too large.

Integration checklist

Review this checklist before launching your integration of the IA HTML metadata.

  1. Make sure you test the Indeed Apply data you’re including on your client's pages. If you have any trouble, contact your Indeed technical contact and they’ll troubleshoot with you.
  2. Use the Indeed Apply button test tool and the IA code to confirm you’re able to receive applications from Indeed.
  3. Verify that you are capturing the analytics field in the POST data and can categorize applications as organic, sponsored, or Indeed Targeted Ad.
    For more information, refer to Indeed Apply top-level JSON fields.
  4. Verify that you can capture Indeed resume applies and resume upload applies correctly within your ATS.
  5. Make sure every job has Indeed Apply included on its job details page that you host.
  6. Check that your SSL certificate is valid and up-to-date.
  7. Verify your question JSON using the question test tool.

    Note: The test tool does not provide sponsored data information.

  8. Make sure your screener questions are in line with our best practices.
  9. Deliver screenshots to your Integrations Delivery manager of the Opt Out process for Indeed Apply. We require all partners to develop Indeed Apply opt out within their system for clients to use.
  10. Ensure that your system is set up to return HTTP409 errors for duplicate applications and HTTP410 errors for expired jobs.
  11. Make sure you’ve provided your Integrations Delivery contact with a full client list with their public jobs lists URLs. This way we can ensure all clients are being actively scraped by Indeed.

このページの内容