Connectors / Service / Greenhouse

Recruiting software (updated: 1657718487977)

Greenhouse

Greenhouse is a software suite for systematically recruiting and hiring the best talent.

Overview

Greenhouse is an applicant tracking system and recruiting solution designed to help businesses find suitable candidates, conduct interviews, and optimize their recruiting process. Greenhouse offers professional recruiting services from a dedicated support team.

API INFO: The Base URL used for the Greenhouse connector is https://[resource].greenhouse.io/v1/. More information can be found on their main API documentation (v1.0) site. This is where users will also be able to find the API Limitations page.

Authentication

Within the workflow builder, highlight the Greenhouse connector.

In the Greenhouse connector properties panel to the right of the builder, click on the Authenticate tab and the 'New authentication' button.

greenhouse-add-new-auth

This will result in a Tray.io authentication pop-up modal. The first page will ask you to name your authentication and select the type of authentication you wish to create ('Personal' or 'Organisational').

The next page asks you for your 'api-key'.

greenhouse-add-api-key

In order to get the api-key, log in to your Greenhouse account.

From 'My Dashboard' page, click the gear(settings) icon available at the top of the page.

You will be directed to the 'Configure' page. On this page select the 'Dev Center' tab from the left panel and then select the 'API Credential management' link.

greenhouse-dev-center3

Now, from the 'Dev Center' page click the 'Create New API Key' button from the top-right corner.

Next, enter a valid description, and select 'Harvest' as 'API Type' from the available drop-down options. Once done, click the 'Manage Permissions' button.

greenhouse-manage-permissions4

With this, you have created your API Key successfully. You can copy and use it now.

PLEASE NOTE: Make sure you copy and store your API Key in a safe place. If you lose it, you will have to create a new key.

greenhouse-api-key5

You can now manage the API key permissions by selecting the available permissions, as shown in the image below. Once done, click 'Save'.

greenhouse-manage-api-key-permissions6

Once you have added the 'api-key' to your Tray.io authentication pop-up window, click the 'Create authentication' button.

Go back to your settings authentication field (within the workflow builder properties panel), and select the recently added authentication from the drop-down options now available.

Your connector authentication setup should now be complete.

Available Operations

The examples below show one or two of the available connector operations in use.

Please see the Full Operations Reference at the end of this page for details AP all available operations for this connector.

Example Usage

TRAY POTENTIAL: Tray.io is extremely flexible. By design there is no fixed way of working with it - you can pull whatever data you need from other services and work with it using our core and helper connectors. This demo which follows shows only one possible way of working with Tray.io and the Greenhouse connector. Once you've finished working through this example please see our Introduction to working with data and jsonpaths page and Data Guide for more details.

Below is an example of a way in which you could potentially use the Greenhouse connector, to fetch the recently created new jobs and then assign those jobs to the recruiters by notifying them and their managers with appropriate messages on the chosen Slack channel.

In these examples, we have shown that you have received the job details via the Webhook trigger, and now need to process it into Greenhouse. However, users may have received this data in any number of other ways, like maybe from any website or any other relevant resource.

The steps will be as follows:

  1. Pull the job details from the source (a webhook trigger in this example) and get newly created jobs from Greenhouse.

  2. Get a list of primary recruiters and their managers from Greenhouse using the List Helpers connector.

  3. Add a boolean check to verify the department name.

  4. Based on the department name check, done in the previous step, send appropriate notifications on the selected Slack channel.

The following workflow gives an example of how you can achieve this:

greenhouse-complete-wf7

1 - Setup Trigger & get jobs

Select the Webhook trigger from the trigger options available, and set the operation to 'When webhook is received, auto respond with HTTP 200'. Be sure to click the 'Enable' button before continuing. This makes the workflow ready to receive incoming calls.

The job details received by the Webhook are in JSON format and is as follows:

