Migration Playbook

Greenhouse Workday Recruiting

Greenhouse to Workday Recruiting: The Complete Migration Playbook

A 43-step runbook across six phases — track your progress, and open the right tool at every step.

0 / 43 steps complete 0%
TL;DR

Greenhouse to Workday migration requires translating ATS jobs into Workday's rigid Requisition/Position/Sup Org hierarchy, serializing scorecards to text, and downloading attachments before ephemeral S3 URLs expire.

A CTO-level guide to migrating from Greenhouse to Workday Recruiting: data model mapping, API rate limits, scorecard handling, and cutover strategy.

Read this first

Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.

Greenhouse Harvest API v1 and v2 will be deprecated and unavailable after August 31, 2026

Build your extraction pipeline against Harvest v3 (OAuth 2.0, cursor-based pagination) from day one. Do not build on v1/v2 only to rewrite months later. (support.greenhouse.io)

In Workday, a Job Requisition requires a Supervisory Organization and typically a

In Workday, a Job Requisition requires a Supervisory Organization and typically a Position before it can be created. Greenhouse Jobs have no such dependency — they are standalone entities with flexible department and office associations. This hierarchy requirement is the single biggest source of mapping complexity.

Do not hard-code a single throttle value

v1/v2 uses a 10-second rolling window, while v3 uses a 30-second fixed window. Build a central rate-limit controller that reads X-RateLimit-* and Retry-After on every response. (developers.greenhouse.io)

Implement exponential backoff with jitter on all retry logic for both APIs

A simple linear retry will cause cascading failures when hitting Workday's concurrency limits. For Workday background sync jobs, avoid polling intervals shorter than 5 minutes.

Never flatten away Greenhouse candidate_id, application_id, job_id, opening_id, offer_id,

Never flatten away Greenhouse candidate_id, application_id, job_id, opening_id, offer_id, or scorecard_id. Store them as external reference IDs in Workday. These become your crosswalk for traceability, debugging, and rollback.

Greenhouse attachment URLs are signed S3 links that expire in 7 days

Download all resumes and documents synchronously during extraction. If you defer downloads, URLs will return 403 errors. Keep a file manifest with checksums for every download. (developers.greenhouse.io)

The runbook

Work top to bottom. Tick steps as you go — your progress is saved in this browser.

01 Discovery Scope candidates, pipelines and the compliance obligations that come with them. 0/6

Objective Agreed scope across candidates, applications, jobs and interview history, with legal signed up on retention.

  1. Inventory every object in Greenhouse

    Talent ops 1-2 days

    Count candidates, applications (a candidate can have many), jobs and requisitions, interviews, scorecards, offers, and resume files. Applications and scorecards usually outnumber candidates several times over, and resume files dominate storage.

    Data Profiler Get real record counts instead of estimating from memory
  2. Settle retention and consent with legal

    Legal / compliance 1-2 weeks

    Candidate data is heavily regulated: GDPR right-to-erasure, EEOC/OFCCP record-keeping, and per-region retention windows that conflict with each other. Decide what may be migrated at all before you scope anything else — this frequently shrinks scope substantially.

    Migrating candidate records whose consent has lapsed or whose retention window has expired creates a new compliance breach in the target system.

  3. Map the hiring pipeline and agree the target stages

    Talent leadership 3-5 days

    Document every job's pipeline, stage, and rejection reason, then agree the Workday Recruiting model with talent leadership. Stage definitions drive every funnel metric you report, so changing them silently rewrites your hiring analytics.

  4. Catalogue integrations and the job-board estate

    Talent ops 2-3 days

    List job boards, careers-site integration, HRIS, background check, assessment platforms, calendar and email. The careers site and job boards are customer-facing, so their cutover needs its own plan and its own testing.

  5. Build the business case and choose the window

    Project sponsor 2 days

    Model licence delta, effort and recruiter productivity dip. Time the window against your hiring cycle: a migration during peak graduate recruitment or a hiring surge will fail on people, not technology.

    Vendor Evaluator Score Workday Recruiting against alternatives on weighted criteria
  6. Rebuild interview plans and scorecards in Workday

    These do not migrate — they must be recreated natively in Workday's interview framework.

Greenhouse → Workday Recruiting specifics

