# Run your monthly Gusto contractor payments in one sitting

> Match your timesheet against every active contractor, catch the problem rows before payday, then pay only what you approve and sync the sheet back.

- Workflow type: app
- Services: Gusto, Google Sheets
- Categories: Finance, Operations
- Published: 2026-08-24

## What it does

- Builds one table of every active contractor beside this period's hours and amounts from the timesheet spreadsheet your team already keeps, plus how each person gets paid and when they were last paid.
- A Reconcile button hands the period to a background assistant that checks the sheet against your contractor records and writes what it found onto each row: name mismatches, duplicate rows, people on the sheet who are not set up to be paid, and amounts well above what that person normally bills.
- You tick the rows to pay, see the exact total before anything moves, and confirm once. Each payment is created and then funded, with its own status per person so you always know what actually went out.
- After payment the app writes the paid status and payment date back into the timesheet and locks those rows, so the sheet and your payroll records never drift apart and nobody gets paid twice.

## What you'll need

- A Gusto account with contractors already set up, and an admin who is allowed to run contractor payments
- The Google Sheet your team already uses to log contractor hours and amounts for each period
- Columns in that sheet for contractor name, hours, and amount, plus two spare columns the app can use for paid status and payment date
- A company bank account connected in Gusto, since confirming a run moves real money

## Prompt

Build me an app that the ops or bookkeeping person opens once a period to actually run our contractor payments in Gusto, using the Google Sheet timesheet the team already fills in as the input. It should replace the spreadsheet plus Gusto tab shuffling with one reviewed, auditable pay run.

Settings the app stores and lets the user edit: the Gusto company, the Google Sheets spreadsheet ID and tab, the A1 range that holds the timesheet rows, which columns carry contractor name, hours, and amount for the period, which two columns the app may write paid status and payment date into, the pay period start and end dates, how many months of payment history feed the trailing average (default six), and the spike threshold as a percentage above a contractor's own trailing average (default 50 percent).

Main screen is a pay run table for the selected period, one row per active contractor. Load the roster with Gusto List Contractors filtered to active and not dismissed (paginate until complete). For each contractor call Get Contractor Payment Method for how they get paid, and Get Contractor Onboarding Status for whether they are finished onboarding. Call List Contractor Payments across the trailing history window once and group it by contractor to get the last payment date, the last payment amount, and the trailing average per period. Read the timesheet with Google Sheets Get Values over the configured range and match sheet rows to contractors so each row shows this period's hours and amount beside the Gusto record. Columns: select checkbox, contractor name and whether they are an individual or a business, wage type, hours this period, amount this period, payment method, last paid date, trailing average, reconcile findings, and row status. Sort so anything with a finding or a blocker floats to the top.

Gusto returns money and hours as decimal strings, so do all summing and averaging with decimal arithmetic and never with floating point. Render amounts as currency with two decimals.

Anyone who cannot legally be paid yet is marked not payable and their checkbox is disabled, with the reason shown in place: onboarding not complete per Get Contractor Onboarding Status, or no payment method on file per Get Contractor Payment Method. Optionally use List Contractor Forms to show whether their tax forms are on file as part of that same readiness signal.

Add a Reconcile button that kicks off a background agent for the selected period. The agent takes the sheet rows and the Gusto contractor records and matches them, then writes its findings back onto each row so the table renders them as badges with a short explanation. It should flag: name mismatches where a sheet name is close to but not the same as the Gusto record, duplicate sheet rows for the same person in one period, contractors with no payment method on file, people on the sheet who do not exist in Gusto at all, contractors in Gusto with no sheet row this period, and any amount that is more than the configured percentage above that contractor's own trailing average. Findings persist against the period so they are still there when the user reopens the app, and re-running Reconcile replaces the previous findings for that period. Show when the last reconcile ran and let the user dismiss an individual finding with a note if they have checked it.

The user ticks the rows they want to pay. As they select, show a running count and total in a sticky summary bar. A Preview button calls Gusto Preview Contractor Payments for the selected rows and shows the dry run total, per contractor amounts, and any warnings Gusto returns, without creating anything. Nothing moves money until the user then explicitly confirms the reviewed total in a confirmation step that restates the number of contractors and the exact total they are about to send.

On confirm, process each selected row one at a time: Create Contractor Payment, then Fund Contractor Payment for the payment that was created. Treat these as two distinct states, because a payment can exist without being funded. Each row carries its own status through pending, created but not funded, funded, and failed, and the UI shows per row state rather than one global success message. If a Gusto validation error comes back for a contractor, show that error message inline against that contractor's row and keep going with the rest of the run. A row stuck at created but not funded gets a Retry funding action so the user does not create a second payment for the same person. For funded rows, offer a link to the receipt via Get Contractor Payment Receipt.

After a row funds successfully, write back to the timesheet with Google Sheets Update Values, setting the paid status and the payment date on that contractor's sheet row for the period. Rows already marked paid for the period, whether by this app or by someone editing the sheet, load in a locked state: checkbox disabled, a Paid badge, and the payment date visible, so the same period can never be paid twice. Show a small banner if the sheet was edited since the last load, with a Refresh action that re-reads the range.

Also give the run a history view listing previous periods with their totals, how many contractors were paid, and any rows that ended in a failed or unfunded state, so an unfinished run is easy to find and close out later.

## How to customize

- Set the percentage jump that counts as unusual compared with a contractor's own recent average, and how many months of history feed that average
- Point the app at a different sheet tab, period range, or column layout when your timesheet changes
- Decide what gets written back to the sheet after payment, and whether large runs need a second person to confirm the total

## FAQ

### Can this pay someone by accident?

No. Nothing moves money until you tick specific rows, look at the reviewed total, and confirm it. Rows already marked paid for the period are locked and cannot be selected again, so a second run in the same month will not double pay anyone.

### What happens if one contractor's details are wrong?

That person's row shows the exact problem in place, for example a missing payment method or an address issue, and the rest of the run continues. You fix the one contractor and pay them on their own without redoing the whole batch.

### Our timesheet has its own layout. Will it still work?

Yes. You tell the app which sheet, which tab, and which columns hold the contractor name, hours, and amount for the period. The app reads from there and writes the paid status back into the columns you point it at.

### What if someone is on the timesheet but not in Gusto?

The reconcile step flags them as a sheet only row so you can see it before payday. Same in reverse: contractors who are still finishing onboarding or have no payment method on file are marked as not payable yet and cannot be selected.

### Do I still need to open Gusto during the run?

Not for the pay run itself. You review, approve, and pay from the app, and each completed payment links back to its receipt if you or your accountant want the underlying record.

Use this prompt in General Input: https://www.generalinput.com/prompts/run-your-monthly-gusto-contractor-payments-in-one-sitting