Application data delivery

You can choose to receive Indeed Apply applications from job seekers through email or postUrl.

Email

If you choose to receive applications via email, you must set the email configuration attribute in your button’s configuration. Note: This is NOT permitted for ATS integrations, this is only permitted for direct client integrations. When a user completes the application, Indeed sends an email containing user’s full name, email address, and cover letter as well as their resume as an attachment. If the user applies with an Indeed Resume, the version of the resume is directly included in the email and a pdf version is attached. The email address must be encrypted; see Encryption and decryption for more information.

Encrypted email example

<span class="indeed-apply-widget"
    data-indeed-apply-apiToken="8f57d522dc544a737f70ad5828d5ace1"
    data-indeed-apply-jobLocation="New York, NY 10110"
    data-indeed-apply-jobCompanyName="Your Company"
    data-indeed-apply-jobTitle="Test Engineer"
    data-indeed-apply-email="b18d0be4c173dfa2b7cb7856e7c7b6f02a563867a9df67ca208c8b9654966299">
</span>

PostUrl

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

PostUrl example

<span class="indeed-apply-widget"
    data-indeed-apply-apiToken="8f57d522dc544a737f70ad5828d5ace1"
    data-indeed-apply-jobLocation="New York, NY 10110"
    data-indeed-apply-jobCompanyName="Your Company"
    data-indeed-apply-jobTitle="Test Engineer"
    data-indeed-apply-postUrl="http://www.yourcompany.com/process-applications?jobId=12345">
</span>

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.

Note: There is no maximum size for JSON data payload.

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 3 fields: contentType, data, and fileName.

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

Note: Do not redirect the POST to another URL (e.g. via a 301/302 redirect). Indeed Apply does not handle redirects.

JSON application data

JSON Resume upload example

{  
   "applicant":{  
      "email":"john.doe@indeed.com",
      "fullName":"John Doe",
      "phoneNumber":"555-555-4321",
      "verified":true,
      "resume":{  
         "file":{  
            "contentType":"text/plain",
            "data":"SGVsbG8h",
            "fileName":"resume.txt"
         }
      }
   },
   "appliedOnMillis":1325276227653,
   "job":{  
      "jobCompany":"Your Company",
      "jobId":"7775e2bc62b7f77e",
      "jobLocation":"New York, NY 10110",
      "jobMeta":"",
      "jobTitle":"Test Engineer",
      "jobUrl":"http://www.yourcompany.com/careers/yourjob123.html"
   },
   "locale":"en_US"
}

JSON Indeed Resume example

