Beta

Integrate Greenhouse with your product—along with any other
ATS
 application

Connect your product to all the applications your customers use via Merge's Unified API to close more deals, retain customers, and expand to new markets

Get a demo
Payment Terms
Payment Methods
Viewers
General Ledger Transactions
Async Tasks
Employees
Bank Feed Transactions
Bank Feed Accounts
Job Postings
Scopes
Field Mappings

Sync Greenhouse data

Activities

The Activity object is used to represent an activity for a candidate performed by a user.

No items found.

Applications

The Application Object is used to represent a candidate's journey through a particular Job's recruiting process. If a Candidate applies for multiple Jobs, there will be a separate Application for each Job if the third-party integration allows it.

No items found.

Attachments

The Attachment object is used to represent a file attached to a candidate.

No items found.

Candidates

The Candidate object is used to represent profile information about a given Candidate. Because it is specific to a Candidate, this information stays constant across applications.

No items found.

Departments

The Department object is used to represent a department within a company.

No items found.

Eeocs

The EEOC object is used to represent the Equal Employment Opportunity Commission information for a candidate (race, gender, veteran status, disability status).

No items found.

Jobs

The Job object can be used to track any jobs that are currently or will be open/closed for applications.

No items found.

Job Interview Stages

The JobInterviewStage object is used to represent a particular recruiting stage for an Application. A given Application typically has the JobInterviewStage object represented in the current_stage field.

No items found.

Job Postings

The JobPosting object represents an external announcement on a job board created by an organization to attract qualified candidates to apply for a specific Job opening

No items found.

Offers

The Offer object is used to represent an offer for a candidate's application specific to a job.

No items found.

Offices

The Office object is used to represent an office within a company. A given Job has the Office ID in its offices field.

No items found.

Reject Reasons

The RejectReason object is used to represent a reason for rejecting an application. These can typically be configured within an ATS system.

No items found.

Users

The RemoteUser object is used to represent a user with a login to the ATS system.

No items found.

Interviews

The ScheduledInterview object is used to represent a scheduled interview for a given candidate’s application to a job. An Application can have multiple ScheduledInterviews depending on the particular hiring process.

No items found.

Scorecards

The Scorecard object is used to represent an interviewer's candidate recommendation based on a particular interview.

No items found.

Screening Questions

The ScreeningQuestion object is used to represent questions asked to screen candidates for a job.

No items found.

Tags

The Tag object is used to represent a tag for a candidate.

No items found.

FAQ on integrating with Greenhouse API

How frequently does Merge sync data with Greenhouse?

It depends on your selected sync plan and the Common Models you’re interested in. That said, here’s how it varies across the sync plans:

  • Daily: Syncs occur every 24 hours
  • Standard: Syncs happen every hour, 2 hours, 6 hours, or 12 hours 
  • High: Syncs take place every 10 minutes, 30 minutes, hour, 3 hours, or 6 hours
  • Highest: Syncs happen every 1-5 minutes, 10 minutes, 30 minutes, or hour

For syncing outside of normal intervals, you can also use the Force Resync endpoint or the Automatic Webhooks feature.

Learn more about Merge’s sync frequencies for Greenhouse.

Which Greenhouse API endpoints does Merge interact with?

Merge interacts with various Greenhouse API endpoints to access information such as candidates, users, departments, offices, tags, attachments, job posts, and more. Moreover, Merge supports PATCH, GET, and POST requests across many of these endpoints.

For a detailed list of endpoints, the specific data Merge can access, and the HTTP methods Merge supports for a given endpoint, refer to this page.

What organizations use Merge’s integration with Greenhouse?

A broad range of companies use it, including Fetcher, BrightHire, Assemble, and Causal.

To learn more about how companies use Merge’s Greenhouse integration—along with other ATS integrations—you can visit this page.

Is there a limit to the number of Greenhouse accounts I can integrate using Merge?

Merge doesn’t impose a strict limit on the number of Greenhouse accounts you can integrate. However, pricing and plan details may vary based on the number of production linked accounts. 

To get a better idea of how Merge prices its Greenhouse integration, along with its other integrations, you can connect with one of our integration experts

Can Merge access custom data fields from Greenhouse?

Yes, Merge can access custom data fields from Greenhouse. 

By using features like Field Mapping, Remote Data, and Authenticated Passthrough Request, you can retrieve and manage custom data beyond Merge’s default Common Models. This flexibility ensures that your integration aligns with your customers’ specific data requirements.

What ATS integrations does Merge support in addition to Greenhouse?

