Skip to content
Textkernel Saleforce Connector
External candidate profile sourcing
latest

Configure External Candidate Import from Textkernel Source

This section describes the steps to set up the external candidate import feature, which is part of Textkernel Source product. Recruiters use Textkernel Source to find candidates in external candidate databases outside of their ATS candidate database. This feature allows recruiters to import the external candidate profiles and easily create candidate records inside their Salesforce ATS.

Recruiters search for external candidates in Textkernel Source. When they find interesting Candidates, they can import them by selecting the profiles and clicking "Import selection":

Source UI

Selected external profiles are loaded into the Salesforce ATS and use the same Candidate data mapping, profile review, and duplicate record-checking features available in the recruiter CV parsing flow.

Imported Candidates

This feature implements Textkernel's automation API, which is an event-driven API that pushes data from Textkernel into an ATS. Once configured properly, Salesforce exposes an OAUTH-2 protected webhook endpoint, which Textkernel uses to push external candidate profiles into Salesforce. Afterwards, when Salesforce is processing the external candidates, if a binary CV/resume is available, Salesforce makes a call to Textkernel's binary file retrieval endpoint to retrieve the file. Altogether in this procedure we will configure two OAUTH-2 protected endpoints.

Important

This feature uses Salesforce's support for a Connected App with the OAUTH 2 client credentials grant. Salesforce's infrastructure requires an integration user to be setup and assigned the system permission API Only User. However, several org types do not offer this feature, and as a result they do not support the external Candidate import feature. Unsupported Salesforce Org types:

  1. Developer orgs
  2. Scratch orgs (unless you use the Salesforce "Org Shape" feature to copy from an Enterprise edition)
  3. Essentials edition orgs
  4. Professional edition orgs

Important

Both this external Candidate import feature, and the Reruiter CV Parsing workflow attach new CV/resume files as ContentVersion records. Salesforce sets daily limits on how many ContentVersions your org can publish. Production orgs have a large daily limit of several hundred thousand. However, if you are using a Developer org or Trial org, and you attempt to import thousands of records you could hit the limit. If that happens, you can submit a ticket to Salesforce to raise the org limit. Please refer to the Salesforce documentation for more information.

Configure the Salesforce Webhook

The Salesforce webhook uses OAUTH 2 for authentication, and is used by Textkernel to push events into Salesforce. To expose the endpoint you setup a Salesforce Connected App using the OAUTH 2 client credentials grant.

Setup Integration User

The integration user will be associated with the Connected App. It cannot be an interactive user who logs into the Salesforce UI, or it will not work.

Go to Salesforce setup → Users → Click "New User" button

Complete the form, making sure you select:

  • User License: Salesforce
  • Profile: Standard User

Login the first time, and select a password to fully activate the user.

Create Permission Set

  1. Create a new Permission Set. This will be used to assign the necessary permissions to the integration user.

  2. Go to Salesforce setup → Permission sets.

  3. Click the "New" button.

  4. Assign the permission set Label and API Name.

  5. Click Save.

  6. You are redirected to the newly created Permission set.

  7. Scroll down and click on the section System Permissions.

  8. On the System Permissions page click the "Edit" button.

  9. Set the API Enabled checkbox to true.

  10. Set the Api Only User checkbox to true.

  11. Click "Save".

API Only Permissions

  1. Next, select the section Apex Class Access

  2. Click Edit

  3. Add Textkernel1.AutomationApiRestService to the "Enabled Apex Classes"

APEX Class Access Permission

  1. Click Save button

Assign permission sets to the Integration user

The integration user needs two permission sets to work with the integration:

  1. The permission set you created above, which makes the user API-only and gives it access to the APEX webhook handler.

  2. Textkernel - Admin Access, which give the user access to the Textkernel managed package contents.

Create Connected App

Now you will create a Connected App that configures Salesforce to expose the OAUTH-2 protected webhook.

  1. Go to Salesforce Setup → App Manager

  2. Click "New Connected App"

  3. Enter required information for your Connected App to uniquely identify it: Name, API Name and Contact Email

  4. Set the checkbox to True for Enable OAuth Settings

  5. Set the Callback URL to https://login.salesforce.com (for production Salesforce orgs)

  6. Under Selected OAuth Scopes select:

    a. Manage User data via APIs (api)

    b. Perform requests at any time (refresh_token, offline_access)

  7. Set the checkbox to true for Enable Client Credentials Flow. Click "Okay" when you see the information message pop up: “Anyone with the consumer key and consumer secret can access your org on behalf of the selected user.”

  8. Click "Save"

