<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Christian Rousseau</title>
    <description>The latest articles on DEV Community by Christian Rousseau (@christian_rousseau_c6a94f).</description>
    <link>https://dev.to/christian_rousseau_c6a94f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3983163%2F37d42663-951f-4bc2-8a8e-aff1431a21fe.png</url>
      <title>DEV Community: Christian Rousseau</title>
      <link>https://dev.to/christian_rousseau_c6a94f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/christian_rousseau_c6a94f"/>
    <language>en</language>
    <item>
      <title>Parsing Receipts, Invoices &amp; Bank Statements With an API (Developer Guide, 2026)</title>
      <dc:creator>Christian Rousseau</dc:creator>
      <pubDate>Thu, 18 Jun 2026 10:05:31 +0000</pubDate>
      <link>https://dev.to/christian_rousseau_c6a94f/parsing-receipts-invoices-bank-statements-with-an-api-developer-guide-2026-59hp</link>
      <guid>https://dev.to/christian_rousseau_c6a94f/parsing-receipts-invoices-bank-statements-with-an-api-developer-guide-2026-59hp</guid>
      <description>&lt;p&gt;If you're building an expense tracker, AP automation, a bookkeeping integration, or an AI agent that handles documents, you hit the same problem: receipts, invoices and bank statements arrive as PDFs and images, and your code needs structured data.&lt;/p&gt;

&lt;p&gt;Here's how to do document parsing properly in 2026 — the patterns that hold up in production, and the glue you should not hand-roll.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just call a vision LLM directly?
&lt;/h2&gt;

&lt;p&gt;You can POST an image to a vision model and ask for the fields. It mostly works — until it doesn't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You get prose or loosely-shaped JSON you still have to parse and validate.&lt;/li&gt;
&lt;li&gt;The schema drifts between calls, so downstream code breaks.&lt;/li&gt;
&lt;li&gt;No confidence signal — you can't tell a clean extraction from a hallucinated one.&lt;/li&gt;
&lt;li&gt;No handling for failed parses, retries, or per-document billing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You end up rebuilding all that glue. A purpose-built parsing API gives it to you out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good document-parsing API gives you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A stable, typed schema&lt;/strong&gt; every time: a receipt returns merchant, date, currency, subtotal, tax[], total, category; a statement returns account metadata, period, and transactions[{date, description, amount, balance}].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A confidence score + needs_review flag&lt;/strong&gt;, so you auto-process high-confidence docs and route the rest to a human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation&lt;/strong&gt; (totals add up, dates normalized to ISO) before data reaches your DB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sane billing&lt;/strong&gt;: failed parses aren't charged.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integration patterns
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP API&lt;/strong&gt; — POST &lt;code&gt;image_url&lt;/code&gt; or &lt;code&gt;image_base64&lt;/code&gt;, get JSON. The 80% case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; — so an AI agent can call &lt;code&gt;parse_document&lt;/code&gt; as a tool, no glue code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;n8n / Make / Zapier&lt;/strong&gt; — a workflow node for no-code automation (Gmail attachment → parsed row → Sheet).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;x402 micropayments&lt;/strong&gt; — pay per call in USDC, no API key, for agent-to-service payments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A minimal call
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://parsedoc.wrapper-agency.com/api/demo &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"image_url": "https://example.com/receipt.jpg"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get back the same JSON shape every time, with a confidence score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production tips
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Route by confidence.&lt;/strong&gt; Auto-post docs above ~0.9; queue the rest. Don't trust silent extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate before you store.&lt;/strong&gt; subtotal + tax = total; sum(line_items) = subtotal. Reject mismatches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedupe&lt;/strong&gt; invoices on vendor + invoice_number so retries don't double-record.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep documents out of logs&lt;/strong&gt; — for financial data, prefer a service that processes in memory and stores nothing.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where ParseDoc fits
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;&lt;a href="https://parsedoc.wrapper-agency.com" rel="noopener noreferrer"&gt;ParseDoc&lt;/a&gt;&lt;/strong&gt; around exactly this: a stable JSON schema for receipts, invoices and bank statements, with confidence scoring, an OpenAPI spec, an MCP server (&lt;code&gt;parsedoc-mcp&lt;/code&gt;), an n8n node (&lt;code&gt;n8n-nodes-parsedoc&lt;/code&gt;), and x402 pay-per-call. Free tier (10 pages/day) to test, nothing stored, failed parses never billed. Disclosure: it's mine. Whatever you pick, the principles above are what separate a demo from something you can run in production.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Extract Invoice Data Into a Spreadsheet for Accounts Payable (2026)</title>
      <dc:creator>Christian Rousseau</dc:creator>
      <pubDate>Mon, 15 Jun 2026 21:28:09 +0000</pubDate>
      <link>https://dev.to/christian_rousseau_c6a94f/how-to-extract-invoice-data-into-a-spreadsheet-for-accounts-payable-2026-2m3</link>
      <guid>https://dev.to/christian_rousseau_c6a94f/how-to-extract-invoice-data-into-a-spreadsheet-for-accounts-payable-2026-2m3</guid>
      <description>&lt;p&gt;If you handle accounts payable, you know the grind: supplier invoices arrive as PDFs (or worse, scans), and someone has to retype vendor, invoice number, date, amount and tax into your accounting system or a spreadsheet. A handful is annoying; hundreds a month is a full-time data-entry job with errors baked in.&lt;/p&gt;

