Greenhouse

What Shuttio reads from Greenhouse, where it lands in Odoo, Ashby, Lever, Greenhouse, which permissions it needs and why, and what does not move.

Last updated: 7 Nov 2026

Harvest V3 (OAuth) credentials. You create them in Greenhouse under API Credentials (a Client ID and a Client Secret), tick the read scopes, and paste both. The older Harvest v1/v2 API keys stopped working on 31 August 2026.

Object by object: What objects are supported for Greenhouse migrations.

What Shuttio reads and moves

The list below describes the move into Odoo. Where Clarify or Odoo differ, the destination's own article says so.

  • Jobs: As Odoo job positions, with the department, the default recruiter (when the email matches an Odoo user) and the number of open openings as the target. The job's status, requisition id, offices, hiring team (recruiters, coordinators, sourcers, hiring managers), every opening, internal notes and custom fields go in the job description. A job already in Odoo with the same name is linked to.
  • Departments and offices: Departments as Odoo departments (a department's parent is kept). Offices as work locations at your company's address; the office's location text goes in the location number.
  • Candidates: In Odoo 18, as Odoo candidates: name, first email, first phone, LinkedIn address and tags. A candidate already in Odoo with the same email is linked to. Odoo 17 and 19 have no separate Candidates model: the same fields sit on each application.
  • Applications: As Odoo applications on their job: the stage (by name, in the order of the job's interview plan), hired applications in a Hired stage, rejected ones archived with their rejection reason, the source, the recruiter (when the email matches an Odoo user) and tags. Prospects come as applications without a job.
  • Notes, interviews, offers, scorecards and details: Every Greenhouse note (emails, activity, feedback), every interview (date, place, status, organizer, panel), every offer (version, status, dates, custom fields such as salary) and every scorecard (rating, key takeaways, public and private notes, question answers, attribute ratings), as notes on the application, with private notes kept. Each application also gets a details note: referrer, answers to application questions, custom fields, the candidate's addresses, websites, company, title, educations and employments, and the names of attached files.
  • EEOC and demographic data: Gender, race or ethnicity, veteran and disability status and any other self-identification question, as one note on the application titled "EEOC self-identification (from Greenhouse)", with every answer, including "declined to answer". Needs the EEOC read scopes on the Harvest V3 credentials; without them the run goes on and says EEOC was not moved.
  • Custom fields: Always in the notes and job description as text. A custom field can also be sent to an Odoo field you create on the Fields step.

Where each thing lands

Greenhouse objectIn OdooIn AshbyIn LeverIn Greenhouse
DepartmentsDepartments (Odoo Employees)Its own object, or the one you already have with that nameIts own object, or the one you already have with that nameIts own object, or the one you already have with that name
OfficesWork locations (Odoo Employees)Its own object, or the one you already have with that nameIts own object, or the one you already have with that nameIts own object, or the one you already have with that name
JobsJob positions (Odoo Employees)Its own object, or the one you already have with that nameIts own object, or the one you already have with that nameIts own object, or the one you already have with that name
CandidatesCandidates (Odoo Recruitment, version 18)Its own object, or the one you already have with that nameIts own object, or the one you already have with that nameIts own object, or the one you already have with that name
ApplicationsApplications (Odoo Recruitment)Its own object, or the one you already have with that nameIts own object, or the one you already have with that nameIts own object, or the one you already have with that name

Notes, tasks, meetings, calls, files, owners and lists depend on the destination. This is the row for Greenhouse, generated from the same tables the runner uses:

Into Odoo

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
GreenhouseDepartments, Offices, Jobs, Candidates, ApplicationsYesNoNoNoNoNoNoNo

Into Ashby

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
GreenhouseDepartments, Offices, Jobs, Candidates, ApplicationsYesNoNoNoNoNoYesNo

Into Lever

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
GreenhouseDepartments, Offices, Jobs, Candidates, ApplicationsYesNoNoNoNoNoYesNo

Into Greenhouse

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
GreenhouseDepartments, Offices, Jobs, Candidates, ApplicationsYesNoNoNoNoNoYesNo

Each destination's own article says how its data is written: Odoo, Ashby, Lever, Greenhouse.

Permissions and why

WhatWhy Shuttio needs it
Harvest V3 (OAuth) credentialsA Client ID and a Client Secret from Greenhouse, API Credentials, Create new API credentials, Harvest V3 (OAuth). Harvest v1 and v2 API keys stopped working on 31 Aug 2026. Shuttio checks the credentials against Greenhouse before it saves anything, and never writes to Greenhouse.
A Site Admin userGreenhouse's list endpoints need a Site Admin as the authorizing user. By default the calls run as the integration's own user; you can type another user's id instead.
The read scopesharvest:jobs:list, harvest:candidates:list, harvest:applications:list, harvest:notes:list, harvest:interviews:list, harvest:interviewers:list, harvest:job_interviews:list, harvest:offers:list, harvest:scorecards:list, harvest:scorecard_question_answers:list, harvest:scorecard_questions:list, harvest:scorecard_candidate_attributes:list, harvest:job_candidate_attributes:list, harvest:attachments:list, harvest:users:list, harvest:departments:list, harvest:offices:list, harvest:sources:list, harvest:rejection_reasons:list, harvest:job_interview_stages:list, harvest:job_owners:list, harvest:job_hiring_managers:list, harvest:openings:list, harvest:close_reasons:list, harvest:referrers:list, harvest:candidate_educations:list, harvest:candidate_employments:list and harvest:custom_field_options:list. A scope you leave out only leaves that data out, and the run says so.
EEOC scopesharvest:eeoc:list, harvest:demographic_answers:list, harvest:demographic_questions:list and harvest:demographic_answer_options:list. They move the candidates' EEOC and demographic self-identification answers (gender, race or ethnicity, veteran and disability status, other questions) as one note on each application. Greenhouse restricts these scopes; without them the run goes on and says EEOC was not moved.

Greenhouse allows a limited number of requests per 30 seconds; a large account takes hours, and the run pauses when Greenhouse asks it to slow down until you resume it. The secret is stored encrypted and deleted 14 days after the migration finishes. You can delete the credentials at any time in Greenhouse under API Credentials.

Known limits

  • Attachment files: Only the file names are carried. Greenhouse download links expire after 7 days, and the Odoo app and import package are not used for recruitment.
  • Odoo users: A user is a login and a paid seat, so none is created. A recruiter is matched to an existing Odoo user by email.
  • Odoo without the Recruitment app: The Recruitment app must be installed; if it is not, the run stops with one sentence and writes nothing.
  • The Odoo app and the import package: Recruitment records are written through your Odoo API key only.
  • Rate limits: Greenhouse limits requests per 30 seconds. Shuttio waits when Greenhouse asks, and pauses the run if it keeps pushing back; Resume carries on.
  • Emails: emails Greenhouse logged on an application are read as notes of that application; Shuttio reads no mailbox.

Not answered here? Email help@shuttio.com.