OAUTH Scopes

  1. Click "Continue" when you see the standard message: “Changes can take up to 10 minutes to take effect. Deleting a parent org also deletes all connected apps with OAuth settings enabled.”

  2. Go back to Salesforce Setup → App Manager, find the Connected App that you just created and select "Manage" from the menu at the right

  3. Click Edit Policies

  4. In the Oauth Policies section, enable Permitted Users to All users may self-authorize

  5. In the User Provisioning Settings, set Enable User Provisioning to true

  6. In the Client Credentials Flow section, use the Run As field to select the Integration User you've previously configured above

  7. Save your changes.

User provisioning

Get your webhook information to provide to Textkernel support

In order for Textkernel to configure our platform to point at your Salesforce webhook, you will need to provide the following to Textkernel support:

  • Consumer Key
  • Consumer Secret
  • Token URL
  • Webhook URL

Get your Salesforce OAUTH 2 Connected App's Consumer Key and Consumer Secret

  1. Go back to Salesforce setup → App Manager

  2. Click View on the Connected App you've just created

  3. Under the API (Enable OAuth Settings) section click Manage Consumer Details.

  4. When the button is clicked, for security, Salesforce will re-validate your login information. A Verify Your Identity page will open, and a verification code will be emailed to you. Use the code to complete the verification process.

Verify identify

  1. Afterwards, you will be redirected to a page listing the Consumer Key and Consumer Secret

Key and Secret

Get your Token and Webhook URLs

  1. Token URL will be in the following format: https://ORG_DOMAIN.my.salesforce.com/services/oauth2/token

  2. Webhook URL will be in the following format: https://ORG_DOMAIN.my.salesforce.com/services/apexrest/Textkernel1/AUTOMATION_API_WEBHOOK

Where ORG_DOMAIN is your Salesforce custom domain. Note that you need the full domain name including my.salesforce.com

Configure External candidate importing

Now you need to configure what happens with the external candidate profiles when you receive them over the webhook.

The process to import external candidate profiles is similar to the process from the recruiter CV parsing feature, with some minor differences. This shared approach means recruiters can re-use the same duplicate-checking, and candidate-review approach for candidates coming from both workflows.

  • When first imported, the external candidate is created as a Textkernel Imported Candidate, with the Imported status. The structured data is present, but it is not yet added to the Textkernel Imported Candidate.

  • A Schedulable APEX job checks periodically for new Imported external Candidate profiles, loads the structured data onto the Textkernel Imported Candidate, and retrieves the CV/Resume binary from Textkernel, if available. The Textkernel Imported Candidate record is then assigned the Parsed status.

  • You can optionally use an automated Flow that uses the Candidate Data Mapping to map from the Textkernel Imported Candidate to your ATS's Converted Candidate. At the end of that process the Converted status is assigned. (Refer to the recruiter CV parsing documentation for information on how to configure those features).

Configure binary retrieval

The first part of configuring this process is to configure how the integration will retrieve the CV/resumes from Textkernel. Textkernel support will provide this information to you. You will receive the following information:

  • Client Id
  • Client Secret
  • Token retrieval endpoint
  • Binary retrieval endpoint

  • Add both the binary retrieval and token retrieval endpoints to your remote site settings. Set this up using the standard configuration feature located under Salesforce Setup → Security → Remote Site Settings

  • Go to Textkernel Parsing Settings -\Parsing Settings.

  • Under "3. External candidate Resume import", enter the information from Textkernel support to configure the binary retrieval:

  • Client Id

  • Client Secret
  • Token retrieval endpoint
  • Binary retrieval endpoint

  • Click "Save credentials".

binary retrieval config

Schedule how often to parse and convert external profiles

  1. Go to Textkernel Parsing Settings -\Parsing Settings.

  2. Under section "4. External candidate parsing" set a schedule for how often the integration checks for newly-imported external candidates. Pick a time in minutes between executions and click the Schedule button.

parsing schedule config

  1. Under section "4. External candidate parsing", set a schedule for how often the integration checks for newly-imported external candidates. This configures a Schedulable APEX job that checks for new Imported external Candidate profiles. Pick a time in minutes between executions and click the "Schedule" button.

  2. (Optional) if you want to automatically convert the Parsed record, create a Flow or APEX trigger to create the Converted Candidate records, using the APEX helper function. (Refer to the recruiter CV parsing documentation for information on how to configure those features).