&lt;p&gt;Here's how to get invoice data into a spreadsheet (or your AP tool) reliably in 2026 — the fields that matter, the order of operations, and the checks that stop bad data from reaching your books.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fields AP actually needs
&lt;/h2&gt;

&lt;p&gt;For each invoice, capture at minimum:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vendor&lt;/strong&gt; — the supplier name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoice number&lt;/strong&gt; — the supplier's reference. Vendor + invoice number = your dedupe key; keep both so you never pay the same invoice twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invoice date&lt;/strong&gt; and &lt;strong&gt;due date&lt;/strong&gt; — the due date drives your payment run, so capture it even when it's only implied by terms ("Net 30").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subtotal, Tax, Total&lt;/strong&gt; — keep tax separate for VAT/GST reclaim and correct posting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Line items&lt;/strong&gt; (optional) — description, quantity, amount per line, only if you need item-level detail for inventory or job costing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The order of operations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Header-level first.&lt;/strong&gt; Most AP teams post at header level (vendor / date / number / total) and only itemize when they must. Don't capture line items you won't use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalize the date.&lt;/strong&gt; Pick one format (YYYY-MM-DD) so sorting and import don't choke.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate the math.&lt;/strong&gt; Sum of line items should equal the subtotal; subtotal + tax should equal the total. If it doesn't, the extraction missed something — fix it before it hits the ledger. At scale, build this check in: extraction at scale means errors at scale without it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Getting the data out of the PDF
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistent layouts&lt;/strong&gt; (a few repeat vendors): a template-based parser works — set the zones once, reliable as long as the layout never changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Varied layouts&lt;/strong&gt; (many vendors, international, inconsistent formats): template parsers break constantly and you spend more time maintaining templates than you save. Vision-AI extraction handles arbitrary layouts far better because it reads the document, not a fixed position.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Already in an automation stack&lt;/strong&gt; (n8n, Make, Zapier): do the extraction as a workflow step so data lands in your sheet/ERP automatically instead of export-and-reupload — that's where the real time savings are.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where an AI tool fits
&lt;/h2&gt;