HCM consolidation
Organizations already running Workday for core HR, payroll, and finance want recruiting in the same platform to eliminate data silos. A unified system of record means a single employee lifecycle — from candidate to retiree — without integration middleware.
Position management alignment
Workday's position-based staffing model enforces strict alignment between Requisitions, Positions, and Supervisory Organizations. Companies with complex organizational structures (multi-entity, multi-country) need this level of control, which Greenhouse does not natively provide.
Compliance and reporting
Workday's built-in audit trails, configurable business process approvals, and unified reporting across HR, payroll, and recruiting can simplify SOX, GDPR, and EEO compliance for large enterprises.
Attachment preparation
Convert downloaded files to Base64 strings for Workday API payload compatibility. Implement file size checks — Workday restricts attachment sizes and file types. A 50MB design portfolio from Greenhouse will fail to load.

Don't move on until

  • Counts confirmed for candidates, applications, jobs and offers
  • Retention and consent obligations confirmed with legal
  • Hiring-stage model agreed with talent leadership
02 Data Audit Audit candidate data with compliance sitting next to you. 0/9

Objective Profiled exports with duplicates, expired records and resume files all quantified and triaged.

  1. Export and profile candidates, applications and jobs

    Data engineer 2 days

    Profile each object separately and reconcile against API counts. Watch the candidate-to-application ratio: a mismatch usually means applications have been silently truncated by pagination.

    Data Profiler Profile the Greenhouse export for nulls, outliers and type drift
  2. Quantify duplicate candidates and agree survivorship

    Talent ops 2-3 days

    The same person applies repeatedly over years with different emails and name spellings. Measure the duplicate rate and agree survivorship rules — which record wins and what happens to the application history attached to the losers.

    Merging candidates without agreed survivorship rules destroys application and interview history that you may be legally required to retain.

    Data Cleaner Strip empty rows, stray whitespace and dead columns
  3. Identify records outside their retention window

    Legal / compliance 2-3 days

    Flag candidates whose consent has expired, who have exercised erasure, or who fall outside regional retention. Exclude them from scope and document the exclusion — you need to show the decision was deliberate.

    PII & Compliance Scanner Find regulated fields before they land in a new system
  4. Inventory resume files and attachments

    Data engineer 1-2 days

    Count files, total volume and MIME types, and check every attachment still resolves to a live URL. Expiring signed download URLs are the classic reason a resume migration completes with a large fraction of empty files.

    Resume download URLs are often short-lived signed links. Fetch files close to load time or they will 404 mid-migration.

  5. Verify relationship integrity

    Data engineer 1 day

    Confirm every application links to a live candidate and a live job, and every scorecard to a real interview. Orphaned applications produce a funnel report that does not tie to anything.

  6. Clean, normalise and produce masked test data

    Data engineer 2 days

    Normalise emails, phone formats and locations, standardise timestamps to UTC, and generate a masked dataset for the sandbox. Real candidate data in a sandbox is a compliance breach in most jurisdictions.

    PII Masker Generate a safe copy for sandbox and vendor testing
  7. Preserve source IDs

    Store greenhouse_candidate_id and greenhouse_application_id as external reference IDs in Workday. You will need these for traceability and debugging.

  8. Download attachments synchronously

    Do not defer. Greenhouse's signed S3 URLs expire in 7 days.

  9. Disable notifications during bulk load

    Prevent Workday from emailing thousands of candidates or flooding hiring managers' inboxes.

Greenhouse → Workday Recruiting specifics

Data cleaning
Remove or flag records with missing required fields. Workday will reject candidates without legal names or valid email addresses. Convert Greenhouse Markdown notes to plain text or Workday-supported rich text.
Back up everything before migration
Export all Greenhouse data to a local archive (JSON + attachments) before starting. This is your safety net.
Tag migrated records
Use a consistent label on every migrated record so you can filter, audit, and rollback if needed.
Maintain crosswalk tables permanently
Keep a strict ID mapping table in your staging database linking Greenhouse IDs to Workday IDs. This is mandatory for rollback, delta syncs, and post-go-live audit.

Don't move on until

  • Duplicate candidate rate quantified with a merge policy agreed
  • Records outside retention identified and excluded
  • Resume and attachment inventory complete with total volume
03 Field Mapping Map the candidate-application-job triangle before anything else. 0/6

