# Archive Typeform job applications and screen every resume

> Every hour, new applications get their resumes and portfolios saved for good, read against the role, and ranked in a Slack digest.

- Workflow type: agent
- Services: General Input Storage, Typeform, Google Sheets, Slack Bot
- Categories: HR & People, Operations
- Published: 2026-08-31

## What it does

- Checks your job application form every hour for new submissions and picks up everything each candidate uploaded.
- Saves every resume and portfolio into your own storage under a tidy folder path, so the documents survive long after the form is archived or deleted.
- Reads each resume against the role requirements you write out, then drafts a short assessment covering relevant experience, obvious gaps, and a suggested next step.
- Adds one row per candidate to your Google Sheets tracker, including where the archived file lives, and posts a Slack digest with the strongest candidates first.
- Never rejects anyone on its own. It ranks and summarizes so a person makes the call.

## What you'll need

- A Typeform account with a job application form that includes file upload questions
- A General Input storage space for the archived documents, which comes with your account
- A Google Sheets spreadsheet to use as your candidate tracker
- A Slack workspace and a channel where the hiring digest should land
- A short written description of the role and what a strong candidate looks like

## Prompt

Every hour, pull new submissions from my Typeform job application form, archive every file the candidate uploaded into General Input Storage, and hand me a screening summary. Run this on an hourly cron schedule.

Start by fetching new responses with Typeform's Retrieve Responses on my application form, filtered to submissions since the last successful run. Typeform can take up to about thirty minutes to make a brand new submission available through its API, so query with a two hour lookback window rather than an exact watermark, and then drop any response whose id you have already processed. Keep the processed response ids and the last run timestamp in workflow state so nothing is screened twice and nothing is quietly missed.

Each application carries a resume upload and an optional portfolio upload. For every file upload answer on a response, download the bytes with Typeform's Get Response File, then archive the file with General Input Storage. Ask for a presigned PUT with Presign Upload, passing the real byte size and content type, and send the bytes directly to that URL. The archived copy is the copy of record, because Typeform only holds uploaded files for as long as the form itself lives.

Name each object applications/<role>/<candidate>/<document>.<ext>, for example applications/account-manager/jane-doe/resume.pdf and applications/account-manager/jane-doe/portfolio.pdf. Slugify the role and the candidate name into lowercase hyphenated segments, stripping anything that is not a letter, number, or hyphen. Storage keys allow forward slashes only, with no leading slash, no . or .. segments, and a 1024 character cap, so always build the key from slugified parts rather than from raw form answers. If two candidates slugify to the same name, append the short Typeform response id to the candidate segment so neither file overwrites the other. Keep the original file extension. Each object can be up to 5 GB, which is plenty for a design portfolio.

Then read each resume against the role requirements below and write a short assessment, no more than a short paragraph per candidate, covering three things: the relevant experience they actually have, the obvious gaps against the requirements, and a recommended next step such as phone screen, take home, ask for missing information, or hold for a later role. Give each candidate a rank of strong, promising, or unclear, and say in one line what drove the rank. When a portfolio is attached, factor in what you can tell from it, and say plainly when you cannot open or judge it.

Role requirements: Account Manager. Three or more years managing a book of B2B accounts, ownership of renewals and expansion, clear written communication, and hands on experience with a CRM. Nice to have: agency or SaaS background and comfort with a technical product. Replace this block with the role I am actually hiring for.

Append one row per candidate to my Google Sheets candidate tracker using Append Values. Columns: submission date, candidate name, email, role, rank, one line summary, relevant experience, gaps, recommended next step, resume storage key, portfolio storage key, and the Typeform response id. Write the storage keys as plain text so anyone on the hiring team can pull the original document later, long after the form is gone.

Finish each batch with one digest posted to my hiring channel in Slack using Send a Message, strongest candidates first. Open with how many new applications came in this run, then give a short block per candidate: name, rank, one line on why, the recommended next step, and the storage key for their resume. If the batch has no new responses, post nothing at all rather than an empty update.

One firm rule: never auto-reject anyone and never email a candidate. Do not mark anyone rejected in the tracker and do not phrase the digest as a decision. Rank and summarize only, and leave the call to a person. If a resume is unreadable or a file fails to download, still create the tracker row and still list the candidate in the digest, flagged as needing manual review, rather than dropping them from the batch.

## How to customize

- Change the schedule. Hourly suits steady inbound, but once each morning is plenty for a low volume role.
- Swap in your own role requirements, or run a separate copy of this for each open position.
- Adjust the folder naming so archived files match how your team already files documents.
- Pick which Slack channel gets the digest and how much detail each candidate gets.
- Add columns to the tracker, such as source, location, or salary expectation, if your form asks for them.

## FAQ

### Will this reject candidates automatically?

No. It only ranks and summarizes. Every candidate gets a row in your tracker and a place in the digest, including the weaker fits, and no email is ever sent to an applicant. The hiring decision stays with a person.

### What happens to the uploaded files if I archive or delete the form?

Anything already copied into your storage stays there. That is the whole point of this one. Typeform holds uploaded files only as long as the form lives, so the copy in your storage becomes the copy of record for resumes and portfolios.

### How quickly do new applications show up?

It runs every hour. A brand new submission can take up to about half an hour before it is available to pull, so someone who applies at 10:55 may land in the next batch instead of the current one. Nothing gets skipped, it just arrives in the following run.

### Can I use this for more than one open role?

Yes. Run a copy per role with its own form, its own requirements, and its own folder name, so each role gets a clean set of archived files and its own digest.

### Is there a size limit on portfolios?

Each uploaded file can be up to 5 GB, which comfortably covers large design portfolios, reels, and multi page PDFs. Files move straight into storage rather than through the workflow, so big attachments do not slow anything down.

Use this prompt in General Input: https://www.generalinput.com/prompts/archive-typeform-job-applications-and-screen-every-resume