GY

Recruit Scout

At home · live · TypeScript, Google Sheets, Apps Script

A Google Sheets college football recruiting board with duplicate detection, tiers from the coach's film grades and flags for stale entries.

What it is

I built a recruiting board for a college football coaching staff in July 2026. The coach already used a spreadsheet, so the interface is a shared Google Sheet. The tool never grades a prospect or contacts a recruit. A person always presses send.

I set a rule: the tool writes only to its own hidden staging tab, never to a coach's cells. The staff's board tabs look up the tool's fields by a synthetic prospect ID, so the tool can rewrite the staging tab without changing their entries.

How it works

A TypeScript pipeline runs on demand, with a GitHub Actions schedule as backup. Apps Script handles operations inside the Sheet. Manual additions, pasted handles or messages, visit-sheet PDFs and recruiting-service CSVs resolve to one row per prospect using that ID.

The coach usually pastes a handle. A model extracts fields from the public profile, including height, weight, film links and offers. A fact-check pass classifies each field as confirmed, inferred or unknown. The board shows inferred cells in amber with a column that says what was inferred.

The coach grades film on five traits, each from one to five. A Sheet formula converts the total out of twenty-five into a tier. A watch-priority column ranks who to review first in coarse bands, and a staleness list flags entries needing an update.

What it got wrong

During a security audit, I learned that pasted text starting with an equals sign or an at sign would execute as a formula, which could have exposed the hidden tab's contents. I fixed this by escaping every cell at the storage boundary, in one place.

I had linked the coach's grades to a spilled formula by position, so reordering the staging tab could have silently shifted grades onto the wrong prospects. I rebuilt the keying so each board row has its own key.

I also built automatic reading of direct messages to the coach's account, then turned it off. The platform had moved messages to end-to-end encryption, so the API returns nothing for them. A live test proved it. The coach now pastes the sender's handle, and the tool fills in the entry from public data.

Status

The staff has used it since July 2026. It runs on free tiers, with model calls costing pennies. The source is private.