Objective A signed mapping covering objects, stages, rejection reasons, scorecards and EEO fields.

  1. Map the candidate, application and job model

    Solution architect 2-3 days

    ATS platforms differ on whether a person or an application is the primary record. Establish this first: getting it wrong means one candidate becomes five, or five applications collapse into one, and the entire field map has to be redone.

    Candidate-centric and application-centric models are not interchangeable. Confirm which Workday Recruiting uses before mapping any field.

    Schema Mapper Match Greenhouse fields to Workday Recruiting by uploading both schemas
  2. Map pipeline stages and rejection reasons exhaustively

    Talent ops 2 days

    Enumerate every stage and rejection reason across all jobs, including retired values on historical applications, and map each explicitly. Unmapped rejection reasons are both a reporting gap and, in regulated hiring, a compliance one.

  3. Decide EEO and diversity data handling

    Legal / compliance 2 days

    These fields are separately regulated and often legally required to be stored apart from the candidate record. Confirm with legal whether they migrate at all, and how Workday Recruiting isolates them.

    EEO data usually cannot be migrated into ordinary custom fields without breaching the segregation rules that govern it.

  4. Map interviews, scorecards and feedback

    Talent ops 2-3 days

    Structured scorecards rarely have a native equivalent. Decide whether to reconstruct them, flatten them into notes, or keep them only in the archive — and be explicit that flattening loses the ability to report on them.

    JSON to CSV Converter Flatten nested API responses into a reviewable sheet
  5. Plan resume and file migration

    Data engineer 1-2 days

    Confirm size limits, MIME support and whether Workday Recruiting re-parses resumes on upload. Re-parsing can overwrite carefully curated candidate fields with worse machine-extracted values, so test it deliberately.

  6. Set load order and freeze the spec

    Project manager 1 day

    Users, then jobs, then candidates, then applications, then interviews and scorecards, then files. Keep source IDs in custom fields, then version and sign off the spec.

Greenhouse → Workday Recruiting specifics

ID mapping
Create crosswalk tables: Greenhouse integer IDs → Workday Reference IDs. Build these before the first write to Workday.
Schema translation
Map Greenhouse objects to Workday equivalents per the field mapping table.
Scorecard serialization
Convert structured scorecard data (attribute ratings, recommendations, Q&A) to text blocks. Scorecard answers can include basic HTML — sanitize it. Preserve raw JSON in the staging archive.
Deduplication
Identify candidates who exist in both systems (common when Greenhouse and Workday have been running in parallel). Create a canonical-person map before load so historical applications do not fork into multiple Workday candidates. Greenhouse emits candidate-merge events — use them to build this map. (developers.greenhouse.io)

Don't move on until

  • Candidate/application/job model mapped and reviewed
  • Every stage and rejection reason explicitly mapped
  • EEO and diversity field handling agreed with legal
04 Test Migration Pilot whole candidate journeys, not isolated records. 0/7

Objective A sandbox pilot where candidate journeys, funnel metrics and resume files all verify.

  1. Configure the Workday Recruiting sandbox with the agreed pipelines

    Solution architect 3-5 days

    Create jobs, pipeline stages, scorecard templates, user roles and custom fields first. Loading applications before the stages exist puts every candidate in a default stage and invalidates the pilot.

  2. Select complete candidate journeys as the pilot slice

    Data engineer 0.5 day

    Take 100-200 candidates with all their applications, interviews, scorecards and files — including repeat applicants, hires, rejections at every stage, and candidates on multiple jobs. Repeat applicants are where the model mapping actually gets tested.

  3. Run the load in dependency order with logging

    Data engineer 2 days

    Jobs, candidates, applications, interviews, then files, logging each request against its source ID. Track file uploads separately: they fail for different reasons and at different rates than record writes.

  4. Verify journeys and funnel metrics

    Talent ops 2 days

    Confirm each candidate sits at the right stage on the right job with their history intact, and that per-stage funnel counts match Greenhouse for the pilot jobs. Funnel mismatches point straight back to stage mapping.

    Migration Validation Tool Diff the pilot batch against source before scaling up
  5. Open every pilot resume and check re-parsing

    Data engineer 1 day

    Actually open the files rather than trusting the upload count, and check whether re-parsing has overwritten any candidate fields. A resume that uploaded as a zero-byte file still counts as a success in most logs.

  6. Put recruiters in front of the pilot data

    Talent leadership 2-3 days

    Have recruiters work their own pilot requisitions end to end. They immediately spot missing feedback, wrong stages and unreadable history that reconciliation cannot see.

  7. Run test migrations in Workday sandbox

    Never load directly into production. Validate in a non-production tenant first. EIB errors in production are painful to unwind.