{  
   "locale":"en_US",
   "appliedOnMillis":1324051581711,
   "job":{  
      "jobId":"7775e2bc62b7f77e",
      "jobTitle":"Test Engineer",
      "jobCompany":"Your Company",
      "jobLocation":"New York, NY 10110",
      "jobUrl":"http://www.yourcompany.com/careers/yourjob123.html",
      "jobMeta":""
   },
   "applicant":{  
      "fullName":"John Doe",
      "email":"john.doe@indeed.com",
      "phoneNumber":"555-555-4321",
      "coverletter":"coverletter - text",
      "verified":true,
      "resume":{  
         "text":"resume - text",
         "html":"resume - html",
         "json":{  
            "firstName":"John",
            "lastName":"Doe",
            "headline":"headline",
            "summary":"summary",
            "publicProfileUrl":"http://www.indeed.com/r/123456",
            "additionalInfo":"me-additionalinfo",
            "phoneNumber":"555-555-4321",
            "location":{  
               "city":"Austin, TX"
            },
            "skills":"HTML, JavaScript",
            "positions":{  
               "_total":1,
               "values":[  
                  {  
                     "title":"Product Manager",
                     "company":"Indeed",
                     "location":"Austin, TX",
                     "startDateMonth":"09",
                     "startDateYear":"2007",
                     "endDateMonth":"-1",
                     "endDateYear":"-1",
                     "endCurrent":true,
                     "description":"I am the current product manager for Indeed Apply."
                  }
               ]
            },
            "educations":{  
               "_total":1,
               "values":[  
                  {  
                     "degree":"B.A.",
                     "field":"Computer Science",
                     "school":"University of Texas, Austin",
                     "location":"Austin, TX",
                     "startDate":"2002",
                     "endDate":"2006",
                     "endCurrent":false
                  }
               ]
            },
            "links":{  
               "_total":1,
               "values":[  
                  {  
                     "url":"http://www.indeed.com"
                  }
               ]
            },
            "awards":{  
               "_total":1,
               "values":[  
                  {  
                     "title":"Best PM at Indeed",
                     "dateMonth":"04",
                     "dateYear":"2008",
                     "description":"Best PM is voted on by Indeed employees and given to the PM with the most votes."
                  }
               ]
            },
            "certifications":{  
               "_total":1,
               "values":[  
                  {  
                     "title":"cert-title",
                     "startDateMonth":"02",
                     "startDateYear":"2007",
                     "endDateMonth":"02",
                     "endDateYear":"2008",
                     "endCurrent":false,
                     "description":"cert-description"
                  }
               ]
            },
            "associations":{  
               "_total":1,
               "values":[  
                  {  
                     "title":"group-title",
                     "startDateMonth":"01",
                     "startDateYear":"2009",
                     "endDateMonth":"-1",
                     "endDateYear":"-1",
                     "endCurrent":true,
                     "description":"group-description"
                  }
               ]
            },
            "patents":{  
               "_total":1,
               "values":[  
                  {  
                     "patentNumber":"patent-number",
                     "title":"patent-title",
                     "url":"patent-url",
                     "dateMonth":"02",
                     "dateYear":"2009",
                     "description":"patent-description"
                  }
               ]
            },
            "publications":{  
               "_total":1,
               "values":[  
                  {  
                     "title":"pub-title",
                     "url":"pub-url",
                     "dateDay":"14",
                     "dateMonth":"10",
                     "dateYear":"2004",
                     "description":"pub-description"
                  }
               ]
            },
            "militaryServices":{  
               "_total":1,
               "values":[  
                  {  
                     "serviceCountry":"mil-country",
                     "branch":"mil-branch",
                     "rank":"mil-rank",
                     "startDateMonth":"02",
                     "startDateYear":"2003",
                     "endDateMonth":"12",
                     "endDateYear":"2008",
                     "endCurrent":false,
                     "commendations":"mil-commendations",
                     "description":"mil-description"
                  }
               ]
            }
         },
         "file":{  
            "contentType":"application/octet-stream",
            "data":"SGVsbG8h=",
            "fileName":"John_Doe.pdf"
         }
      }
   }
}

IA JSON fields

Top-level fields

Top-level fields table
Field name Description Example
id Unique ID for the application as assigned by Indeed.
Please 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
job A job object representing the data provided by your button’s HTML data attributes. See Job object fields
applicant An applicant object representing the applicant. See Applicant object fields
analytics

An object containing the following information:

  • ip – IP address of the user
  • referrer – page the Easily Apply button is on if the button is present
  • useragent – device/useragent of the user
  • targetedApplyAd – returns true for Indeed Apply ads served on Indeed
  • 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

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

To track sponsored job clicks on 3rd-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 3rd-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. Refer to the Sponsored Jobs documentation for more information.

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

Job object fields

Note: These fields are based on the button configuration.

Job object fields table
Field name Description Example
jobUrl The canonical URL to the complete job description.
Note: For applications on Indeed, the jobUrl received in the application JSON will be set to the specific URL on Indeed where the apply happened.
http://www.yourcompany.com/

careers/yourjob123.html
jobId The ID of the job, useful for your own internal tracking. 7775e2bc62b7f77e
jobTitle The title of the job to display. Test Engineer
jobCompany The name of the company.

Note: This is called jobCompanyName in the data-attributes.

Your Company
jobLocation The location of the job. New York, NY 10110
jobMeta Arbitrary information provided in the original button configuration. right-rail-apply-button

Applicant fields

Applicant fields table
Name Always provided? Description Example
fullName Yes The name of the applicant. If the user is using their Indeed Resume, this will be their firstName + lastName. John Doe
email Yes The email of the applicant. john.doe@indeed.com
phoneNumber No The phoneNumber if provided by the applicant. 555-555-4321
coverletter No The cover letter of the applicant. If a user did not provide a cover letter, this field will not be present in the JSON object. My cover letter
resume Yes An object representing the user’s resume. See the Resume fields section
verified Yes

A flag indicating whether a job seeker’s email address is verified. Will display 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

All other cases, the flag will be set to false.

true

Resume fields

Resume fields table
Field name Resume upload Indeed Resume Description
file Yes Yes An object containing the binary resume file.
text No Yes A text representation of the resume. Only provided if the user is using their Indeed Resume.
html No Yes A representation of the resume. Only provided if the user is using their Indeed Resume.
json No Yes A JSON structured representation of the resume data. See Indeed resume below.

