See a candidate's entire Lever history on one merged profile

Search a person by name or email and get every opportunity they hold across every role, live and archived, with their full feedback history in one place.

App
LeverSlack BotHR & PeopleOperationsResearch & MonitoringAI Reports
PromptCreate

Build me an app my recruiting team opens whenever we are about to talk to someone we might have seen before. Lever organizes its pipeline by requisition rather than by person, so nobody here can see everything one human has been through with us without searching the same name several times and stitching the results together by hand. This app should do that stitching for us.

The front page is a search box. I type a candidate name or an email address and get back matching people, not matching applications. Load the data with Lever's List Opportunities using the contact and applications expansions, then group the results by the contact ID returned on the expanded contact, so each row in the results is one human showing their name, primary email, how many opportunities they hold in total and how many of those are still live.

Clicking a person opens their merged profile: one header for the human, then a table of every opportunity they hold across every posting, live and archived. Each row shows the posting title, current stage, owner, archive reason and archive date, plus when the opportunity was created and when it last advanced. Include archived opportunities, not only live ones, since the whole point is seeing the history. Sort live opportunities first, then archived ones newest first.

Expanding an opportunity row reveals its full record: the applications on it from List Applications for an Opportunity, the interview feedback from List Feedback on an Opportunity with each interviewer's scores and written comments, the notes from List Notes on an Opportunity, the referrals from List Referrals on an Opportunity, and links to the resumes from List Resumes on an Opportunity.

Two situations need flagging loudly at the top of the profile rather than being buried in the table. The first is the same person sitting live in two or more pipelines right now, which usually means two recruiters are working them without knowing about each other; show both owners by name so they can go and talk. The second is near duplicate contact records, meaning two separate contacts that share a name or an email address. Lever deduplicates on email when opportunities are created, so anything that slipped past that check is worth surfacing. Render both as visible banners that call out the specific rows involved.

From any opportunity row I can act without leaving the app: add a note with Create Note on an Opportunity, apply or remove a tag with Update Opportunity Tags, move the candidate to a different stage with Update Opportunity Stage, and archive or restore with Archive or Unarchive Opportunity. Populate the archive reason picker from List Archive Reasons, and render the special Hired reason differently from a rejection reason, because being hired is not the same as being turned down and the two should never look alike in the table. Pass perform_as with the acting user's Lever user ID on every write so the audit log attributes the change to the real person rather than to the integration.

Add a "Write the history brief" button on the profile that kicks off a background agent. The agent reads all of the feedback and all of the notes across every one of that person's opportunities, past and present, then writes a plain English summary of how they performed the previous times we spoke to them, what interviewers consistently liked, what concerns kept coming up, and exactly where and why they stalled. It files the brief back onto the current opportunity as a note with Create Note on an Opportunity, and offers a button to post the same brief to a Slack channel with Send a Message. Show the finished brief in the app so I can read it before deciding whether to post it.

A few details to get right. The current Lever model is the Opportunity, which is one candidate per posting, and a single person is a Contact who can hold many Opportunities, so all grouping has to happen on the contact ID returned when opportunities are listed with contact expanded; the legacy candidates endpoints are deprecated and must not be used. Timestamps come back as Unix milliseconds, so format them as readable dates everywhere they appear. Page through list results rather than showing only the first page. If someone has a long history, keep the profile readable by collapsing older archived opportunities behind a show more control.

What does this prompt do?

  • Search by name or email and open one profile that merges every application that person has ever had with you, across every role and every year, live and archived alike
  • See each opportunity's stage, owner, archive reason and date side by side, with the interview feedback, notes, referrals and resumes sitting underneath each one
  • Get loud warnings when the same person is sitting live in two or more pipelines at once, or when two contact records look like the same human
  • Act right from the board: add a note, apply or remove a tag, move a stage, or archive with a reason, without opening Lever in another tab
  • Press one button and an assistant reads every past piece of feedback and writes the plain English story of how that person performed before and where they stalled

What do I need to use this?

  • A Lever account with permission to view candidates, applications, feedback, notes, referrals and resumes
  • Permission in Lever to add notes, change tags, move stages and archive candidates, if you want to use the action buttons
  • A Slack workspace, if you want to post the written history brief to a channel
  • The names or email addresses of the people you want to look up

How can I customize it?

  • Choose which warnings shout loudest: someone live in more than one pipeline, near duplicate contact records, or both
  • Change how the written brief reads, from a short paragraph for a hiring manager to a detailed rundown for the recruiter
  • Pick which Slack channel briefs are posted to, or switch Slack off and keep the brief filed on the candidate record only
  • Decide how far back the profile reaches, and whether older archived applications start collapsed

FAQs

Why can't I already see this in Lever?
Lever organizes its pipeline by job opening rather than by person, so someone who applied for three roles shows up as three separate entries with no single view tying them together. This board groups those entries back under the human, which is the thing recruiters normally rebuild by hand in a spreadsheet.
Does it change anything in my Lever account?
Only when you ask it to. Notes, tags, stage moves and archives you make in the board are written straight back to the matching record in Lever and attributed to you in the history, so your team sees who did what. Everything else the board shows is read only.
What counts as a near duplicate contact?
Two separate records that share a name or an email address. They usually appear when someone applied with a personal address one year and a work address the next, or when a referral was added by hand while an application already existed.
How does the written history brief work?
You press the button and an assistant reads every piece of interview feedback and every note across all of that person's applications, then writes a plain English summary of how they performed the previous times you spoke to them and exactly where things stopped. It saves onto the current application as a note and can be posted to Slack.
Will it show candidates who were rejected years ago?
Yes. Archived applications are included with the reason they were archived and the date it happened, and people who were hired are shown differently from people who were turned down, so a past hire never looks like a past rejection.

Related templates

A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
LiveChat coverage board for planning next week's shifts

See the exact hours your chat queue backs up and customers give up waiting, then plan next week's shifts before it happens again.

LiveChat
Slack Bot
General Input Database
App

Stop searching the same candidate five times.

Give your recruiters one profile that shows everything a person has ever been through with your team.