Don't move on until

  • Candidate-application-job relationships intact for the pilot
  • Funnel counts per stage match source for pilot jobs
  • Resume files open correctly for every pilot candidate
05 Cutover Switch recruiting without dropping a live candidate. 0/6

Objective All in-scope recruiting data live in Workday Recruiting, careers site and boards repointed, recruiters working.

  1. Pre-load historical candidates and closed jobs

    Data engineer 1-2 weeks

    Load closed requisitions, rejected candidates and archived applications while Greenhouse stays live. Only active pipeline and the final delta need to move in the window.

  2. Publish the runbook including the careers-site switch

    Project manager 1 day

    A timed sequence with owners and abort criteria, treating the careers site and job boards as first-class steps. They are candidate-facing, so a failure there is publicly visible in a way a data defect is not.

  3. Freeze Greenhouse and take the final delta

    Talent ops 2-4 hours

    Stop new applications and let recruiters finish in-flight actions, then export everything changed since the pre-load. Coordinate with anyone actively interviewing so feedback is not entered into the old system mid-freeze.

    Interview feedback entered in the old ATS during the freeze is lost, and it is the data recruiters most immediately notice missing.

  4. Load active pipeline and reconcile stages

    Talent ops 2-6 hours

    Load active candidates and applications, then verify every active candidate is at the correct stage on the correct job before repointing anything. Active-stage accuracy is what recruiters check first on day one.

    Migration Validation Tool Confirm the final delta landed before you reopen
  5. Repoint careers site, job boards and integrations

    IT / integrations 4-8 hours

    Switch the careers-site integration, repost or migrate live job ads, and repoint HRIS, background check, assessment and calendar integrations. Then submit a real test application through the careers site and every major board.

    Job ads left posted against the old ATS keep collecting applications that never reach the new system.

  6. Go/no-go and switch recruiters over

    Project sponsor 1-2 hours

    Call the decision against the exit criteria, then move recruiters with support on hand for the first day. Keep Greenhouse read-only — candidate records have retention obligations that outlast the migration.

Don't move on until

  • Historical load complete and reconciled before the freeze
  • Careers site and job boards posting into Workday Recruiting and verified
  • Active candidates confirmed at the correct stage
06 Validation Prove the funnel, the files and the compliance position. 0/9

Objective Reconciled recruiting data, funnel parity with baseline, and a defensible compliance record.

  1. Reconcile every object including files

    Data engineer 2 days

    Compare counts for candidates, applications, jobs, interviews, scorecards and files, with field-level spot checks on a sample. Count files separately — they are the object most likely to be quietly short.

    Migration Validation Tool Reconcile Greenhouse and Workday Recruiting record-for-record
  2. Tie funnel and time-to-hire reporting to baseline

    Talent ops 2-3 days

    Rebuild funnel conversion, time-to-hire, source effectiveness and offer-acceptance reporting and compare to pre-migration figures. Variances trace back to stage mapping and to how application timestamps were handled.

    Time-to-hire depends on stage-transition timestamps. If those were approximated, the metric will differ even with identical records.

  3. Verify file integrity at scale

    Data engineer 1 day

    Sample-open resumes across the whole load and compare file sizes against source. Zero-byte and truncated files are common and never surface in an upload success count.

  4. Confirm retention, consent and EEO configuration

    Legal / compliance 2 days

    Verify retention rules, consent state and EEO segregation are correctly configured in Workday Recruiting, and that excluded records genuinely did not migrate. File this as your compliance evidence.

    PII & Compliance Scanner Produce the compliance evidence your auditor will ask for
  5. Test workflow, notifications and candidate-facing paths

    Talent ops 2-3 days

    Fire every stage automation, interview scheduling flow, rejection template and offer approval, and submit a live application through the careers site. Candidate-facing emails going out wrong is a brand problem, not just a bug.

  6. Sign off and schedule decommission

    Project sponsor 1 day

    Get written acceptance against the Discovery criteria, retain Greenhouse read-only for the period your retention policy requires, take a final archive export, and diarise cancellation.

  7. Record counts

    Compare totals per object type between Greenhouse exports and Workday imports. A mismatch of even 1% on 50,000 candidates means 500 missing records.

  8. Update integrations

    Any third-party tool (background check, assessment, HRIS sync) connected to Greenhouse needs to be reconnected to Workday.

  9. Update reporting

    Rebuild dashboards and audit queries to use Workday IDs plus preserved source IDs.

