# Review desk for portal forms your team still fills in by hand

> Stage a batch of filings overnight, then approve each completed form from a screenshot before anything is ever submitted.

- Workflow type: app
- Services: Kernel, Google Sheets, Slack Bot
- Categories: Operations
- Published: 2026-08-24

## What it does

- Reads your queue of records to file from a Google Sheet, one row per filing, showing the target site and whether it is queued, prepared, awaiting review, submitted or failed, with filters by site and by owner
- Hit Prepare on a row and an assistant opens the site using your saved login, fills every field from that row, then deliberately stops before the final submit and sends back a screenshot of the completed form
- Review the filled form screenshot side by side with the original row, then approve to submit or reject with a note that sends the row back to the queue
- On approval the assistant clicks submit, captures the confirmation screen and reference number, and writes that number and a timestamp back to your sheet
- Nothing is ever submitted without a person approving the screenshot first, and a Prepare all queued button lets a whole batch be staged overnight and reviewed in one sitting

## What you'll need

- A Google Sheet with one row per record to file, including the target site, the fields to enter, an owner and a status column
- A Kernel account with a saved browser profile that is already signed in to the portals your team files into
- The web addresses of the forms your team currently fills in by hand
- A Slack workspace if you want reviewers notified when a prepared batch is waiting

## Prompt

Build me a review desk for filing records into websites that have no API: the supplier portals, registration sites and claim forms my team still types into by hand. The app is where a back office coordinator works all day, so the queue is the main screen, not a notification.

The queue view reads rows from a Google Sheet using Get Values, one row per record to file. Each row carries the target site, the field values to enter on that site, an owner, and a status of queued, prepared, awaiting review, submitted or failed. Show these as a table with the status clearly marked, and give me filters by target site and by owner so a coordinator can narrow to just their own work or just one portal. Sort so the rows that need attention, prepared and awaiting review, sit at the top.

Each row has a Prepare button that kicks off a background agent. The agent opens a Kernel browser session with Create Browser Session, attaching our saved login profile so it picks up an existing signed-in session rather than handling credentials itself. It navigates to the target form and fills every field from the row using Type Text in Browser, Click Mouse in Browser, Press Keys in Browser and Scroll in Browser, batching runs of actions with Execute Batch Computer Actions where that is faster. It must deliberately stop before the final submit button. It then takes a screenshot of the completed, unsubmitted form with Capture Browser Screenshot and returns it to the app, where it lands on the row and the status becomes awaiting review.

The review screen shows that filled-form screenshot side by side with the source row from the sheet, so the reviewer can check each typed value against the record it came from. The reviewer either approves or rejects with a note. Approving tells the agent to click the submit button, wait for the result page, and capture the confirmation screen with Capture Browser Screenshot, reading the confirmation or reference number off that page. Rejecting writes the note onto the row and sends the status back to queued so it can be corrected and prepared again.

On a successful submit, write the confirmation number and a submitted timestamp back to the sheet with Update Values, mark the row done, and keep the confirmation screenshot attached to the row as the audit trail. The confirmation screenshot is the proof a filing happened, so it should stay visible on the row after submission rather than being discarded.

The business rule I care most about is absolute: nothing is ever submitted without a human approving the screenshot first. The agent that prepares a form has no path to clicking submit on its own. Submission only happens on the approve action, on a row that already has a reviewed screenshot. Build the app so this cannot be bypassed, including by the Prepare all queued button.

Give me a Prepare all queued button that works through every queued row so a batch can be staged overnight and reviewed in one sitting the next morning. It should prepare rows one at a time, respecting the browser session limits on the account, and leave each one filled in but unsubmitted. Show progress as it goes and do not let one failing row stop the rest of the batch.

Handle the browser session lifecycle carefully, because a prepared form has to survive the gap between staging overnight and review the next morning. Give prepared sessions a generous idle timeout, and when a reviewer approves, first check the session is still alive with Get Browser Session. If it has expired, do not guess or submit blindly: mark the row so the reviewer knows it needs preparing again, and re-run the prepare step to produce a fresh filled form and screenshot for approval. Close sessions with Delete Browser Session once a row is submitted or rejected, so we are not paying for browsers nobody is using.

When a prepared batch is waiting on a reviewer, send a Slack message with the Slack Bot Send a Message operation saying how many rows are ready and which sites they are for, with a link back to the app. Send this once per batch rather than once per row, so an overnight run produces one message in the morning instead of fifty.

If the agent cannot find a field, the form has changed, or the site errors out, mark that row failed with a short reason and keep it in the queue rather than guessing at values. Failed rows should be visible in the same view with their reason, so the coordinator can fix the underlying row and prepare it again.

## How to customize

- Change which sheet columns map to which fields on each form, so you can add a new portal without rebuilding the app
- Decide who gets the Slack notification and whether it fires on every prepared batch or only above a certain size
- Adjust the status names and add your own, such as a hold status for rows that need a manager to look first
- Set how long a prepared form waits for review before the app asks you to prepare it again

## FAQ

### Can the assistant ever submit a form without me approving it?

No. That is the core rule of this app. The assistant fills every field and then stops before the final submit button, and the only thing that makes it click submit is a reviewer approving the screenshot. If nobody approves, nothing is ever filed.

### Does this work on sites that have no API at all?

Yes, that is the whole point. The assistant drives a real browser the same way a person does, so supplier portals, registration sites and claim forms that never offered a way to connect can still be filled automatically.

### How does it sign in to portals that need a username and password?

It uses a saved browser profile that is already signed in, so the assistant picks up an existing session instead of handling your credentials each time. You sign in once when you set the profile up.

### What happens if a form changes or the assistant gets stuck?

The row is marked failed and stays in the queue rather than guessing. You will see it in the queue view alongside everything else, and you can fix the row and prepare it again.

### Can I prepare a whole batch overnight and review it in the morning?

Yes. Prepare all queued works through every queued row and leaves each one filled in but unsubmitted, so a reviewer can come in the next morning and clear the whole batch in one sitting.

### Where do the screenshots live once a record is filed?

The app keeps the confirmation screenshot with the row as an audit trail, next to the reference number and the time it was submitted, so you can prove any filing happened without digging through the portal.

Use this prompt in General Input: https://www.generalinput.com/prompts/review-desk-for-portal-forms-your-team-still-fills-in-by-hand