&lt;p&gt;I built a free one for the extraction step: &lt;strong&gt;&lt;a href="https://parsedoc.wrapper-agency.com/convert" rel="noopener noreferrer"&gt;ParseDoc&lt;/a&gt;&lt;/strong&gt; turns invoice PDFs or photos into structured data (vendor, invoice number, date, subtotal, tax, total, plus line items) as clean CSV/JSON — 10 pages/day free, nothing stored, with an HTTP API and an n8n node if you want it inside a flow. Disclosure: it's mine. Docparser (template-based) and others occupy the same space, so test 10–20 of your actual invoices before committing — extraction quality varies a lot by document type, and you want to see it on your docs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Decide your fields (header-level unless you need lines), normalize dates, and validate subtotal + tax = total before anything reaches your books. For varied layouts, vision-AI beats template parsers; for volume, wire it into your automation. Do that and AP stops being data entry and becomes a quick review.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Get Receipts Into a Spreadsheet Without Typing (2026 Guide)</title>
      <dc:creator>Christian Rousseau</dc:creator>
      <pubDate>Sun, 14 Jun 2026 21:36:07 +0000</pubDate>
      <link>https://dev.to/christian_rousseau_c6a94f/how-to-get-receipts-into-a-spreadsheet-without-typing-2026-guide-42i1</link>
      <guid>https://dev.to/christian_rousseau_c6a94f/how-to-get-receipts-into-a-spreadsheet-without-typing-2026-guide-42i1</guid>
      <description>&lt;p&gt;Every freelancer, bookkeeper and small-business owner eventually hits the same wall: a pile of receipts, and a spreadsheet that needs every line typed in by hand. It's slow, error-prone, and exactly the work nobody wants to do at 11pm before a tax deadline.&lt;/p&gt;

&lt;p&gt;This guide covers the practical ways to get receipt data into Excel or Google Sheets in 2026 — what to try first, the fields that actually matter, and how to keep the result clean enough to hand to an accountant.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fields you actually need
&lt;/h2&gt;

&lt;p&gt;Before you capture anything, decide your columns. For most expense and bookkeeping work, the useful set is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Date&lt;/strong&gt; — normalized (YYYY-MM-DD sorts correctly).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merchant&lt;/strong&gt; — who you paid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subtotal, Tax, Total&lt;/strong&gt; — keep tax &lt;em&gt;separate&lt;/em&gt;; you need it for VAT/GST reclaim and to see the deductible portion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt; — meals, travel, software, office… so a pivot table writes your summary for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Currency&lt;/strong&gt; — essential if you travel or buy from abroad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A spreadsheet with those columns is something an accountant can actually use. A photo in your camera roll is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 1: Use a native export when one exists
&lt;/h2&gt;

&lt;p&gt;Some receipts you never need to retype, because the source already has the data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon&lt;/strong&gt; — Order History Reports export your orders to CSV.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uber / Lyft&lt;/strong&gt; — trip history can be downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card statements&lt;/strong&gt; — your bank or issuer usually offers a CSV/QFX export of transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The catch: these only cover &lt;em&gt;your own&lt;/em&gt; account, and a statement line ("AMZN $43.38") doesn't tell you &lt;em&gt;what&lt;/em&gt; you bought or how much tax you paid. For anything that arrives as a paper slip, an emailed PDF, or a photo, you still have to extract it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 2: Type it by hand (and why to avoid it)
&lt;/h2&gt;

&lt;p&gt;Manual entry is fine for five receipts. For fifty, it's hours of work plus a guaranteed handful of transcription errors — a transposed total here, a wrong date there — that surface during reconciliation when they're hardest to find. If you do this monthly or for clients, it doesn't scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method 3: Vision-AI extraction (the 2026 way)
&lt;/h2&gt;

&lt;p&gt;Modern tools read a receipt the way a person does — they look at the image, find the merchant, the date, the totals and the tax, and output structured data. Unlike old template-based OCR, vision models handle crumpled paper, phone photos, foreign languages, and layouts they've never seen.&lt;/p&gt;

