---
title: Greenhouse Recruiting
slug: greenhouse
image: https://make-cxp-documentation.ams3.digitaloceanspaces.com/apps-center-icons/PREVIEW_greenhouse.png
docTags: 
createdAt: 2025-02-03T13:29:01.216Z
---

::::VerticalSplit{layout="left"}
:::VerticalSplitItem
::Image[]{src="https://api.archbee.com/api/optimize/oAyFj2GHlBeBVWF5OAir2/0PUV-1FJrM5DJcSYfm12s_greenhouse-photoaidcom-cropped.png" size="50" isUploading="false" position="center" width="800" height="800" darkWidth="800" darkHeight="800" showCaption="false"}
:::

:::VerticalSplitItem
Greenhouse Recruiting is an applicant tracking system and recruiting software designed to help businesses manage their hiring process from sourcing to onboarding. With the **Greenhouse Recruiting** app in Make, you can manage the applications, candidates, prospects, jobs, job posts, offers, approval flows, and notes in your Greenhouse Recruiting account.
:::
::::

:::hint{type="info"}
The **Greenhouse Recruiting** app is available on the [Enterprise plan](https://www.make.com/en/enterprise).
:::

Make currently supports **Greenhouse Recruiting**. Greenhouse Onboarding is unsupported at this time.

To get started with Greenhouse Recruiting, create an account at [greenhouse.com](https://www.greenhouse.com/uk).

:::hint{type="success"}
Greenhouse Recruiting: The account setting up the integration must have Developer Permissions in Greenhouse Recruiting.
:::

# Create the connection in Make using Greenhouse OAuth

To create the connection:

:::::WorkflowBlock
:::WorkflowBlockItem
Log in to your Make account, add a Greenhouse Recruiting module to your scenario, and click **Create a connection**.
:::

:::WorkflowBlockItem
Optional: In the ​​**Connection name​​** field, enter a name for the connection.
:::

:::WorkflowBlockItem
In **Additional scopes**, select any scopes your scenario needs.&#x20;
:::

::::WorkflowBlockItem
Optional: To use your Greenhouse Recruiting Client ID and Client Secret in **Advanced settings**:

:::hint{type="info"}
To obtain OAuth app approval from Greenhouse Partner Support, you must have a signed Greenhouse partnership agreement.
:::

1. Contact Greenhouse Partner Support to approve your OAuth app at `partner-support@greenhouse.zendesk.com` and provide the following redirect URI: `https://www.make.com/oauth/cb/greenhouse2`. Once approved, Greenhouse sends you a Client ID and Client Secret.&#x20;
2. Toggle **Advanced settings&#x20;**&#x61;nd enter your Client ID and Client Secret.
::::

:::WorkflowBlockItem
Click **Save**.
:::

:::WorkflowBlockItem
If prompted, authenticate your account and confirm access.
:::
:::::

# Create the connection in Make using Greenhouse OAuth (Client Credentials)

Greenhouse Recruiting also supports a client credentials connection. Use this connection type for server-to-server integrations that don't need a user to sign in or grant consent.

:::hint{type="info"}
This connection type requires **Harvest v3**. Greenhouse is retiring Harvest v1 and v2.
:::

To create the connection:&#x20;

:::::WorkflowBlock
:::WorkflowBlockItem
Log in to your [Greenhouse Recruiting](https://app3.greenhouse.io/dashboard) account.
:::

:::WorkflowBlockItem
Click **Configure&#x20;**> **Dev Center**.
:::

:::WorkflowBlockItem
Click **API Credential Management**.
:::

:::WorkflowBlockItem
Click **Create new API key**.
:::

:::WorkflowBlockItem
Set the **API Type** to **Harvest** **v3 (OAuth)**.
:::

:::WorkflowBlockItem
Click **Manage Scopes** and select only the scopes the modules in your scenario require.
:::

:::WorkflowBlockItem
Copy the **Client ID** and **Client Secret**.
:::

:::WorkflowBlockItem
The **Client Secret** is shown only once. Store it in a safe place before you continue.
:::

:::WorkflowBlockItem
Log in to your Make account and add a Greenhouse Recruiting module to a scenario.
:::

:::WorkflowBlockItem
Click **Create a connection**.
:::

:::WorkflowBlockItem
Optional: In the **Connection name** field, enter a name for the connection.
:::

:::WorkflowBlockItem
In **Client ID** field, paste the Client ID you copied earlier.
:::

:::WorkflowBlockItem
In **Client Secret** field, paste the Client Secret you copied earlier.
:::

::::WorkflowBlockItem
Optional: In the On behalf of User ID field, enter a numeric Greenhouse user ID.

:::hint{type="info"}
Leave empty to use the Integration Service User attached to the credential. List endpoints require a user with Site Admin permissions. Find the ID in **Configure** > **Users** (the number in the user URL) or in a Users Excel export.
:::
::::

:::WorkflowBlockItem
Click **Save**.
:::
:::::

You have now created the connection. You can now edit your scenario and add more Greenhouse Recruiting modules. If your connection requires reauthorization at any point, follow the connection renewal steps [here](docId\:SO88FM6pkT0G-adKDDfzZ).

# Modules

## Application

:::ExpandableHeading
### Watch applications

Triggers when an application is created, updated, deleted, or approved.
:::

:::ExpandableHeading
### Search applications

Lists applications and filter by criteria.
:::

:::ExpandableHeading
### Add application to prospect

Creates a new application for a prospect by their ID.
:::

:::ExpandableHeading
### Add application to candidate

Creates a new application for a candidate by their ID.
:::

:::ExpandableHeading
### Add attachment to application

Uploads an attachment to an application by its ID.
:::

## Candidate

:::ExpandableHeading
### Watch candidates

Triggers when a candidate or prospect is created, updated, deleted, submitted an application or other status is changed.
:::

:::ExpandableHeading
### Search candidates

Lists candidates and filter by criteria.
:::

:::ExpandableHeading
### Create a prospect

Creates a new prospect.
:::

:::ExpandableHeading
### Create a candidate

Creates a new candidate.
:::

:::ExpandableHeading
### Update a candidate

Updates a candidate by their ID.
:::

:::ExpandableHeading
### Add a candidate note

Adds a note to the candidate by their ID.
:::

:::ExpandableHeading
### Add attachment to candidate

Uploads an attachment to a candidate or prospect by their ID.
:::

## Job

:::ExpandableHeading
### Watch jobs

Triggers when a job is created, updated, approved, or deleted.
:::

:::ExpandableHeading
### Watch job posts

Triggers when a job post is created, updated, deleted or a job interview stage is deleted.
:::

:::ExpandableHeading
### Watch offers

Triggers when an offer is created, approved, updated or deleted.
:::

:::ExpandableHeading
### Search jobs

Lists jobs and filter by criteria.
:::

:::ExpandableHeading
### Search job posts

Lists job posts and filter by criteria.
:::

:::ExpandableHeading
### List approval flows

Lists approval flows by the job ID.
:::

:::ExpandableHeading
### Get a job

Retrieves the details of a job by its ID
:::

:::ExpandableHeading
### Get a job post

Retrieves the details of a job post by its ID.
:::

## Other

:::ExpandableHeading
### Make a Harvest API call



Performs an arbitrary authorized Harvest API call.
:::

:::ExpandableHeading{isOpen="true"}
# Migration from API V2 to V3

## Add a candidate note

**Module name:** Add a Candidate Note → Add a candidate note

**Input changes**: none.

**Output changes:**

| **Field path** | **Before (API V2)**                                                  | **Now (API V3)**                                                           |
| -------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| user           | Nested user object (id, first\_name, last\_name, name, employee\_id) | **Removed** — replaced by flat user\_id (uinteger); map user.id → user\_id |
| private        | Boolean                                                              | **Removed**                                                                |
| visiblity      | Text (legacy typo field)                                             | **Removed**                                                                |

## Add application to candidate

**Module name:** Add Application to Candidate → Add application to candidate

**Input changes:**

| **Change**              | **Before (API V2)**                                                         | **Now (API V3)**                                             |
| ----------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------ |
| **Removed** attachments | Array with type + upload by URL/file (filename, url/content, content\_type) | Field removed — upload via **Add attachment to application** |
| Referrer ID value type  | referrer.type = id → value was text                                         | Value is uinteger                                            |

**Output changes**: none breaking.

## Add application to prospect

**Module name:** Add Application to Prospect → Add application to prospect

**Input changes:**

| **Change**               | **Before (API V2)**                 | **Now (API V3)**  |
| ------------------------ | ----------------------------------- | ----------------- |
| Referrer ID value type   | referrer.type = id → value was text | Value is uinteger |
| prospect\_owner\_id type | Text                                | uinteger          |

**Output changes:**

| **Field path**                                                                                                                        | **Before (API V2)** | **Now (API V3)**                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| Nested objects (location, source, credited\_to, jobs, current\_stage, prospective\_department, prospective\_office, prospect\_detail) | Nested objects      | **Removed** — replaced by flat IDs (source\_id, referrer\_id, recruiter\_id, coordinator\_id, stage\_id, stage\_name, job\_interview\_stage\_id) |
| prospective\_job\_ids                                                                                                                 | Nested structure    | Flat array                                                                                                                                       |
| location\_address                                                                                                                     | Nested location     | Flat text                                                                                                                                        |
| applied\_at                                                                                                                           | Present             | **Removed**                                                                                                                                      |
| answers                                                                                                                               | Untyped array       | Array of \{ question, answer }                                                                                                                   |

## Add attachment to application

**Module name:** Add Attachment to Application → Add attachment to application

**Input changes:**

| **Change**                | **Before (API V2)**                | **Now (API V3)** |
| ------------------------- | ---------------------------------- | ---------------- |
| **Removed** content\_type | Optional under URL and file upload | Removed          |

**Output changes:**

| **Field path** | **Before (API V2)** | **Now (API V3)** |
| -------------- | ------------------- | ---------------- |
| content\_type  | Present             | **Removed**      |

## Add attachment to candidate

**Module name:** Add Attachment to Candidate → Add attachment to candidate

**Input changes:**

| **Change**                   | **Before (API V2)**                         | **Now (API V3)**                                           |
| ---------------------------- | ------------------------------------------- | ---------------------------------------------------------- |
| **Required** application\_id | Not required (attach directly to candidate) | **Required** — Harvest v3 attaches files to an application |
| **Removed** content\_type    | Optional under URL and file upload          | Removed                                                    |

**Output changes:**

| **Field path** | **Before (API V2)** | **Now (API V3)** |
| -------------- | ------------------- | ---------------- |
| content\_type  | Present             | **Removed**      |

## Create a candidate

**Module name:** Create a Candidate → Create a candidate

**Input changes:**

| **Change**                              | **Before (API V2)**                     | **Now (API V3)**                              |
| --------------------------------------- | --------------------------------------- | --------------------------------------------- |
| **Removed** applications\[].attachments | Could upload attachments while creating | Removed — use attachment modules after create |
| **Removed** activity\_feed\_notes       | Could send notes on create              | Removed — use **Add a candidate note**        |

**Output changes:**

| **Field path**  | **Before (API V2)**                 | **Now (API V3)**                                                                                                                                   |
| --------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| applications\[] | Array of nested application objects | Replaced by a single application collection with flat IDs (stage\_id, job\_id, source\_id, ...); map application.id instead of applications\[1].id |

## Create a prospect

**Module name:** Create a Prospect → Create a prospect

**Input changes**: none.

**Output changes:**

| **Field path**                              | **Before (API V2)**                             | **Now (API V3)**                                                                                                                        |
| ------------------------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Output shape                                | Flat candidate fields at root + applications\[] | Structured as candidate + application collections — remap root fields to candidate.\* and use application.\* instead of applications\[] |
| photo\_url / attachments / application\_ids | Present                                         | **Removed**                                                                                                                             |
| recruiter / coordinator objects             | Present                                         | Replaced by IDs under application                                                                                                       |
| educations / employments                    | Present                                         | **Removed** from this output contract                                                                                                   |

## Get a job post

**Module name:** Get a Job Post → Get a job post

**Input changes**: none.

**Output changes**

| **Field path**      | **Before (API V2)**                | **Now (API V3)**                                                                  |
| ------------------- | ---------------------------------- | --------------------------------------------------------------------------------- |
| questions\[].type   | Text                               | **Removed** — replaced by questions\[].answer\_type                               |
| questions\[].values | Array of \{ value\:number, label } | **Removed** — replaced by questions\[].options (array of \{ label, value\:text }) |

## List approval flows

**Module name:** List Approval Flows → List approval flows

**Input changes**: none.

**Output changes**

| **Field path**          | **Before (API V2)**       | **Now (API V3)**                            |
| ----------------------- | ------------------------- | ------------------------------------------- |
| approver\_groups        | Nested groups + approvers | **Removed**                                 |
| requested\_by\_user\_id | Present                   | **Removed** — replaced by requested\_by\_id |

## Search candidates

**Module name:** Search Candidates → Search candidates

**Input changes:**

| **Change**          | **Before (API V2)** | **Now (API V3)** |
| ------------------- | ------------------- | ---------------- |
| **Removed** job\_id | Optional filter     | Removed          |

**Output changes:**

| **Field path**                              | **Before (API V2)**       | **Now (API V3)**                        |
| ------------------------------------------- | ------------------------- | --------------------------------------- |
| applications                                | Nested applications array | **Removed**                             |
| attachments / application\_ids / photo\_url | Present                   | **Removed**                             |
| recruiter / coordinator objects             | Present                   | **Removed**                             |
| educations / employments                    | Present                   | **Removed**                             |
| is\_private                                 | Boolean                   | Renamed to private                      |
| last\_activity                              | Date                      | Renamed to last\_activity\_at           |
| Custom fields                               | Empty collections         | Now loaded from your Greenhouse account |

## Search job posts

**Module name:** Search Job Posts → Search job posts

**Input changes**: none.

**Output changes**: same question-schema shift as **Get a job post** — questions\[].type / questions\[].values replaced by questions\[].answer\_type / questions\[].options.

## Search jobs

**Module name:** Search Jobs → Search jobs

**Input changes:**

| **Change**                           | **Before (API V2)** | **Now (API V3)** |
| ------------------------------------ | ------------------- | ---------------- |
| **Removed** opening\_id              | Present             | Removed          |
| **Removed** external\_department\_id | Present             | Removed          |
| **Removed** external\_office\_id     | Present             | Removed          |

**Output changes**: none breaking.

## Update a candidate

**Module name:** Update a Candidate → Update a candidate

**Input changes:**

| **Change**                        | **Before (API V2)**                                                                                        | **Now (API V3)**                       |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| **Removed** applications          | Could update embedded application payload (job\_id, initial\_stage\_id, source\_id, referrer, attachments) | Removed                                |
| **Removed** activity\_feed\_notes | Could send notes on update                                                                                 | Removed — use **Add a candidate note** |

**Output changes**: none breaking.

# Migration guide

If your scenario uses Greenhouse v1.

1. **Update the connection** — create/select a greenhouse2 connection and attach it to each migrated module.
2. **Replace removed inputs**
   - Attachments: stop using applications\[].attachments / inline attachments; use **Add attachment to application** or **Add attachment to candidate** (with required application\_id).
   - Notes: stop using activity\_feed\_notes on create/update; use **Add a candidate note**.
   - Search filters: remove job\_id from **Search candidates**; remove opening\_id, external\_department\_id, external\_office\_id from **Search jobs**.
3. **Fix output references**

| **Old path (v1)**                       | **New path (v2)**                                | **Modules**                 |
| --------------------------------------- | ------------------------------------------------ | --------------------------- |
| user.id                                 | user\_id                                         | Add a candidate note        |
| source.id / nested source               | source\_id                                       | Add application to prospect |
| current\_stage.\*                       | stage\_id / stage\_name                          | Add application to prospect |
| applications\[1].id                     | application.id                                   | Create a candidate          |
| Root candidate fields                   | candidate.\*                                     | Create a prospect           |
| applications\[]                         | application                                      | Create a prospect           |
| is\_private                             | private                                          | Search candidates           |
| last\_activity                          | last\_activity\_at                               | Search candidates           |
| requested\_by\_user\_id                 | requested\_by\_id                                | List approval flows         |
| questions\[].type / questions\[].values | questions\[].answer\_type / questions\[].options | Get / Search job posts      |
| content\_type (attachment output)       | — (removed)                                      | Attachment modules          |

4. **Retype referrer / owner IDs** — where referrer value / prospect\_owner\_id were free text, map numeric IDs (uinteger).
5. **Re-test webhook payloads** on the Watch modules after migrating the connection.


:::

