Importing Transactions and Members from CSV
Two Importers
Nestingbird has two CSV importers, and they do different jobs:
- Transactions — your bank history. Use this if you can't or don't want to connect your bank through Plaid, or if you need to backfill history from before your connection started.
- Members — your owner list. Use this to invite everyone at once instead of adding people one at a time, optionally assigning each to their unit as you go.
Both are admin-only, and both offer a downloadable template. Start with the template — it has the exact headers and a few example rows, which is faster than getting the columns right by guesswork.
Importing Transactions
Go to Finances in the sidebar. Admins see an Upload Transactions button on the ledger — it appears when your bank isn't connected through Plaid, since a connected bank already imports transactions for you. Download the template, fill it in, and upload it. Your file needs these columns:
- Date — required. Most common formats work: 2025-01-15, 1/15/2025, or 15-Jan-25. Slash dates are read US-style, month first.
- Name — required. What the transaction was, or who it was paid to. A column headed Description works just as well.
- Amount — required. Positive for money in (assessments, deposits), negative for money out (expenses). Dollar signs and commas are fine.
- Account — required. Which bank account the row belongs to. Anything starting with "Savings" is treated as savings; everything else is treated as checking. This lets one export carry both accounts.
- Memo — optional. Any note you want carried across.
Files are limited to 10,000 rows and 5 MB. If yours is bigger, split it by year and upload the pieces.
Starting Balances
The upload form has an optional Starting Balances field for checking and savings. Enter the balance in each account just before the earliest transaction in your file. Nestingbird uses it to calculate a running balance for every row, so your ledger matches your bank statement rather than starting from zero.
You don't have to get this right on the first try. If you skip it or enter it wrong, set it later from your bank accounts screen and the whole chain is recalculated. The same is true when you upload a second file later — the running balance is rebuilt from the stored starting balance across everything, not restarted from that file.
Duplicates Are Handled for You
Nestingbird recognises a row it already has — same date, amount, name, and account — and skips it rather than double-counting. That means you can safely re-upload a file, or upload overlapping exports, without creating phantom transactions. Rows in checking and savings are compared separately, so the two halves of a transfer between your own accounts both survive.
When Some Rows Don't Import
A few unreadable rows don't sink the whole file. Everything readable is imported, and Nestingbird holds you on the import screen with a summary instead of quietly dropping you into a ledger that's missing entries. You'll see:
- How many transactions imported.
- How many were skipped as duplicates.
- How many rows couldn't be read — listed individually by row number with the reason, up to ten, then collapsed into an "and N more" line.
Fix those rows in your spreadsheet and upload the file again. The rows that already landed are recognised as duplicates on the second pass, so nothing is counted twice. Only a file where nothing could be read at all is reported as a failed import — usually a missing header row or the wrong file entirely.
What Happens After the Import
Imported transactions behave exactly like ones synced from your bank. On paid plans, AI categorization runs over them automatically. On the Community plan, a monthly statement is generated for each month your file touched, and you categorize transactions yourself. Either way, your reports and Building Score pick up the new history right away.
Importing Members
Go to the Members tab on your Dashboard and click Upload CSV. It's also offered during onboarding, when you're invited to add your members for the first time. Download the template first. The columns are:
- Name — required.
- Email — required. This is where the invitation is sent.
- Address — optional. The building address, needed if you're assigning a unit.
- Unit — optional. The unit number to assign this person to.
- Ownership % — optional. The unit's share of common interest.
- Monthly Fee — optional. The unit's assessment amount.
Leave the last four blank for people who need access but don't own a unit — a property manager, or a board member who lives elsewhere. Member imports are limited to 1,000 rows.
Importing sends each person an invitation email. They appear with an Invited badge until they accept and create their account.
Member Import Results
After the import you'll see how many people were invited and how many were skipped. Someone is skipped when they're already a member or already have a pending invitation — matched on email address, so re-running the same file is safe and won't send anyone a second invitation. Rows with a genuine problem, like a missing email, are reported back to you so you can fix and re-upload.
A Note on Ownership Percentages
Ownership percentages across all your units can't add up to more than 100%. If a row would push the building over, that row is reported back as an error and the rest of the file still imports — correct the percentage and re-upload just that person. If you'd rather pull unit numbers and percentages straight from your declaration instead of typing them, see Setting Up Your Units.