Resume file fields

Resume file fields table
Name Description Example
data The file’s raw binary bytes encoded using base 64. SGVsbG8h=
fileName The filename of the uploaded resume. The filename will be auto generated when using the Indeed Resume. resume.txt
contentType The content type identified using the resume file’s extension. application/octet-stream

Indeed resume fields

An array-like object 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.

Indeed resume fields table
Field name Type Description
firstName string The applicant’s first name.
lastName string The applicant’s last name.
headline string The applicant’s resume headline.
summary string The applicant’s resume summary.
publicProfileUrl url If the Indeed Resume is public, the URL to view the user’s public resume.
additionalInfo string Any additional info.
phoneNumber string The phone number of the user if included on the user’s Indeed Resume.
location object JSON object representing the user’s location if provided.
location.city string The applicant’s city.
location.country string The applicant’s country.
location.postalCode string The applicant’s postal code.
Personal details object Personal details supplied by applicant.
Note: These are only applicable in certain markets as noted on each field.
skills string The applicant’s skills.
positions array-like An array-like object of position objects.
educations array-like An array-like object of education objects.
links array-like An array-like object of link objects.
awards array-like An array-like object of award objects.
certifications array-like An array-like object of certification objects.
associations array-like An array-like object of association objects.
patents array-like An array-like object of patent objects.
publications array-like An array-like object of publication objects.
militaryServices array-like An array-like object of military service objects.

Personal details fields

Personal details fields table
Field name Type Applicable Markets Description Example
Highest level of education string CA, GB, NL This field shows a 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
Employment Eligibility string GB This question asks if job seekers are eligible to work in a country. Yes
Highest Career Level string FR In this field, job seekers can select their highest career level from 4 options. New Grad
Industry string GB, FR In this drop-down, job seekers can select the industry in which they work/specialize. Arts & Entertainment
Drivers License string GB, NL This field shows a dropdown with localized Driver License options for each corresponding market. Light Vehicles
Date of birth string FR, JP This field consists of 3 dropdowns – date, month and year. Order is localized per market. DD-MM-YYYY
Gender string JP This field represents the job seeker’s gender. Female

Indeed resume position fields

Indeed resume position fields table
Field name Type Description Example
title string The title of the job. Product Manager
company string The company’s name. Indeed
location string The location of the position. Austin, TX
description string The description of the position. ——–
startDateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
startDateYear integer The year of the start date ( -1 if not provided). 2007
endDateMonth integer 1-12 integer representing the starting month (-1 if not provided). -1
endDateYear integer The year of the end date (-1 if not provided). -1
endCurrent boolean A flag indicating if this is a current position. true

Indeed resume education fields

Indeed resume education fields table
Field name Type Description Example
degree string The degree level attained for this education listing. B.A.
field string The degree field studied for this education listing. Computer Science
school string The institution for this education listing. University of Texas
location string The institution location. Austin, TX
startDateYear integer The year of the start date ( -1 if not provided). 2007
endDateYear integer The year of the end date (-1 if not provided). -1
endCurrent boolean A flag indicating if this education is in progress. true

Indeed resume link fields

Indeed resume link fields table
Field name Type Description Example
url string The URL of the link. https://www.indeed.com

Indeed resume award

Indeed resume award table
Field name Type Description Example
title string The title of this award. Best PM at Indeed
description string The description for this award. Awarded for being the best PM in my company.
dateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
dateYear integer The year of the start date ( -1 if not provided). 2007

Indeed resume certification fields

Indeed resume certification fields table
Field name Type Description Example
title string The title of this certification. PMP
description string The description of this certification. Project Management Professional certification
startDateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
startDateYear integer The year of the start date ( -1 if not provided). 2007
endDateMonth integer An integer (1-12) representing the ending month (-1 if not provided). -1
endDateYear integer The year of the end date (-1 if not provided). -1
endCurrent boolean A flag indicating if this is a current certification. true

Indeed resume association groups fields

Indeed resume association groups fields table
Field name Type Description Example
title string The title of this association. Society for Technical Communication
description string A description of this association. A professional association for technical communication professionals.
startDateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
startDateYear integer The year of the start date ( -1 if not provided). 2007
endDateMonth integer An integer (1-12) representing the ending month (-1 if not provided). -1
endDateYear integer The year of the end date (-1 if not provided). -1
endCurrent boolean A flag indicating if this is a current association. true

Indeed resume patent fields