&lt;p&gt;The feature to look for is a &lt;strong&gt;confidence score per field&lt;/strong&gt;. Good extraction tells you &lt;em&gt;which&lt;/em&gt; receipts it wasn't sure about (the blurry ones), so you check those and trust the rest. Silent guessing is worse than an honest "needs review."&lt;/p&gt;

&lt;p&gt;A practical workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Photograph receipts as you go (faded thermal paper doesn't survive a drawer).&lt;/li&gt;
&lt;li&gt;Batch-convert them to one CSV.&lt;/li&gt;
&lt;li&gt;Sort by confidence; eyeball the low-confidence rows against the originals.&lt;/li&gt;
&lt;li&gt;Add an FX-rate column if you have multiple currencies.&lt;/li&gt;
&lt;li&gt;Pivot by category for your report.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to try this without installing or signing up for anything, I built a free tool for exactly this step — &lt;strong&gt;&lt;a href="https://parsedoc.wrapper-agency.com/convert" rel="noopener noreferrer"&gt;ParseDoc&lt;/a&gt;&lt;/strong&gt; turns receipt photos or PDFs into a clean CSV (merchant, date, subtotal, tax, total, category, confidence), 10 pages a day free, nothing stored. Disclosure: it's mine. There are other solid options (Veryfi, Dext and others occupy the same space), so run a handful of your real receipts through a few and see which output is cleanest before committing.&lt;/p&gt;

&lt;h2&gt;
  
  
  For teams and automation
&lt;/h2&gt;

&lt;p&gt;If receipts flow through email or a shared inbox, you can skip the manual step entirely: an automation (n8n, Make, Zapier) can watch the inbox, extract each attachment, and append a row to your sheet or accounting tool. That turns "month-end receipt panic" into a background process you never think about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Decide your columns, prefer a native export when the source offers one, and for everything else use vision-AI extraction with a confidence check — then reconcile before you trust the file. Do that and a job that used to eat an evening becomes a few minutes, with numbers your accountant won't bounce back.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to Convert Bank Statement PDFs to CSV for QuickBooks &amp; Xero (2026)</title>
      <dc:creator>Christian Rousseau</dc:creator>
      <pubDate>Sat, 13 Jun 2026 20:36:19 +0000</pubDate>
      <link>https://dev.to/christian_rousseau_c6a94f/how-to-convert-bank-statement-pdfs-to-csv-for-quickbooks-xero-2026-3kcl</link>
      <guid>https://dev.to/christian_rousseau_c6a94f/how-to-convert-bank-statement-pdfs-to-csv-for-quickbooks-xero-2026-3kcl</guid>
      <description>&lt;p&gt;If you've ever tried to import a bank statement into QuickBooks Online or Xero, you already know the dirty secret of bookkeeping: the bank gives you a PDF, and your accounting software wants a CSV. Between those two formats lies an afternoon of copy-pasting, broken columns, and reconciliation errors that don't show up until month-end.&lt;/p&gt;

&lt;p&gt;This guide walks through the right order of operations — what to try first, what actually breaks, and the format details QuickBooks and Xero quietly expect. It's written for bookkeepers and small-business owners who just want clean transactions in their ledger without drama.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why PDFs break (and why it's not your fault)
&lt;/h2&gt;

&lt;p&gt;A PDF is a &lt;em&gt;layout&lt;/em&gt; format, not a &lt;em&gt;data&lt;/em&gt; format. It describes where ink goes on a page, not what a column means. When you open a statement, your eye groups the date, description, and amount into a tidy row. The file underneath has no idea those things belong together.&lt;/p&gt;