{ "method": "post", "path": "/", "body": { "organization_id": 5378, "organization_name": "Peace", "action": "job_created", "payload": { "job": { "id": 9035617, "name": "Manager, People Partner - Customer Experience", "requisition_id": "OPxxxx64", "notes": null, "confidential": false, "job_post_id": 31xxxx9, "status": "draft", "created_at": "2021-05-24T16:03:08Z", "opened_at": null, "closed_at": null, "url": "https://peace.greenhouse.io/sdash/1834017", "departments": [ { "id": 8xxx5, "name": "People Operations", "external_id": "people_operations" } ], "offices": [ { "id": 4xxx3, "name": "Charlotte, NC", "location": "Charlotte, North Carolina, United States", "external_id": "451" }, { "id": 4xxx9, "name": "New York, NY", "location": null, "external_id": "671" }, { "id": 9xxx4, "name": "Westlake, TX", "location": "Westlake, Texas, United States", "external_id": "951" } ], "hiring_team": { "hiring_managers": [], "sourcers": [], "recruiters": [], "coordinators": [] }, "openings": [ { "id": 4xxx81, "opening_id": "P-06454", "custom_fields": {} } ], "custom_fields": { "bamboo_department": { "name": "Bamboo Department", "type": "single_select", "value": null }, "bonus": { "name": "Bonus", "type": "short_text", "value": null }, "business_priority": { "name": "Business Priority", "type": "single_select", "value": null }, "cost_center": { "name": "Cost Center", "type": "single_select", "value": null }, "employment_type": { "name": "Employment Type", "type": "single_select", "value": null }, "interviewer": { "name": "Interviewer", "type": "short_text", "value": null }, "job_family_job_15xxxxx01.590545": { "name": "Job Family", "type": "single_select", "value": null }, "job_level": { "name": "Job Level", "type": "single_select", "value": null }, "job_profiles": { "name": "Job Profiles", "type": "multi_select", "value": [] }, "options": { "name": "Options", "type": "short_text", "value": null }, "recruiting_pod": { "name": "Recruiting Pod", "type": "single_select", "value": "Foundation" }, "recruiting_team": { "name": "Recruiting Team", "type": "single_select", "value": null }, "sub_team": { "name": "Sub Team", "type": "single_select", "value": null }, "target_hire_date": { "name": "Target Hire Date", "type": "date", "value": "" }, "team": { "name": "Team", "type": "single_select", "value": null }, "university_division": { "name": "University Division", "type": "single_select", "value": null } } } } }, "query": {}, "headers": { "accept": "application/json", "content-length": "2499", "content-type": "application/json", "host": "5f97040x-xxx-xxx-xxx-xxx1a14877.trayapp.io", "user-agent": "Needle/2.1.2 (Node.js v10.24.1; linux x64)", "x-amzn-trace-id": "Root=1-60abxxx-xxxxxxxxx62f1fc28", "x-forwarded-for": "35.xx.xx.123", "x-forwarded-port": "443", "x-forwarded-proto": "https" } }

From the connectors panel on the left, add a Delay connector and set the '5 minutes' delay.

greenhouse-delay8

We are adding a delay connector to manage the rate limits set by Greenhouse, i.e., the limit on the number of requests that can be made within a given time window.

The Greenhouse API imposes limits on the amount of data a single client can request overtime, as well as the complexity of individual requests. This is done to ensure that servers can always service requests as quickly as possible.

To know more about the rate limits refer to Greenhouse's documentation on Rate Limiting.

Now, add a Greenhouse connector to your workflow as a next step. Set the operation to 'Get job'.

Using a connector-snake, find a jsonpath for the 'Job ID' field from the trigger step. It should appear similar to this: $.steps.trigger.body.payload.job.id.

Using all the job IDs the Get job operation will retrieve details of each job.

greenhouse-get-job9

Feel free to re-name your steps as you go along to make things clearer for yourself and other users. The operation names themselves often suffice.

2 - List recruiters and managers

Next, add a List Helpers connector as a next step and set the operation to 'Filter'.

LIST HELPER: This is just one example of how the List Helper can be utilised. For more ways and uses regarding the List Helper connector, please see the main docs page for more details.

Here, we wish to fetch the list of recruiters from Greenhouse.

To do so, using a connector snake, find the josnpath for the recruiter details from the 'Get Job' step. It should appear similar to this: $.steps.greenhouse-1.body.hiring_team.recruiters.

