Roles scoped per site
Viewer, recruiter or admin, each limited to the sites they work on. Records outside someone's sites simply don't exist for them.
v0.3.0 Self-hosted · Cloudflare or Docker
Gooseplicant is a friendly, self-hosted applicant tracker that sits behind the form you already have. Your site keeps its form, each application flies in signed, and HR works the flock in a fast split inbox.
Features
The form stays on your site. Gooseplicant gives the people reviewing applications one calm place to read, move, rate and reply. No honking required.
Stage tabs with live counts, filters and full-text search on the left; the whole application on the right. On wide screens the drawer docks beside the list, on phones it becomes a full-screen sheet.
Openings are grouped per site with pipeline bars. Each job has a Suggested from your talent pool panel: past applicants who opted in, scored against the opening with plain-language reasons like “Applied for Forklift Operator” or “Reached Interview”.
Browse everyone who agreed to hear about future openings, search it, filter it by site, and see why each person fits before you reach out.
Drop in the application emails (.msg, .eml) and PDFs piling up in a shared mailbox. They are read in your browser, filed by location, and shown to you for a quick review before anything is uploaded.
Meet Gosling
Gosling is Gooseplicant's Lite edition: a tidy file cabinet of everyone who applied, sorted by location, then by position. Open a folder, find the person, read the resume, move them if they landed in the wrong place, and zip up whatever you need to hand over.
Run it alongside Gooseplicant for colleagues who only need to look things up, or on its own when that's all you want. Same data, same database, so outgrowing Gosling is one setting.
| Feature | GooseplicantEDITION=full |
GoslingEDITION=lite |
|---|---|---|
| What it is | The full applicant tracker | A file browser for applicants |
| Where it lives | HR app at /ats/, Gosling alongside at /ats/lite/ | /ats/lite/ (/ats/ redirects there) |
| Folders by location and position | Yes, in Gosling | Yes |
| Resume preview and download | Yes | Yes |
| Move between locations | Yes | Yes |
| Import old emails and PDFs | Yes | Yes |
| Zip export | Yes | Yes |
| Your website form posts to it | Yes | Yes |
| Roles, masked sensitive answers, audit log, retention | Yes | Yes |
| Pipeline stages, ratings, notes | Yes | No |
| Jobs and the talent pool | Yes | No |
| Email applicants, notify HR | Yes | No |
| Upgrade | You're already there | Set EDITION=full, keep every record |
Built for trust
Viewer, recruiter or admin, each limited to the sites they work on. Records outside someone's sites simply don't exist for them.
Criminal history, work authorization and any fields you choose stay hidden until a recruiter reveals them, and every reveal is logged.
Views, reveals, downloads, exports, imports, moves and changes are recorded with who and when. It stores ids and emails, never applicant answers.
Inactive candidates are purged automatically after a set number of months (longer for the talent pool, hired people kept). Admins can erase a person on request.
Audit, retention, talent pool, candidate email and HR notifications are each optional. Stages, sites, templates, sensitive fields, users and theme change without a redeploy.
Press ? for the full list: j/k to move through applications, g i for the inbox, e to email, n for a note, / to search.
Comfortable everywhere
Everyone picks light or dark and their own row density. On a phone the inbox and drawer become a focused, thumb-friendly flow, so a quick review between interviews actually works. Strings are i18n-ready.



Runs where you want
The same core runs as a Cloudflare Worker or as a single Node.js process. Your data stays in your account or on your server.
| Concern | Cloudflare Workers | Self-hosted (Node.js / Docker) |
|---|---|---|
| Database | D1 | SQLite file (node:sqlite) |
| Files | R2 | Local disk |
| Sign-in | Cloudflare Access (e.g. Microsoft 365 SSO) | Any auth proxy that passes a verified email header |
| Microsoft Graph | SMTP or Microsoft Graph | |
| Scheduler | Cron Trigger | In-process interval |
How it connects
After your site validates a submission, its server sends a signed copy to Gooseplicant. The ingest endpoint needs no user login; the signature is the credential.
/ats/ingest with an HMAC signature. Retries are safe.FAQ
No. Your website stays the source of the form. After it validates a submission, its server posts a signed copy to Gooseplicant. See Connect a form.
In your infrastructure: a SQLite database and a files folder on your server (Node.js or Docker), or D1 and R2 in your own Cloudflare account. This website only hosts downloads and documentation; it never runs Gooseplicant or sees your data.
Yes, when you host it yourself. Only your website's signed applications need to reach Gooseplicant from the internet. Set INGEST_PORT and Gooseplicant opens a second port that accepts nothing but signed submissions; publish that one (a Cloudflare Tunnel needs no open ports at all) and keep the HR app, the API and every file on your own network, reachable by staff over the LAN or a VPN such as Tailscale. See Public intake, private app.
Gooseplicant never sees passwords. On Cloudflare, Cloudflare Access signs people in (for example with Microsoft 365) and Gooseplicant verifies the Access token on every API call. Self-hosted, an authenticating reverse proxy (Authelia, oauth2-proxy, Authentik, Caddy forward_auth, …) passes the user's email plus a shared secret header. Who may do what is managed inside Gooseplicant under Users & access.
Gosling, the Gooseplicant file browser, is the Lite edition: everyone who applied, sorted by location, then position. It does the paperwork part (find someone, preview and download their resume, move them to another location, import old applications, export a zip) without stages, jobs, notes or email. Every Gooseplicant install includes it at /ats/lite/; set EDITION=lite to run only Gosling. See Meet Gosling.
Yes. Both editions share one codebase and one database, so upgrading is one setting: change EDITION=lite to EDITION=full (or remove it) and restart or redeploy. Nothing is migrated and every record stays where it is. How to switch.
Yes. Drop old application emails (Outlook .msg, .eml) or PDFs into the importer. They are read in your browser and sorted into locations by name or alias, you review the result, and only then is anything uploaded. Records keep their original dates, so retention counts from when they actually applied. Importing old applications.
Any time. Export a selection, a folder or everything as a zip: one folder per location and position, one per applicant with their files and an application.txt, plus an applicants.csv at the top. Sensitive answers are never included, and every export is audited. Zip export.
Yes, with the optional candidate email module: templates sent manually from the drawer or automatically when an application arrives or enters a stage. A separate HR notify module emails your team about new applications, per site. Mail goes out over SMTP or Microsoft Graph when self-hosted, and over Microsoft Graph on Cloudflare.
A hosted, multi-workspace tier is planned. Today you run Gooseplicant yourself, on Cloudflare or on any machine that runs Docker or Node.js.
Licensing terms TBD. Check the downloads page for the current terms.
Geese are famously good at noticing who just arrived. Also, “Gooseplicant” was too good to pass up. The software itself is quiet: no honking, no surprise emails, nothing leaves your servers unless you send it.
Download the kit, pick Docker, Node.js or Cloudflare, and connect your form. Gooseplicant and Gosling come in the same kit, and the install guides walk you through it step by step.