&lt;p&gt;There are two flavors of PDF, and they fail differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text-based PDFs&lt;/strong&gt; (generated by the bank's system) contain selectable text. Copy-paste &lt;em&gt;sometimes&lt;/em&gt; works, but columns collapse, multi-line descriptions split, and negative amounts lose their parentheses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scanned or image PDFs&lt;/strong&gt; (a photo of a paper statement, or a "print to PDF" of a scan) contain no text at all — just pixels. Copy-paste gives you nothing. You need OCR (optical character recognition) to read them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of that, every bank lays out its statement differently. Some put debits and credits in separate columns; some use one signed column; some bury the running balance on the right; some wrap long merchant names across two lines. A converter that works perfectly on Chase may mangle a Wells Fargo or a European IBAN statement. This is why "just export to Excel" rarely works on the first try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Try the bank's native export first — always
&lt;/h2&gt;

&lt;p&gt;Before you convert anything, log into your online banking and look for a download option. Most banks offer one or more of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CSV&lt;/strong&gt; — comma-separated values, the cleanest option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QFX / OFX&lt;/strong&gt; — Quicken/Open Financial Exchange, designed specifically for accounting import.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QBO&lt;/strong&gt; — a QuickBooks-flavored variant of OFX (Web Connect).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your bank offers QFX or QBO, &lt;strong&gt;use it&lt;/strong&gt;. These formats carry transaction data as structured fields, so QuickBooks and Xero import them directly with category mapping and far fewer errors than a CSV. QFX even includes a unique transaction ID that helps your software avoid creating duplicates.&lt;/p&gt;

&lt;p&gt;A few practical notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native exports usually only go back 90 days to 24 months. For older history, the PDF may be your only source.&lt;/li&gt;
&lt;li&gt;Download the &lt;strong&gt;full date range&lt;/strong&gt; in one file when you can. Splitting by month invites gaps and double-counted edge transactions.&lt;/li&gt;
&lt;li&gt;If you only see PDF and Excel options, grab the PDF — it's the most faithful record — and plan to convert it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The PDF-to-CSV path exists because native export &lt;em&gt;isn't always available&lt;/em&gt;: closed accounts, old statements, foreign banks, or institutions that simply never built the feature. That's where a converter earns its keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Understand the 3-column format QBO and Xero expect
&lt;/h2&gt;

&lt;p&gt;Both QuickBooks Online and Xero accept a simple CSV for bank transactions, and both are happiest with a &lt;strong&gt;three-column&lt;/strong&gt; structure:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-04&lt;/td&gt;
&lt;td&gt;COFFEE ROASTERS LLC&lt;/td&gt;
&lt;td&gt;-4.75&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026-01-05&lt;/td&gt;
&lt;td&gt;CLIENT PAYMENT — INV 1042&lt;/td&gt;
&lt;td&gt;1,200.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's the core. A few rules make or break the import:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Date format consistency.&lt;/strong&gt; Pick one format (&lt;code&gt;YYYY-MM-DD&lt;/code&gt; is safest) and use it for every row. Mixing &lt;code&gt;01/04/26&lt;/code&gt; and &lt;code&gt;Jan 4 2026&lt;/code&gt; will cause the importer to reject rows or misread the month/day order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One header row, no blank rows, no summary lines.&lt;/strong&gt; Delete the "Opening Balance," "Total Debits," and "Page 2 of 4" junk that statements love to include. The importer treats every row as a transaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No currency symbols or stray text in the Amount column.&lt;/strong&gt; &lt;code&gt;$1,200.00&lt;/code&gt; should become &lt;code&gt;1200.00&lt;/code&gt;. Thousands separators (&lt;code&gt;1,200&lt;/code&gt;) confuse some importers — strip them if you hit errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Xero supports a &lt;strong&gt;four-column&lt;/strong&gt; variant too, splitting money into separate Debit and Credit columns instead of one signed Amount. QuickBooks Online supports both 3-column and 4-column layouts during its CSV import wizard. Either is fine — just be consistent within a single file, and know which one you're producing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Watch the signed-amount gotcha
&lt;/h2&gt;

&lt;p&gt;This is the single most common reason an import "works" but the books are wrong.&lt;/p&gt;

&lt;p&gt;In the three-column format, &lt;strong&gt;money out must be negative and money in must be positive.&lt;/strong&gt; A $50 purchase is &lt;code&gt;-50.00&lt;/code&gt;. A $200 deposit is &lt;code&gt;200.00&lt;/code&gt;. Get the sign backwards and your software will record expenses as income — your bank balance will still look plausible, but every category is inverted.&lt;/p&gt;

&lt;p&gt;Where it goes wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parentheses.&lt;/strong&gt; Many statements show debits as &lt;code&gt;(50.00)&lt;/code&gt; rather than &lt;code&gt;-50.00&lt;/code&gt;. Accounting convention reads parentheses as negative; a naive converter reads them as the number &lt;code&gt;50&lt;/code&gt;. Confirm those become negatives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate debit/credit columns.&lt;/strong&gt; If your statement has two money columns and you're flattening to one signed Amount, the debit column must be negated and the credit column kept positive. Mixing them up flips everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refunds and reversals.&lt;/strong&gt; A refund is money &lt;em&gt;in&lt;/em&gt; (positive) even though it sits in a column full of purchases. Spot-check a few.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use the four-column (Debit/Credit) format instead, you sidestep the sign question — but then make sure no amount accidentally lands in both columns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Reconcile the balance before you import
&lt;/h2&gt;

&lt;p&gt;Never trust a converted file until it ties out. This one check catches almost every error — dropped rows, doubled rows, sign flips, OCR misreads:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Opening balance + sum of all transaction amounts = closing balance.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Take the opening balance printed on the statement, add the total of your Amount column (negatives included), and confirm it equals the closing balance on the statement. If it matches to the cent, your conversion is sound. If it's off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Off by one transaction's value&lt;/strong&gt; → a row was dropped or duplicated. Find it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Off by exactly 2× a transaction&lt;/strong&gt; → a sign is flipped (a &lt;code&gt;-50&lt;/code&gt; that should be &lt;code&gt;+50&lt;/code&gt; moves the total by 100).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Off by a round, repeating amount&lt;/strong&gt; → a thousands separator or currency symbol got misparsed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many statements also print a running balance per line. If yours does, keep it during QA: each row's running balance should equal the previous row's balance plus the current amount. That makes a bad row obvious at a glance. You can drop the running-balance column before importing — QuickBooks and Xero don't need it — but it's the best debugging tool you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Where an AI converter fits
&lt;/h2&gt;

&lt;p&gt;For text-based PDFs from a major bank, free desktop tools or the bank's own export will often do. The pain shows up with &lt;strong&gt;scanned statements, photos, foreign-bank layouts, or odd column structures&lt;/strong&gt; — exactly the cases that need OCR plus an understanding of what each column &lt;em&gt;means&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is where vision-AI converters help. Instead of relying on fixed templates per bank, they read the page the way a person would: identifying the date, the description, the signed amount, and the running balance regardless of layout or language, then outputting clean CSV or JSON.&lt;/p&gt;

&lt;p&gt;If you want to test the approach without signing up for anything, &lt;strong&gt;&lt;a href="https://parsedoc.wrapper-agency.com/bank-statement-to-csv" rel="noopener noreferrer"&gt;ParseDoc&lt;/a&gt;&lt;/strong&gt; offers a free tool — 10 pages a day, no account, and nothing is stored (files are processed in memory and discarded). It handles any bank layout and outputs the date, description, signed amount, and running balance ready for QuickBooks, Xero, Excel, or Google Sheets. For higher volume there are paid plans, an n8n node, and an API, but the free tier is enough to convert a statement or two and check it against the reconciliation test above. It's one option among several — DocuClipper, MoneyThumb, and others occupy the same space — so try a sample page and see whether the output ties out before committing to any tool.&lt;/p&gt;

&lt;p&gt;Whatever you use, the workflow doesn't change: &lt;strong&gt;native export first, three-column format, fix the signs, reconcile the balance, then import.&lt;/strong&gt; Do those four things and a task that used to eat an afternoon becomes a five-minute job — with books you can actually trust.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