greenhouse-get-rec10

Add another List Helpers connector as a next step and set the operation to 'First'.

Using a connector snake, find the josnpath for the hiring_managers from the 'Get Job' step. It should appear similar to this: $.steps.greenhouse-1.body.hiring_team.hiring_managers.

The 'First' operation will list all the hiring managers and then will provide the first one on the list as an output.

greenhouse-get-hm11

Now we have details of the recruiters and manager, and these details will be used to send an informative message on the Slack channel.

3 - Send notifications on Slack channel

The next step is to check if the department name for each job is equal to 'University' or not.

For that, add a Boolean Condition connector and set the operation as 'Boolean condition'.

To check the department name, using the connector-snake, add the jsonpath for the departments.name from the trigger step as a 1st Value.

Set the Comparison type as 'Equal to' and 2nd Value as 'University'.

greenhouse-boolean-check12

If the department name is equal to University, it means the condition satisfies. In such a case, the message is sent on the gh-university-job-profiles slack channel. If it is not, then the message is to be sent on the gh-job-profiles slack channel.

As the last step, to send messages to Slack channels, add a Slack connector on each branch of the Boolean Condition connector and set the operation to 'Send message'.

Set the channel as gh-university-job-profiles for the Slack connector on the true branch and set the channel as gh-job-profiles channel for the Slack connector on the false branch.

The message sent on both the channels is the same and is as shown in the image below.

The below message is not the only way to send messages to Slack channels. This is just a sample for demonstration purposes. Feel free to send the message as per your requirements.

greenhouse-slack-message13

The above message contains the job details, and name of recruites and managers. Information for each field is a jsonpath from the previous steps and they are as follows:

  • Req Title: $.steps.trigger.body.payload.job.name

  • Link:$.steps.trigger.body.payload.job.url

  • Office: $.steps.greenhouse-1.body.offices[0].name

  • Employment Type: $.steps.greenhouse-1.body.keyed_custom_fields.employment_type.value

  • Department: $.steps.trigger.body.payload.job.custom_fields.bamboo_department.value

  • Division: $.steps.trigger.body.payload.job.departments[0].name

  • Recruiter: $.steps.list-helpers-1.result[0].name

  • HM: $.steps.list-helpers-2.result.name

  • Job Profiles: $.steps.greenhouse-1.body.keyed_custom_fields.job_profiles.value

For more clarification on the pathways, you have available, open the Debug panel to view your step's Input and Output.

BEST PRACTICES: Whenever you do decide to create your own workflow, please make sure you take a look at our managing data best practices guide.

All Operations

Latest version:

1.3

Create candidate

Create a new candidate.

Create candidate application

Create a new application for this candidate or prospect. If a prospect, this will add a new candidate application to the given job on their profile, this will not convert their existing prospect application into a candidate application.

Create candidate note

Create a candidate note.

Create prospect

Create a new prospect. The difference between a prospect and a candidate is that a prospect can be on no jobs or many jobs.

Get application

Retrieve an application by its ID.

Get candidate

Retrieve a candidate by ID.

Get current offer by application

Retrieve the current offer for an application.

Get job

Retrieve a job by its ID.

Get offer

Retrieve an offer by its ID.

Get user

Retrieve a user by ID.

List applications

Retrieve a list of application. Can be filtered if required.

List attachment content types DDL

List candidates

Retrieve a list of candidates. Can be filtered if required.

List candidates DDL

List custom fields

Retrieve a list of custom fields.

List departments

List all of an organization’s departments.

List job custom field options DDL

List job custom fields DDL

List jobs DDL

List job stages for job

Retrieve the stages for the specified job id.

List job stages for job DDL

List offers

Retrieve a list of offers. Can be filtered if required.

List offers by application

Retrieve a list of offers by application ID.

List offices

List all of an organization’s offices.

List sources

Lists an organization’s sources, grouped by strategy.

List sources DDL

List users

Retrieve a list of users. Can be filtered if required.

List users DDL

List job stages

List all of an organization’s job stages.

List candidate custom fields DDL

List jobs

List all of an organization’s jobs.