Greenhouse → Workday Recruiting specifics

Picklist reconciliation
Map Greenhouse picklist values (sources, rejection reasons, stages) to Workday reference IDs.
Field-level sampling
For a random 10% sample, compare every mapped field value. Pay special attention to date formats (Greenhouse uses ISO 8601; Workday may expect different formats per locale), phone number formatting, email case sensitivity, and custom field picklist values.
Relationship verification
Confirm that Job Applications in Workday are linked to the correct Requisitions and Candidates.
Attachment spot-check
Open 20+ migrated resumes in Workday to confirm files are not corrupted and open correctly.
UAT with recruiting team
Have recruiters log into the Workday Impl tenant and verify candidate profiles, application histories, and serialized scorecard data. They will catch UI-level issues that API validation misses. Schedule 2–3 days for this.

Don't move on until

  • Reconciliation complete across candidates, applications and files
  • Funnel and time-to-hire reporting tie to baseline
  • Retention and EEO configuration verified, acceptance signed

Field mapping reference

The field-by-field mapping for each object. Use this as the starting point for your mapping spec.

Object. Workday Equivalent 17 fields
Greenhouse fieldWorkday Recruiting fieldNotes
Candidate.first_name Candidate.Legal_Name.First_Name Direct map
Candidate.last_name Candidate.Legal_Name.Last_Name Direct map
Candidate.email_addresses [] Candidate.Email_Address_Data Map primary email; handle multiple
Candidate.phone_numbers [] Candidate.Phone_Data Map type (mobile, home, work)
Candidate.custom_fields Workday custom fields (if configured) Lossy — Workday custom field options are limited
Application.id Job_Application.Reference_ID Store as external reference for traceability
Application.status Job_Application.Status Map: active → In Progress, rejected → Declined, hired → Filled
Application.current_stage Job_Application.Recruiting_Stage Must pre-configure matching stages in Workday
Application.source Job_Application.Source Map to Workday Recruiting Source reference IDs
Job.name Job_Requisition.Job_Posting_Title Workday requires title to match Job Profile
Job.departments [] Supervisory Organization Must map to existing Workday Sup Org hierarchy
Job.offices [] Job_Requisition.Primary_Location Map to Workday Location reference IDs
Scorecard.overall_recommendation No direct field Serialize to note/comment on Job Application
Scorecard.attributes [] No direct field Serialize to structured text in comments
Offer.starts_at Job_Offer.Start_Date Direct map
Offer.salary Job_Offer.Compensation Requires Compensation Plan alignment
Attachment (resume) Candidate.Attachment_Data Download from ephemeral S3 URL, base64 encode, re-upload

Tools used in this playbook

All free, all run entirely in your browser — nothing is uploaded.

FAQ

Can you migrate Greenhouse scorecards to Workday Recruiting?

Not natively. Workday Recruiting has no structured scorecard equivalent. The recommended approach is to serialize each scorecard (interviewer, recommendation, attribute ratings) as a text block and attach it as a comment or note on the corresponding Workday Job Application. This preserves the historical record but loses queryability.

What are the Greenhouse Harvest API rate limits?

Harvest v1/v2 allows 50 requests per 10-second rolling window. Harvest v3 uses a 30-second fixed window. Both return HTTP 429 when exceeded. v1/v2 is being deprecated on August 31, 2026 — build on v3 with OAuth 2.0 and cursor-based pagination.

What are Workday Recruiting API rate limits?

Workday does not publish comprehensive rate limit documentation. Implementation partners report approximately 10 calls per second, with some endpoints limited to 5 requests per second. Implement exponential backoff and avoid polling intervals shorter than 5 minutes.

How long does a Greenhouse to Workday Recruiting migration take?

Small orgs (under 5,000 candidates) with CSV+EIB can finish in 1–2 weeks. Mid-market full-data migrations take 2–6 weeks via API ETL or managed service. Enterprise multi-entity migrations typically require 4–8 weeks.

What data is lost when migrating from Greenhouse to Workday?

Scorecards lose structured queryability (serialized to text). Prospect pools have no Workday equivalent. Activity feed context is partially preserved as comments. Custom fields may not map 1:1 due to Workday's more constrained model. Attachments are lost if not downloaded before Greenhouse's signed S3 URLs expire.

Or skip all of this and let us handle it

Book a 30-minute call and we'll scope your migration in a single session.