Merge supports 50+ ATS integrations, making it easy for you to integrate with other leading platforms via Merge’s ATS Unified API. These include:

  • Lever
  • Workday Recruiting
  • SmartRecruiters
  • BambooHR
  • iCIMS
  • Jobvite
  • Ashby
  • SAP SuccessFactors
  • Oracle Taleo

See the full list of ATS integrations Merge supports.

Are there any days you’ll be closed for the holidays in 2024?

Trusted to power integrations at

Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit
Logotype of HandshakeLogotype of RampLogotype of BrexLogotype of NavanLogotype of TaxBit

Make integrations your competitive advantage

More sales, less code, fewer headaches

Focus on your core product

Stop diverting your engineers to yet another integration and let them get back to work.

Give customer success a break

Manage your simplified integration issues in a single pane. No therapist required.

Stop losing sales due to integrations

Launch integrations in days, not quarters. Your sales team will thank you.

Seamless account linking

Integration authentication that feels like magic

Merge seamlessly manages authentication and authorization on behalf of your customers.
Offer account linking and permission controls to your users with Link for a customizable frontend or with Magic Link for URL-based authorization

View Docs
APIs made simple

The toolkit for all your integration needs

We make integrations painless with accessible API design, dead-simple SDKs, and beautiful documentation that we agonize over.

View Docs
Get Employee Data
1from merge import Merge
2
3client = Merge(
4    account_token="YOUR_ACCOUNT_TOKEN",
5    api_key="YOUR_API_KEY",
6)
7client.hris.employees.list()
import { MergeClient, Merge } from '@mergeapi/merge-node-client';
const merge = new MergeClient({
  apiKey: 'YOUR_API_KEY',
  accountToken: 'YOUR_ACCOUNT_TOKEN',
});
employee = await merge.hris.employees.list()
ApiClient.instance.authentications.tokenAuth = {
  type: 'bearer',
  accessToken: 'API_KEY',
};
new EmployeesApi().employeesList('ACCOUNT_TOKEN', {}, (data) => {
  console.log(data);
});
import (
  "context"
  "fmt"
  merge "github.com/fern-api/merge-go"
  mergeclient "github.com/fern-api/merge-go/client"
  "github.com/fern-api/merge-go/hris"
)

client := mergeclient.NewClient(
  mergeclient.ClientWithAuthApiKey("<YOUR_API_KEY>"),
1ApiClient client = Configuration.getDefaultApiClient();
2client.setBasePath('https://api.merge.dev/api/ats/v1');
3ApiKeyAuth tokenAuth = client.getAuthentication('tokenAuth');
4tokenAuth.setApiKey('API_KEY');
5CandidatesApi apiInstance = new CandidatesApi(client);
6apiInstance.candidatesList('ACCOUNT_TOKEN');
import com.merge.api.MergeApiClient;
import com.merge.api.resources.hris.employees.requests.EmployeesRetrieveRequest;
import com.merge.api.resources.hris.types.Employee;
MergeApiClient mergeClient = MergeApiClient.builder()
    .accountToken("ACCOUNT_TOKEN")
    .apiKey("API_KEY")
    .build();
Employee employee = mergeClient.hris().employees().list(
    EmployeesRetrieveRequest.builder()
        .includeRemoteData(true)

> {  

"id": "0958cbc6-6040-430a-848e-aafacbadf4ae",
"remote_id": "19202938",
"employee_number": "2",
"company": "8d9fd929-436c-4fd4-a48b-0c61f68d6178",
"first_name": "Dirna",
"last_name": "Emanuel",
"display_full_name": "Dirna Emanuel",
    "username": "dirnaemanuel",
    "groups": [

Meta endpoint

Programmatically access required schemas

Third-party providers require specific (and often different) fields to write data to their APIs, making your code a mess.

Dynamically fetch required data schemas from Merge’s /meta endpoint to make POST or PATCH requests that just work.

View Docs
Beyond building

Rely on the best integration observability system

Let our logs, issue detection, and automated alerts save your customer success team time, money, and headaches.

Forget maintenance - let your developers focus on building!

Start for free

Case study

How Drata increases customer value and spends 80% less time managing integrations

View case study

​​Working with Merge’s Unified API and beautiful React component took less than a sprint to integrate, test, and release.

Daniel Marashlian
Co-Founder & CTO, Drata

Read more about building and maintaining multiple integrations

A guide to maintaining your product integrations

Blog

A guide to integrating multiple APIs

Blog

The top challenges of normalizing multiple API integrations

Blog

Make integrations your competitive advantage

Stay in touch to learn how Merge can unlock hundreds of integrations in days, not years

Get a demo