Indeed resume patent fields table
Field name Type Description Example
title string The title of this patent. ——–
description string The description of this patent. ——–
patentNumber string The patent number. ——–
url string The URL for this patent. ——–
dateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
dateYear integer The year of the start date ( -1 if not provided). 2007

Indeed resume publication fields

Indeed resume publication fields table
Field name Type Description Example
title string The title of this publication ——–
description string A description of this publication. ——–
url string A URL for this publication. ——–
dateDay integer The day of the month (-1 if not provided). 9
dateMonth integer An integer (1-12) representing the month (-1 if not provided). 9
dateYear integer The year of the date ( -1 if not provided). 2007

Indeed resume military service fields

Indeed resume military service fields table
Field name Type Description Example
serviceBranch string The service branch for this service entry. ——–
branch string The branch for this service entry. ——–
rank string The rank for this service entry. ——–
description string A description for this service entry. ——–
commendations string Any commendations earned for this service entry. ——–
startDateMonth integer An integer (1-12) representing the starting month (-1 if not provided). 9
startDateYear integer The year of the start date ( -1 if not provided). 2007
endDateMonth integer An integer (1-12) representing the starting month (-1 if not provided). -1
endDateYear integer The year of the end date (-1 if not provided). -1
endCurrent boolean A 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 4.0)

using System;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;

class MainClass {
  public static void Main (string[] args) {
    String message = getMessage();
    String apiSecret = "your api secret key";
    String signature = computeSignature(message, apiSecret);
    if(signature.Equals("m7I9OcotC2GxmVEVAufv5TD7lEk=")) {
      Console.WriteLine("B64 HMAC SHA1: "+signature);
    } else Console.WriteLine("invalid value: "+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() {
    return "{"locale":"en_US","applicant":{"fullName":"John Doe","email":"john.doe@example.com"}}";
  }
  
}

Using Java (version 1.8)

import javax.crypto.Mac;
import javax.crypto.spec.*;
import javax.crypto.SecretKey;
import java.util.Base64;

public class Main {

    public static void main(String[] args) {

        String message = getMessage();
        String apiSecret = "your api secret key";
        String signature = computeSignature(message, apiSecret);
        if(!signature.equals("m7I9OcotC2GxmVEVAufv5TD7lEk="))
            System.out.println("invalid value "+signature);
        else System.out.println("B64 HMAC SHA1: "+signature);

    }

    static String computeSignature(String message, String apiSecret) {
        try {
            final byte[] keyBytes = apiSecret.getBytes();
            final SecretKey signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
            final 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 secrete key
my $key  = "your api secret key";
# test message 
my $message = get_message();
# compute signature
my $signature = hmac_sha1_b64_string($key, $message);

if ($signature eq "m7I9OcotC2GxmVEVAufv5TD7lEk=") {
	print "B64 HMAC SHA1: " . $signature, "n";
} else {
	print "invalid value! ", $signature, "n";
}

sub hmac_sha1_b64_string {
	my ($key, $data) = @_;
	my $keybtes = encode("UTF8", $key);
	my $databytes = encode("UTF8", $message);
	my $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 = "your api secret key";
$message = "{"locale":"en_US","applicant":{"fullName":"John Doe","email":"john.doe@example.com"}}";

$signature = sign($message,$api_secret);

if( $signature != "m7I9OcotC2GxmVEVAufv5TD7lEk=")
    print("invalid value " . $signature);
else print("B64 HMAC SHA1: " . $signature);

Using Python (version 2.7)

from hashlib import sha1
import hmac
import base64

# your secret key
secret = "your api secret key".encode("utf-8")
# test message
message = "{"locale":"en_US","applicant":{"fullName":"John Doe","email":"john.doe@example.com"}}".encode('UTF-8')
# 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 != "m7I9OcotC2GxmVEVAufv5TD7lEk=":
    print "invalid value "+signature
else:
    print 'B64 HMAC SHA1: ' + signature

Using Python (version 3.6)

from hashlib import sha1
import hmac
import base64

# your secret key
secret = "your api secret key".encode("utf-8")
# test message
message = "{"locale":"en_US","applicant":{"fullName":"John Doe","email":"john.doe@example.com"}}".encode("UTF-8")
# compute the hash
message_hashed = hmac.new(secret, message, sha1)
# b64 encode the hash...this is the message authentication value
signature = base64.b64encode(message_hashed.digest()).decode("UTF-8")
if signature != "m7I9OcotC2GxmVEVAufv5TD7lEk=":
    print("invalid value "+signature)
else:
    print("B64 HMAC SHA1: " + signature)

Next steps