The pipeline
A per-job board whose stage history is an append-only event log, where every move records why it happened and rejecting someone stops the automation already in flight for them.
The problem it solves
A pipeline board is usually a picture of the present with no memory. A card is in "Onsite" and nobody can say when it got there, who moved it, or what the move was based on. When a candidate asks why they were rejected — or a regulator does — the answer has to be reconstructed from someone's recollection.
Here, the event log is the truth and the board is a view of it.
How it works
Stages belong to the job
The pipeline plan is per job, not global. A job running three interview rounds reports progress out of three where a job running two reports out of two.
Each stage has two separate things:
- a name, which is what people see and your team may change, and
- a type, which is what the product acts on: screening, interview, offer, hired, rejected.
Nothing in the product acts on the name. Renaming "Onsite" to "Final Panel" changes the label and nothing else about how the stage behaves.
A stage also declares whether it requires an interview, and how that round is conducted by default. See Interviewing.
The board is a view; the log is the record
Every stage change is written to the candidacy's timeline at the same moment the card moves, so the board and the timeline cannot disagree.
Every move records who made it — a person, or the system — and why. An automatic move carries the score and the threshold it crossed. A manual move carries the reason a person gave.
Board cards show, for each candidacy:
- Consent status. Consented; Awaiting consent (we asked and the link still works); Consent lapsed (we asked and the link expired unanswered; there is no second reminder, so this candidacy will not move again on its own); or Consent not asked (your team added them and nobody has asked). "Asked and ignored" is a fact about the candidate; "never asked" is a fact about us, and only the second is something a recruiter can fix — which is why they are distinct states. A candidate you uploaded yourself was told about the AI tool rather than asked, and shows no pill, because nothing is missing.
- Scoring state. Scoring… while the scorer runs; held, when an unreadable résumé or a missing rubric means no score is coming until a person acts (the card shows the hold instead of "Scoring…"); scored by the model; or a fallback keyword score, which decides exactly as a real score does and is marked as what it is. The board and the job's candidate table check again every ten seconds while any card is still scoring.
- Selecting rows. The job's candidate table and the board's table view have a checkbox per row for owners, admins and recruiters (and the job's creator, on the job page). Move to a stage or Reject goes through the same reason dialog as one move, with the "Email the candidates" box on a reject, and a move into a round nobody interviews for asks who should first. On the board, the selection has to be from one job.
- Held reason, when a candidacy is parked, labelled with what clears it: an unreadable résumé or no email address (lifted when the missing thing arrives), no rubric, no AI screen stage, nobody assigned to the round, or an expired consent link. The ones a person has to fix are also listed in the inbox's Needs you.
- Interview round progress for the job's plan, and, on a job's candidate list, the score and its coverage.
There is also an Awaiting human review filter, carrying each request's age and a badge that turns red past two business days.
Rejecting stops what was in flight
Marking an application rejected is not just a status change. A screening call already scheduled checks the interview's status rather than the application's, so without this it would still dial someone whose candidacy was over. Rejecting cancels the scheduled interviews and stops the automation queued for that person.
Whoever rejects someone by hand — the reject button, dragging the card onto Rejected, a bulk action — is asked to confirm, with Email the candidate ticked. Ticked, the candidate gets a short note that the application is not going forward. It gives no reason and no score, and says nothing about how the decision was made. Unticked, nothing is sent. Moving someone to Didn't show up never emails them. The automatic rejection at the résumé stage sends its own email, which explains that the decision was automatic and offers a human review.
Rejected candidates are hidden until you tick Show rejected. The Didn't show up column is not: it holds candidates whose AI interview link ran out unused, and each of them needs a decision, either a fresh link or letting them go.
Moving someone into a round starts it
Advancing a candidate into an interview round, automatically or by dragging the card, starts that round. An AI round emails a new one-use link. A round a person runs emails a link to pick a time when every assigned interviewer is free. Every interview round is run by people, so a round saved without a mode is treated as a video round.
A round with nobody assigned to interview it sends the candidate nothing. So moving someone into one asks first. Advance on the candidate page, the stage menu and a drag on the board all open "Round 2 has no interviewers. Assign one so Ada can pick a time." It lists everyone active in your organisation, with their role, and warns about anyone with no weekly hours set, since the candidate would be offered no times. Assign and advance assigns them and then moves the candidate, who gets one pick-a-time email. Advance without assigning moves them and sends nothing. Only an owner, admin, recruiter or the job's creator can assign from here. An assigned interviewer or hiring manager with no seat on the job gets an interviewer seat, so they can open the round.
A candidate already waiting in such a round shows "Round 1 has no interviewers" on their page the moment they are moved there, with an Assign button that opens the same picker. The page then says whether a scheduling email went out. The job page lists every interview round with nobody assigned. Assigning the first interviewer, from either place or the Team tab, starts the round for everyone in it who has never had an interview for it: each gets the pick-a-time email once. Someone whose interview for that round was cancelled or missed is left for you to decide. Moving someone back into a round they already had starts nothing.
The candidate page's Interview Progress shows each round's actual state. The voice screen shows not sent, link sent (when, and when it expires), link expired, or taken, with the score, how the call ended and whether it counts. A resend shows the live link and the call before it. A round people run shows not started, waiting for an interviewer, scheduling link emailed (when), booked (when, and with whom), done (score), cancelled or didn't show up, and who is assigned to it.
On a candidate at the AI screen, the screen button says what it will do: Send voice screen before any, Voice screen sent (disabled) while a link is out and unused, and Resend voice screen once a call has happened, however it ended. A resend is a new attempt with a new link. The earlier call and its transcript are kept.
The funnel dashboard
A per-source funnel is available over a configurable window: admitted, consent sent, consented, scored, invited, screened, advanced, rejected, and held with its reason. Every number is a count of application events, grouped by source, because that log is the source of truth for what happened to a candidacy. A summary table would need a writer on every path that already writes an event, and the first path that forgot would make the dashboard quietly wrong in the flattering direction.
Two details worth knowing, because they change how the numbers read:
- Advanced and rejected read the target stage, not the event type. A recruiter dragging a card into Rejected also writes a stage-change event, and the rejected stage is usually last in the plan — so counting event types would score every manual rejection as an advance. Advanced means a move to a non-rejected stage further along; rejected means a rejection event or a move into a stage of type rejected.
- There is no "scored" step in the dashboard, on purpose. Scoring writes no application event, and inferring one from the presence of an assessment would make the block a mixture of things that happened and things that were deduced. Scoring rates are measured separately, where scoring actually happens.
- There is no "hired" step either. Nothing writes a hired event — a hire is a move into a stage of type hired — so the column would have sat at zero forever and read as "we have hired nobody".
The talent pool (Candidates)
The Candidates page (Talent Pool in the sidebar) lists every person the organization has, across all of its jobs, one row per person, most recent activity first. Under each person sits every application they hold: the job, its current stage, its status when it is not active, and its score (the roll-up across rounds once there is one, otherwise the résumé score; nothing when unscored). The name opens the person's profile, and each application opens its workspace on that job.
The search narrows the list as you type. It matches any part of a name, email, current title, current company, or the title of a job the person applied to, ignoring case. Filters narrow it to people with an application on one job, or in one status.
It is per organization: how this company has engaged this person, across the roles they applied to. No other company sees it. An interviewer scoped to some jobs sees only the people on those jobs, and only those applications.
What the user does
- Configure each job's stages, their names and their types.
- Work the board. Drag a card and give the reason; the reason is kept.
- Filter for candidacies awaiting human review, and for the two held reasons a person can fix.
- Read a candidacy's timeline to see every move, its actor and its reasoning.
- Read the funnel by source to decide whether an intake surface is earning its place.
- Add people who did not apply with Add résumés on an active job or a draft with a rubric, and clear Inbox → Needs you, where everything waiting on a person sits: decisions held while automatic decisions are off, and whatever an API token, an assistant or a bulk upload left for a person. Both are described in Integrations.
Limits and edge cases
- A "candidate" on the board is really an application — that person on that one job. The same person on two roles is two cards with two independent histories.
- Renaming a stage is safe; changing its type changes behaviour. The type is what automatic decisions and the funnel read.
- An expired consent link is a dead end for automation. Only a person can move that candidacy on.
- A held candidacy is not decided in either direction. No automation runs on it at all until the hold lifts.
- Interviewers see only the jobs they hold access on. That is enforced by the database, not just the screens, so it holds for every view of the board.
- The funnel counts new admissions only. An ATS re-sync of somebody already in the pool is not a new candidate, and counting it would inflate the top of the funnel every hour.