Job applications into a hiring sheet
Candidates append to one sheet with a Stage column your panel actually updates. An ATS for a five-person company is a spreadsheet with discipline.
The workflow
Most small companies hire a few times a year, which is not enough to justify an applicant tracking system and exactly enough to lose candidates in an inbox. The middle path: a careers page form that posts to a permanent endpoint, with every application screened and appended as a row in a hiring sheet.
The sheet does what the ATS brochure promises. Everyone on the panel sees the same list. Stages are a column. Notes are a column. Nothing is forwarded, nothing is lost in a thread, and when the role closes you have a complete record of who applied and what happened to them. Delivery is direct to Google Sheets or Excel Online with retries and a delivery log - the plumbing is on how it works.
Suggested columns
A hiring sheet earns its keep with a clear split between what candidates send and what reviewers write:
- Name, Email, Role, Location - the basics. Role matters even for a single opening; it future-proofs the sheet for the next one.
- Resume URL and Portfolio URL - links, not attachments (see the markup note below).
- Years of Experience - a dropdown in the form, so it lands as a clean sortable value rather than free text.
- Submitted At - appended with the row.
- Stage (New / Screen / Interview / Offer / Closed), Reviewer, Notes, Decision - working columns the panel fills in. The application never touches these.
The form markup
One honest constraint up front: the endpoint accepts multipart posts, but file parts are currently dropped - so do not build around a resume upload. Ask for a link instead (Drive, Dropbox, a personal site), which reviewers tend to prefer anyway:
<form action="https://sheetlinkforms.com/f/your_token" method="POST">
<input name="name" placeholder="Full name" required>
<input name="email" type="email" placeholder="Email" required>
<select name="role">
<option>Support Engineer</option>
<option>Designer</option>
</select>
<input name="resume_url" type="url" placeholder="Link to your resume" required>
<input name="portfolio_url" type="url" placeholder="Portfolio (optional)">
<input name="_slhp" tabindex="-1" autocomplete="off" style="position:absolute;left:-9999px">
<button type="submit">Apply</button>
</form>The _slhp honeypot stays hidden from humans and catches form-stuffing bots. Field names map to your column headers automatically - resume_url matches a "Resume URL" header without configuration. Redirect behavior, JSON submission, and the embed are covered in the docs.
Working the sheet
Panel discipline, in four habits:
- One filter view per role. Reviewers open their role's view and see only their candidates, sorted by Submitted At.
- Stage is the only status. If it is not in the Stage column, it did not happen. "I emailed her last week" goes in Notes with a date.
- Share with comment or edit access as appropriate - it is a normal Google Sheet, so panel collaboration is just Sheets sharing.
- Close the loop. When the role fills, set every open row to Closed. Candidates you liked but did not hire are a Filter view away next time - which is the cheapest sourcing channel there is.
If you want a nudge when applications arrive, Google Sheets' built-in notification rules can email you on changes; the form side stays simple.
Spam considerations
Application forms attract less spam than contact forms but the stakes per submission are higher - a quarantined-and-forgotten application is a person who thinks your company ignored them.
Set the strictness dial to loose here. Real applications are exactly the kind of long, link-bearing submissions (resume link, portfolio link, LinkedIn) that stricter heuristics eye suspiciously, and the honeypot plus rate limits already handle the crude bots. Whatever does get quarantined is held for one-click review, never dropped - sweep it whenever you review new candidates. On privacy: the Google connection uses the drive.file scope, meaning SheetLink can only touch sheets you explicitly picked, and submission content is stored only to screen, deliver, and retry.
FAQ
Can candidates upload a resume file?
Not currently - multipart posts are accepted but file parts are dropped. Ask for a URL field instead. A link to a Drive or Dropbox file is one click for the candidate and easier for a panel to open than an attachment forwarded four times.
Should I use one form for several roles or one per role?
One form with a Role dropdown is usually enough, and it keeps every candidate in one sheet you can filter. Separate endpoints per role make sense when different pages need different fields or different owners.
Where does the candidate data live, and who can reach it?
In your Google Sheet or Excel table - SheetLink's Google access is drive.file scoped, so it can only see the sheets you picked in the picker or created in the product, never the rest of your Drive. Submissions are stored only to screen, deliver, and retry.
How does the panel get notified of new applications?
The sheet is the system of record, and Google Sheets' native notification rules can email on new rows. Most panels find a daily look at the "Stage is empty" filter view beats per-application pings.
Related: Event registration without the SaaS · Quote requests your team can actually work · One endpoint per client site