Exporting and Importing Payees
Downloading your payee list as CSV, and adding many payees at once from a CSV file
Exporting payees
Every company role can use Export CSV on the payee list. Import CSV is available only to Admin and Payroll.
On the Payees list, Export CSV downloads payees matching the current type tab, search term, and filters across pages. Without a Bank verification filter, the export includes up to 5,000 matches. With that filter selected, it includes every matching payee across all list pages. Clear the filters to export the active roster up to that limit, or narrow them to the group you need, such as AEA contractors. The Offboarded toggle counts too: archived payees are left out unless it's on, and with it on they're the only ones exported.
The download is a .csv file (there's no PDF or Excel option here) with one row per payee:
| Column | Contents |
|---|---|
| Name | Payee's display name |
| Type | employee, loanout, contractor, or vendor |
| Union | Union code, or "Non-union" |
| Agreement | The union agreement type, if any |
| Job title | |
| Department | |
| Rate | Their current pay rate, formatted (e.g. "$2,500/week") |
| Onboarding | Onboarding status |
| Rep | "Yes" if the payee is also a representative for another payee here, named on that payee's Representation card (the same payees the list marks Rep), blank otherwise |
| Status | Active or Archived |
| Bank verification | Where the payee's bank account stands with our tax partner, for example Verified, Never received a payment, or No account. Each distinct combination of status and reason across the payee's linked accounts contributes one label, separated by semicolons. Accounts with the same status and reason share one label. |
Importing payees
Bulk-adding a roster is the main reason to use CSV import rather than adding people one at a time. On the Payees list, click Import CSV.
Getting the template
In the Import payees from CSV window, click Download template. It comes pre-filled with one example row per payee type, so the accepted format is visible at a glance rather than something you have to infer.
What the file needs
| Column | Notes |
|---|---|
type | Required. One of employee, loanout, contractor, vendor |
firstName, lastName | Required for employee and contractor rows (a person) |
businessName | Required for loan-out and vendor rows (a company) |
email | Required |
phone | Optional |
addressLine1, addressLine2, city, state, zip | Optional. addressLine2 is the apartment, suite, or unit, kept on its own line. |
department | Optional, free text |
startDate | Required. YYYY-MM-DD, or M/D/YYYY or M/D/YY as a spreadsheet saves a date (Excel saves the template's 2026-06-22 as 6/22/26). A date with slashes is read month first, and a two-digit year as Excel reads it: 00 to 29 is 2000 to 2029, and 30 to 99 is 1930 to 1999. The preview lists the start dates it read, so you can check them before you import. |
paymentMethod | check or setup_later, which is the default when blank. direct_deposit is listed as a value, but a row using it is refused in the words of the window's note under Accepted values: "A direct_deposit row can't be imported: the file has no columns for routing and account numbers. Import the payee as setup_later; their bank details are collected during finish setup." |
hasEin | Loan-out rows only. Must be yes, true, 1, or y to confirm the loan-out corporation has its own EIN — a loan-out can't be paid on an individual's SSN, so a loan-out row without this is rejected. Other payee types ignore this column. |
isForeign | Optional. yes, true, 1, or y marks a foreign payee, whose address is their own country's and isn't checked as a US one; blank means not foreign. The window notes "isForeign: yes for a foreign payee, whose address is their own country's. Payments to a foreign payee can't be processed in Greenroom yet." An employee row can't be foreign: "W-2 employees can't be marked foreign — foreign employment (NRA payroll withholding) isn't supported. Foreign payees must be loanouts, contractors, or vendors." |
At minimum, the file needs type, email, and startDate columns present — without all three, nothing can import.
Deliberately narrow scope
CSV import covers identity, contact info, start date, payment method, and whether a payee is foreign — enough to get someone into the roster. Union assignment, pay rates, bank account numbers, and documents are set per payee afterward, the same way you'd set them for anyone added by hand.
Importing the file
Drag your completed CSV onto the drop area (or click it to browse). The drop area reads ".csv files only, up to 1 MB", and one file can hold up to 1,000 rows below the header, not counting blank rows (a spreadsheet writes one for each empty row it saves). Greenroom validates every row client-side, using the exact same rules as the manual New payee form, and shows you a preview before anything is saved: how many rows are ready, how many have errors, the start dates it read (each one, up to three, or the earliest and the latest), and — for each error — which row and what's wrong. Rows are numbered as your spreadsheet numbers them, blank rows included, so "Row 9:" is the row your spreadsheet shows as 9.
A file over a limit, one that isn't saved as UTF-8, or one that can't be imported at all is refused whole, before anything is imported, and the window says what to do instead, under the drop area:
| The file | What the window says |
|---|---|
| Is larger than 1 MB | "CSV files are limited to 1 MB. Split the file and import each part." |
| Isn't saved as UTF-8: one saved as UTF-16, or one with accented letters saved some other way (Excel's plain CSV format rather than CSV UTF-8, for example) | "This CSV isn't saved as UTF-8, so some letters would import wrong. Save it as CSV UTF-8 and import it again." A plain CSV file with no accented letters imports as it is, but a UTF-16 file never does. A file over 1 MB whose first rows show this is told this rather than its size, so its parts aren't each refused again. |
| Already shows � where letters were lost (an earlier export read it the wrong way, for example) | "Some letters in this CSV were already lost: they show as �. Fix them in the file and import it again." Saving it again doesn't bring the letters back; only you can. |
| Is within 1 MB but still too large to send in one import (rare: it takes a file made mostly of quotation marks or line breaks) | "This CSV is too large to send in one import. Split the file and import each part." |
| Has more than 1,000 rows | "CSV files are limited to 1,000 rows. Split the file and import each part." A missing required column is reported before the row count. |
| Is missing a required column | "Missing required column(s): startDate. Download the template for the expected header.", naming the columns it lacks |
| Has a header but no payees under it, only blank rows or none | "This CSV has no payees under its header. Add a row for each payee, then import it again." A missing required column is reported first. |
What happens when you import
Click Import [N] payees (the button counts the rows that are ready) to bring in the valid rows. A row that fails a check, such as one whose email another active payee already uses, comes back with its row number, and the other rows still import: fix just those rows and import them again. The rows that pass are saved together, all or none. If one of them can't be saved, nothing from the file is imported, and the window names the row and the reason: "Nothing was imported. Row 9:", followed by what's wrong. If another payee was added with one of the file's emails while it was importing, the window reads "Nothing was imported. Another payee was added with an email on this file while it was importing. Import the file again." If the save fails for a reason no row explains, it reads "Nothing was imported. We couldn't save this file just now. Try again in a minute."
Besides the column rules above, the preview refuses a row whose cell holds a line break, a tab or another hidden character, such as a zero-width space, which a paste can leave in a cell that looks right ("Remove the line break, tab or other hidden character.", after the column's name), a start date that doesn't exist, such as 2026-02-30 or 2/30/2026 ("Enter a real date, as YYYY-MM-DD."), and a second row with an email already on an earlier row of the file ("email: [email] is also on row [n]. Each payee needs their own email."). A name written with a zero-width joiner or non-joiner, as some languages write names, is refused the same way: add that payee with Add payee, whose form takes it.
If Import gets no answer, because the connection dropped or the import ran past its time limit, it added either every payee that passed or none of them, and the window can't tell which. It says so, under "We couldn't confirm whether this import went through.": "Import the same file again. If the first try went through, the payees it added show as already added, and no one is added twice." Importing the file again counts the payees an earlier try added as already added, not failed: the message reads "All 575 payees were already added." when the first try went through, or "Imported 575 payees." when it didn't. A file with rows an earlier try never had reads, for example, "Imported 425 payees. 575 were already added." A save whose last step went out but whose answer was lost shows the same couldn't-confirm notice, not "Nothing was imported."
Imported payees aren't invited automatically
Payees created by CSV import are not sent a portal invitation. Review what came in, then invite each one from their own page when you're ready — the same as you'd do after adding a payee manually.
Duplicate emails
The same guard applies whether you add a payee by hand or by CSV: each email can only belong to one active payee per company. When a row's email belongs to an active payee and every column in your file says what's stored for that payee, the row is that payee, added by an earlier import of the file, and is counted as already added. Any other row whose email an active payee already uses is rejected with a message naming the payee it collides with, and so is a row whose payee has changed since that import, in the file or on their record: "[name] already uses [email] (payee [code]) — they may have been added on an earlier try. Open that payee, or use a different email." Archiving a payee frees up their email for reuse.
Next steps
See Chart of Accounts (GL Codes) for the separate chart-of-accounts import, Reports & Exporting Data for payroll and report exports, or Adding Payees for adding someone one at a time.
Document Validation
How work eligibility (Form I-9) works in Greenroom, which is an employer attestation rather than document collection, and the file rules for the documents payees do upload
Reports & Exporting Data
The five report generators on the Reports page, the paper-check registers, printing, and payees' pay statements