Unwrapped

Legacy SaaS dossier · greenhouse

Greenhouse

Greenhouse

CategoryATS (recruiting)Greenhouse Expert + Sourcing add-onSite ↗

A candidate pipeline + scorecards + an audit log, sold as a per-employee tax. The audit log is the only piece you can't trivially replace.

01 · Data

Data the SaaS sits on

LinkedIn (sourcing)
LinkedIn (sourcing)API
Interviewer calendars
Interviewer calendarsYours
Job board
Job boardYours
Payroll / HRIS
Payroll / HRISAPI

Internal Build Score

0.56

Feasibility of a useful internal substitute for the actually-used 20% of this SaaS, built with Claude and your own data layer.

IBS = 0.25·U + 0.25·C + 0.20·D + 0.15·I + 0.15·Mthis record · 56%
  • U

    User adoption gap

    weight 0.250.55

    How much licensed surface area sits idle.

  • C

    Core simplicity

    weight 0.250.60

    How small the actually-used 20% is when re-implemented honestly.

  • D

    Data portability

    weight 0.200.50

    How clean the exit is, exports, formats, audit lock.

  • I

    Integration burden (inverse)

    weight 0.150.55

    How few external systems must keep working through the SaaS.

  • M

    Moat erosion

    weight 0.150.60

    How much the original differentiator has been commoditised by LLMs + cheap infra.

Editorial heuristic. Not investment advice, not a procurement recommendation.

03 · Feature usage

Commonly used vs. rarely touched

Commonly used

05

  • Candidate pipeline with stages
  • Interview scorecards per role
  • Scheduling across multiple interviewers
  • Source-of-truth applicant record
  • EEOC / audit log

Rarely touched

07

  • CRM module for candidate nurture
  • Sourcing + Marketing as separate paid pillars
  • Approvals workflow with custom forms
  • Onboarding handoff layered on top
  • Reporting suite with a non-SQL query builder
  • AI screening, a Claude call billed per req
  • Greenhouse Expert / Pro / Essential ladder

Internal build

Build it yourself

01 · Stack & flow

Postgres
Postgres
Next.js
Next.js
Claude API
Claude API
Calendar API
Calendar API
S3 (CVs)
S3 (CVs)

Internal build map

Data in

Candidates table
Interviewer calendars
CV blobs (S3)

Agent layer

Scorecard synthesiser
JD writer

Logic

schedule loop
collect scorecards
append audit log
EEOC reporting

Outputs

Pipeline board
Debrief read
Audit log row
Build time
9 weeks
Run cost
$5/seat·mo
vs. SaaS
$220K / yr

Build outline

  1. Candidates + stages + interviews schema
  2. Pipeline board + per-role scorecards
  3. Interview scheduler (free-busy + round-robin)
  4. Append-only audit log w/ row-level immutability
  5. Claude scorecard synthesis after every loop

02 · Claude prompt

First, map what you actually use (optional)
Step 1 · usage audit prompt

// Greenhouse usage audit, scope the rebuild Input: the pipeline stage config with per-stage volume, the scorecard templates with fill rates, the configured approval flows, and the report catalog. ## Do 1. Keep stages candidates actually move through; collapse dead ones. 2. Keep scorecard attributes filled on > 20% of loops. 3. Mark the EEOC / audit-log requirements as load-bearing, they must be reproduced exactly, not trimmed. ## Output JSON: { keep_stages[], keep_scorecard_fields[], compliance_must_keep[], drop[] }.

Step 2 · rebuild the core

// Scorecard synthesiser, internal recruiting tool You receive (a) a candidate's full interview loop (each interviewer's structured scorecard + written notes), (b) the role's scorecard rubric, and (c) the hiring manager's stated must-haves. ## What you must do 1. Produce a debrief synthesis: - Per-rubric-area: average score + the supporting quote. - Bench strengths + risks, quoting interviewers, never paraphrasing. - Single recommendation: "hire", "no-hire", "down-level", or "need-another-loop", with one sentence of reasoning. 2. Flag any rubric area where interviewers disagreed by ≥ 2 points in `disagreements[]`. ## What you do not do - Do not name interviewers in the synthesis ("Interviewer A" is fine for debrief-room neutrality). - Do not infer protected characteristics; do not comment on culture fit unless the rubric explicitly contains a culture column. - Do not generate the offer letter, that's a separate flow. ## Output JSON: { per_area[], strengths[], risks[], recommendation, disagreements[] }.

03 · Result

Synthesise loop for Senior PM candidate, 5 interviewers
loop:2025-08#cand:1487

hire @ L5 · strengths: 3 · risks: 1 (depth on growth metrics) · disagreement: collaboration (2→4)