Gusto
Fetch processed payroll data from Gusto, split into net pay, tax, and other debit components.
Create a Gusto app at dev.gusto.com and complete the OAuth 2.0 flow. Save your credentials to a JSON file:
{ "client_id": "...", "client_secret": "...", "access_token": "eyJ...", "refresh_token": "...", "company_uuid": "..."}VisiGrid automatically refreshes expired access tokens and writes the updated credentials back to the file.
vgrid fetch gusto --credentials gusto-creds.json \ --from 2026-01-01 --to 2026-02-01 --out gusto.csvOptions
Section titled “Options”| Flag | Description | Default |
|---|---|---|
--from | Start date inclusive (YYYY-MM-DD) | required |
--to | End date exclusive (YYYY-MM-DD) | required |
--credentials | Path to OAuth2 JSON file | — |
--access-token | Direct access token (requires --company-uuid) | — |
--company-uuid | Gusto company UUID | — |
--out | Output CSV path | stdout |
-q / --quiet | Suppress progress messages | off |
Type mapping
Section titled “Type mapping”Each processed payroll expands into exactly 3 canonical rows:
| Row | type | Amount |
|---|---|---|
| Net pay | payroll_net | -net_pay_debit |
| Tax | payroll_tax | -tax_debit |
| Other (fees/misc) | payroll_other | -(company_debit - net_pay - tax) |
All amounts are negative (outflow from the company bank account).
Date handling
Section titled “Date handling”effective_date—check_datefrom the Gusto payrollposted_date— same aseffective_date(Gusto does not distinguish)
3-row expansion. Each payroll becomes 3 rows sharing the same group_id = payroll:{uuid}. The source_id values are payroll:{uuid}:net, payroll:{uuid}:tax, and payroll:{uuid}:other.
Date range limit. Maximum span of 366 days. VisiGrid errors if the range exceeds this.
Status filter. Only payrolls with processing_status = processed are included.
Pagination. Page-based (100 payrolls per page).
Sort order. effective_date ascending, then source_id ascending.