Spot likely AI-written applications in Greenhouse each morning

By General Input

Every weekday morning, check new Greenhouse applications for AI-generated writing and send recruiters one Slack digest of who to read closely.

Integrations

  • Pangram
  • Greenhouse
  • Slack

Type

Agentic Task

Categories

  • HR & People
  • Operations

Every weekday at 8am, review the job applications that came into Greenhouse in the last 24 hours and tell my recruiting team which written materials look AI-generated, so they can spend their screening time on the candidates worth reading.

Start with Greenhouse List Applications, filtered to applications created since the previous run. On a normal weekday that is a 24 hour window; on Monday it should cover the whole weekend so nothing falls through. Keep active applications only. For each one, hold on to the job requisition it belongs to so I can group the digest by role later, and use Greenhouse Get Candidate to pull the candidate record. Do not re-score an application that was already scored on an earlier run.

From each candidate and their application, collect the free text the candidate actually wrote: the cover letter, and the answers to written screening questions. Resumes and structured fields are not in scope. Skip any single piece of text under about 50 words, because detection is unreliable at that length. If a candidate has nothing left after that filter, skip them entirely and count them as unscored.

Run each remaining piece of text through Pangram Detect AI-Generated Text. That operation is asynchronous: submit the text, then poll the task until it reports success or failure. Pangram returns fraction_ai, fraction_ai_assisted and fraction_human, which are mutually exclusive and sum to 1.0, plus segment-level windows with start_index and end_index. Those indexes point into the text Pangram returns, not the string I submitted, so slice the returned text when quoting. Use those windows to pull out the specific passages that scored as AI-written. Pace the calls to stay under Pangram's realtime limit of 5 requests per second, and if one text errors, skip it and carry on rather than failing the whole run.

Only surface a candidate when their highest-scoring piece of writing is at or above a configurable AI likelihood threshold. Default it to 0.70 fraction_ai and keep that number in one obvious place so it is easy to tune. Report fraction_ai_assisted alongside as context, but do not let it on its own put someone in the digest. The point of the threshold is to keep the digest short enough that people actually read it.

Post one digest to Slack with Send a Message to my recruiting channel, grouped by job requisition. Under each requisition heading, list every flagged candidate with their name, the AI likelihood as a percentage, which piece of writing it came from (cover letter, or the named screening question), one or two of the exact passages Pangram highlighted, quoted and trimmed to a couple of sentences, and a link to their Greenhouse profile. Open the message with a line stating plainly that these scores are a review signal for human judgement, not a rejection criterion, and that detection is not reliable enough to decide an outcome on its own. Close with a count of how many applications were below the threshold or too short to score. If nothing crosses the threshold, post a single short line saying the run finished with nothing flagged, so the team knows it ran.

For every flagged candidate, also use Greenhouse Add Candidate Note to log the score on their profile so it travels with them through the pipeline. Keep the note short: the likelihood, which document it came from, the date of the check, and the same one-line reminder that it is a review signal only. Greenhouse requires writes to be attributed to a real user, so resolve a Greenhouse user id once with List Users at the start of the run and reuse it for every note.

Critical business rule to bake in: this is a review signal, never an auto-reject. Do not change any candidate's status, do not advance anyone, do not reject anyone, and do not touch the application stage for any reason. The only write this workflow makes in Greenhouse is a note. Keep individual candidate scores to the recruiting channel and the candidate note, and nowhere else.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentWin back LiveChat visitors whose chats went unansweredChat quality review board for LiveChat support leadsCandidate texting desk for your open Greenhouse rolesWin back no-show and cancelled appointments every morningLive Loop returns analytics with product-level drill-downNewsletter pre-flight and approval board for Mailjet sendsTurn a prospect spreadsheet into personalized sequence enrollmentsMailjet email delivery lookup console for support teamsCatch feature flags that never got switched on in production