Import error messages and how to fix them
On this page
When an import stops, your AI passes on Pennyweight's message. Most of these messages come from uploading a CSV file directly, and the usual fix is to let your AI read the file and import the rows itself. An import that's blocked saves nothing.
Two ways to import
On the default route, your AI reads your file and sends Pennyweight the rows, converting dates and amounts first. On the direct upload, Pennyweight reads the CSV file itself. The direct upload is strict: CSV files only, at most 5 MiB, and dates must be YYYY-MM-DD unless your AI names the file's date order when it uploads. See import a CSV export.
Errors that block the import
Dates
What you'll see: a message that counts the rows that "have a date this import can't use", quotes up to five of those dates, and says "The import is blocked so no partial batch lands". Behind it, each row is flagged date must be ISO YYYY-MM-DD.
Why: the direct upload found a date not written as YYYY-MM-DD, such as 09/02/2026, and your AI didn't name the file's date order, or the date didn't fit the order it named. The upload never guesses, and one bad date blocks the whole file. If your AI sends a row with an unconverted date, Pennyweight refuses it with "use YYYY-MM-DD".
Fix: tell your AI whether the month or the day comes first. It can upload the file again with that order named, or convert the dates and import the rows itself. CSV date format errors covers this in detail.
Money in and money out can't be told apart
What you'll see: "Can't tell which rows are money in and which are money out", the reason, then "Nothing was imported". Your AI also gets the file's line numbers for up to 20 of the rows involved, counting the header as line 1.
Why: the file marks direction in more than one way, and the upload never guesses a sign. For example, only some amounts carry CR or DR, a direction column such as Transaction Type holds values other than debit, credit, DR or CR, or a signed Amount column disagrees with separate debit and credit columns.
Fix: ask your AI to import the rows itself with signed amounts, or export the file again with one consistent layout. The layouts the upload reads are in the CSV format reference.
Rows that couldn't be read
What you'll see: Could not read, then how many of the file's rows failed and up to five of the unreadable values, then "The import is blocked so nothing is silently dropped". Behind it, each row is flagged bad amount, as an amount with "both a minus sign/parentheses and a CR/DR marker", or as a row where "the line is truncated or the delimiter is wrong".
Why: an amount in a format the upload doesn't understand, an amount with both a minus sign and CR or DR, or a row with fewer columns than the date and amount need.
Fix: ask your AI to import the rows itself. Or fix the file so every row is complete and the amount is a plain signed number, such as -84.22, and upload it again.
Opening balance required
What you'll see: OPENING BALANCE REQUIRED. On the default route, the preview warns about this before your AI tries to save.
Why: the account is a manual account with no opening balance. Pennyweight won't assume it started at $0.
Fix: tell your AI what the account held at the start of the file's period, or confirm it was $0. For a credit card or loan, give the amount you owed as a positive number. Your AI sets it, then saves the import. See set or correct an opening balance.
Confirmation expired or already used
What you'll see: invalid confirm_handle. On the default route the message goes on: "it is expired/already used, or the args/rows of this commit differ from the dry_run that minted it". It can also say "no cached rows were found for this confirm_handle".
Why: every import is previewed first, and the save uses a one-time code from that preview. The code expires after 15 minutes and works for one successful save. It also stops working if the rows or other details change after the preview.
Fix: ask your AI to preview the import again, then confirm. If you're not sure the earlier save went through, ask your AI to list your recent imports first. See why your AI shows a preview before saving.
Another save is still running
What you'll see: "Another call is already committing this confirm_handle", and that this call wrote nothing.
Why: your AI sent the same save again while an earlier save of that import was still writing, usually after the first one timed out in your AI app.
Fix: wait about a minute, then ask your AI to try the same save again. If it then says the confirmation is invalid or already used, the earlier save finished. Ask your AI to list your recent imports instead of importing again.
Warnings that don't block
The preview still appears with these. Read them before you confirm.
CSV was not valid UTF-8; decoded as Windows-1252 (cp1252).The file uses an older text encoding, so non-Latin characters in merchant names may come out wrong. Save the file as UTF-8, or let your AI read it.AMBIGUOUS_SEPARATOR. An amount such as 1,234 could be a thousands group or a decimal, and the message says it was "read as a thousands group". If those amounts are decimals, ask your AI to tell the upload which character is the decimal point.BAD_HINT. Your AI asked the upload to split columns on a character it can't use, a quote or a line break. The message says it "is not a usable field delimiter", and the upload detected the separator itself.no rows in CSV. The file is empty. Check that you shared the right file.
How to fix it
- Share the file with your AI again and name the account.
- Ask it to import the rows itself and explain any message it gets.
- Read the preview, answer anything it asks, then confirm.
Read overlap-checking.csv and import its rows into my Holiday Fund account. Explain any errors you hit.
I uploaded us-mmdd.csv straight to Pennyweight for my Everyday Checking account and the import was blocked. What does the error mean? Don't import anything yet.
For the first prompt, your AI previews the import and explains that Holiday Fund needs its starting balance, or a confirmed $0, before anything can be saved. For the second, it explains that the file's dates are month first and the upload takes YYYY-MM-DD unless the date order is named, and it offers to fix that for you.
Good to know
- PDFs and screenshots. The direct upload takes CSV files only. Your AI reads other files itself; see import a PDF or screenshot statement.
- Links. The direct upload needs the file's contents, and a link to the file isn't accepted.
- Saved the wrong thing? You can undo an import. See balance looks wrong after an import.