Skip to content
← Back to Pocketbird
Every day

Finding transactions — the ledger, search and export

Read back everything you have logged: day-grouped cycles, a whole-history search with seven filters, multi-select cleanup, a colour-coded month calendar, and CSV, PDF and JSON exports.

Find it atTransactions tabLast updated · 2026-08-07
01

The list you land on

This is the half of the app you use after the money is gone. Everything already logged is here to be read back, searched, corrected in batches, or taken out as a file. None of it needs a network connection — every screen in this chapter reads your local data and redraws the moment a transaction changes anywhere else in the app.

The ledger itself shows one budget cycle at a time. Rows are grouped into cards by calendar day, and each day's header sticks to the top of the screen while you scroll through that day, carrying the date and that day's net.

  • The coloured circle on the left is the category's colour and icon. A row with no category gets a grey circle with a tag glyph instead.
  • The bold title is the first line of the note. With no note it becomes the category name; with neither it reads "Uncategorized" / "ไม่มีหมวด", or "Cash adjustment" / "ปรับยอดเงินสด" on a reconcile row.
  • A paperclip means a receipt photo is attached ("Has photo" / "มีรูปภาพ").
  • At most three tag chips show inline; the rest collapse into a single +K pill, and that pill is not tappable. With exactly four tags nothing collapses — a +1 pill would take the same room as the chip it hides.
  • Extra chips appear where they apply: a debt-kind chip on a debt payment, a "Pocket: …" / "กระเป๋า: …" chip on a row assigned to a pocket, and an "Adjustment" / "ปรับยอด" pill on a reconcile row.
  • The amount on the right is signed. Income is green; an expense stays neutral, because the minus in front of it already carries the sign.
  • "Today" / "วันนี้" and "Yesterday" / "เมื่อวาน" name the two most recent days. Every other header is the abbreviated weekday, day and month — the year is appended only when that day falls in a different year than today.
  • The figure beside the date is that day's signed net, printed in whole baht with the satang dropped, and tinted green only when it is zero or above.
  • Days are always newest-first, whatever sort you pick — the sort only decides the order inside a day.
  • A row belongs to the day of its transaction date, at local midnight — never the day you happened to log it.
  • Only personal money appears. Anything whose category — or its parent category — is a business one is partitioned off into My Shop.
  • Deleted rows never appear anywhere in this chapter.
TipAn empty cycle shows an inline "No Transactions This Cycle" / "ยังไม่มีรายการในรอบนี้" panel with the dashboard above it left intact, so you can still step to another cycle. A brand-new store with nothing in it at all gets a full-screen empty state with an "Add Transaction" / "เพิ่มรายการ" button instead.

Rows captured automatically — by voice, a scan, a slip or Smart Paste — do not drop into the day list straight away. They wait in a pinned "To Review" / "รอตรวจสอบ" inbox at the top of the ledger with a count badge.

  1. Tap a queued row to open its edit form and fix whatever was captured wrong.
  2. Or tap the ✓ at its trailing edge ("Mark as reviewed" / "ทำเครื่องหมายว่าตรวจแล้ว") to accept it as it is — the row then flows into the normal day list.
  3. With more than one row queued, a "Mark All Reviewed" / "ทำเครื่องหมายตรวจแล้วทั้งหมด" button appears in the inbox header.
Heads upQueued rows already count in every balance — the money was spent, review is only about the details. But they are held out of the day list and out of search until you review them, so a slip you scanned this morning will not turn up in a search this afternoon. They do show in the calendar and in a day's detail sheet, and the full transactions CSV from Settings marks them in a needs_review column. The inbox itself is global: neither the cycle stepper nor the tag filter ever narrows it, so nothing captured automatically can hide behind a filter.
02

Moving between pay periods

The ledger shows one cycle, so there is a flat stepper directly above the day list — ◀, the date range, ▶ — to walk through them. Cycle boundaries come from your payday (the 1st unless you changed it), plus weekend adjustment, holidays and any per-cycle override.

  1. Tap ◀ ("Previous Cycle" / "รอบก่อนหน้า") to step back a cycle, or ▶ ("Next Cycle" / "รอบถัดไป") to step forward.
  2. Read the range text as you go: it turns the accent colour whenever you are not on the current cycle, so a time-travelled ledger is obvious at a glance.
  3. Tap "Back to Current" / "กลับไปรอบปัจจุบัน" — the pill that appears between the arrows once you have stepped away — to jump home.
  • Stepping the cycle changes only the list. The Safe-to-Spend hero, the spend-pace warnings and the balance always describe the live current cycle.
  • The stepper is not clamped here: you can walk forward into empty future cycles and backwards past your first-ever transaction. Cycle Summary, a different screen, does clamp — back at your earliest dated cycle and forward at the current one.
  • A small calendar-with-clock glyph ("Start date adjusted" / "ปรับวันเริ่มแล้ว") marks a cycle whose start date you have overridden by hand.
  • Where you are in time is deliberately not counted as a filter for the toolbar's badge dot — the visible stepper is the signal.
Hidden feature
The date range between the arrows is a menu
Do thisTransactions tab → tap the date-range text between ◀ and ▶ (a small up-down chevron hints at it)
It opens "Adjust Cycle Start" / "ปรับวันเริ่มรอบ" — or "Edit Cycle Start" / "แก้วันเริ่มรอบ" when this cycle already has an override — and it edits the cycle you are currently looking at, not the current one. So you can step back to the month your salary landed late and fix that cycle alone. The menu only exists in list mode; the calendar hides the stepper.
03

Sort order and the tag filter

One toolbar icon carries both. Tap the three-descending-lines icon at the top right of the Transactions tab — VoiceOver calls it "Sort & Filter" / "เรียงและกรอง" — and a popover opens with sorting on top and your tags underneath.

"Transaction Date" / "วันที่ทำรายการ"
The default. Newest transaction date first, with ties broken by whichever row was created most recently.
"Last Created" / "สร้างล่าสุด"
Most recently logged first, with ties broken by newest date. Useful right after back-dating several entries in one sitting, when you want to see what you just typed.
  • The sort choice survives a relaunch, but it is device-local — it does not sync to your other devices.
  • Day sections stay newest-day-first regardless; the sort only reorders rows inside a day.
  • Sort has no effect on the calendar, on the search screen, or on the category and tag drill-ins.
  • A non-default sort, or an active tag filter, lights a dot on the toolbar icon; VoiceOver reads "Sort or filters active" / "มีการเรียงหรือกรองอยู่".
  1. Under "Filter by Tag" / "กรองตามแท็ก", tap tag chips to add them to the filter. Tapping a selected chip removes it again.
  2. Once one tag is selected a "Match" / "ตรงกับ" picker appears: "Any" / "ใดก็ได้" is the default and needs the row to carry at least one of them, "All" / "ทั้งหมด" needs it to carry every one.
  3. Tap the leading "All" / "ทั้งหมด" chip to clear the whole tag filter, then tap outside the popover to dismiss it.
TipThe tag half of the popover is hidden entirely until you have tags. Once you have twelve or more, the chip area becomes a fixed-height scrolling box rather than growing the popover off the screen. The Any/All picker disappears and resets the moment you deselect the last tag.
Heads upThis tag filter is session state — it is not saved, and it is rebuilt empty when the screen is. It also applies only to the day list: the calendar ignores it, and the search screen has its own, much richer filters.
Hidden feature
Tap a tag chip on any row to see everything carrying that tag
Do thisTap one of the small tag chips inside a transaction row — on the ledger, in search results, or in the calendar's day sheet
It pushes that tag's transactions for the current cycle, day-grouped like the ledger. Where you tapped decides where it pushes, so Back always returns you to exactly where you were. The +K overflow pill is not a door — only the visible chips are tappable.
05

The seven filters

Inside search, the filter icon at the top right opens "Filters" / "ตัวกรอง" — seven facets that all combine with AND, on top of whatever you typed. The icon fills in once anything is set, but it carries no number, so the chip band under the search field is how you read what is active.

  1. Tap the filter icon in search and set any facets. The results behind the sheet update live as you type and toggle, so you can watch the list narrow.
  2. Tap "Done" / "เสร็จ" to close, or "Reset" / "รีเซ็ต" at the top left to clear every facet at once — it stays disabled while nothing is set.
  3. Back on the results, tap a chip in the band to drop that one facet, or "Clear All" / "ล้างทั้งหมด" to drop them all.
"Type" / "ประเภท"
Two chips, "Income" / "รายรับ" and "Expense" / "รายจ่าย". Multi-select, and selecting neither lets both through.
"Amount" / "จำนวนเงิน"
"Minimum" / "ต่ำสุด" and "Maximum" / "สูงสุด" money fields, inclusive, tested against the stored positive amount. Leave one blank for unbounded on that side. An inverted range matches nothing.
"Date Range" / "ช่วงวันที่"
A "Filter by date" / "กรองตามวันที่" toggle, off by default, then "From" / "จาก" and "To" / "ไปยัง". Bounds are day-aligned — start of day to end of day — so whole calendar days are always included, and "To" cannot be moved before "From".
"Categories" / "หมวดหมู่"
A searchable checklist matched by exact category. Subcategories are listed individually, so to sweep a whole branch tick the parent and its children. A row with no category never passes a category filter, and business categories are never offered here.
"Tags" / "แท็ก"
Chips plus the same "Match" / "ตรงกับ" Any-or-All rule as the ledger filter. The Match picker appears with the first tag and resets when the last one is removed.
"Counterparties" / "คู่ค้า"
A searchable checklist built only from people actually used in your ledger, kept by id together with the name stored on the row — so someone you have since deleted still resolves. A row with no counterparty never passes.
"Trips" / "ทริป"
A searchable checklist of every live trip, ordered the way the hub orders them — active, then upcoming, then past. Deliberately not derived from the ledger, so you can filter on a trip that has nothing tagged to it yet. The whole section is hidden when you have no trips.
  • Facets AND together; values inside one facet OR together — except Tags in "All" mode.
  • Chip labels stay readable: amounts print in whole baht ("฿100–฿500", "≥ ฿100", "≤ ฿500") and dates print like "7 Jun 26 – 30 Jun 26" in the app language's calendar, so a Thai interface shows Buddhist-era years. Removing the amount or the date chip clears both of its bounds at once.
  • The chip band is drawn above every state, including the no-match one, so an over-narrow filter is always visible and always clearable.
  • If a name cannot be resolved, the chip still appears with a generic label ("Category" / "หมวดหมู่", "Tag" / "แท็ก", "Counterparty" / "คู่ค้า", "Trip" / "ทริป") so you can always clear it.
  • Filters are per-visit. Closing the search screen discards them.
Hidden feature
The filters work with nothing typed at all
Do thisOpen search, tap the filter icon, set a facet, close the sheet — without typing a single character
Instead of the Suggestions and Recent state you get your whole ledger narrowed by the facets alone. That is how you ask a question that has no keyword: every expense over ฿1,000, everything tagged to the Japan trip, everything you paid one person between two dates.
Hidden feature
A calculator hides in the Minimum and Maximum fields
Do thisFilters sheet → tap into "Minimum" or "Maximum" → tap the ± button that appears at the field's right edge
An in-app keypad pops over with digits, + − × ÷, brackets, %, ⌫ and =, a live expression line and a dim running total. "=" — or tapping outside — writes the result back into the field. A malformed expression shows "Check the expression" / "ตรวจสอบสิ่งที่พิมพ์อีกครั้ง" and keeps what you typed instead of filtering on a wrong number.
Hidden feature
Every checklist in the Filters sheet has its own search box
Do thisFilters sheet → the "Categories", "Counterparties" or "Trips" section → type in the magnifying-glass field at the top of it
It narrows only what is displayed — your ticks are untouched and survive the filtering, so you can tick five things across five different searches. Matching ignores case, accents and spacing and is Thai-safe: "kbank" finds "KBank" and "café" finds "Cafe". An ✕ ("Clear search" / "ล้างการค้นหา") appears once you type.
06

Fixing many rows at once

Two jobs come up often enough to have their own mode: giving a pile of rows the same category, and deleting a batch you imported twice. Select mode does both, straight from the day list.

  1. Open the camera icon in the nav bar ("Scan or Select" / "สแกนหรือเลือกรายการ") and choose "Select" / "เลือกหลายรายการ". The item only appears when the list has rows and you are not already selecting.
  2. Tap rows to toggle them. While selecting, the rows wiggle gently and each leading circle becomes a checkmark; a row tap no longer opens the edit form, and the tag chips stop being tappable.
  3. Use the floating bar at the bottom. Its header counts what you have picked ("%lld selected" / "เลือกแล้ว %lld รายการ"), and both actions are disabled at zero selected.
  4. "Change Category" / "เปลี่ยนหมวด" opens the "Choose Category" / "เลือกหมวดหมู่" picker and assigns your pick to every selected row. "Delete" / "ลบ" asks "Delete %lld transactions?" / "ลบ %lld รายการใช่ไหม" before it does anything.
  5. Tap "Done" / "เสร็จ" to leave. Deselecting the last row keeps select mode on — exiting is always explicit.
  • The category picker offers personal categories only, expense sections first, and one level of hierarchy.
  • Selection is by transaction, across the whole store — not only the rows currently drawn on screen.
  • Bulk delete is revert-safe: for each row it first undoes any round-up deposit that went to a pocket, then reverses the row's effect on a debt, then tombstones it. Deletes are always soft, and they sync.
  • If the save fails you get a "Couldn't Save" / "บันทึกไม่สำเร็จ" alert, and your selection and select mode are both kept so you can try again.
  • Under Reduce Motion the rows do not wiggle at all; selection is carried entirely by the leading circle.
Hidden feature
Tap a row's coloured circle to start selecting with that row already ticked
Do thisOn the Transactions list, tap the coloured category circle at the left of a row instead of the row itself
Select mode opens with that transaction already selected, which saves the trip through the camera menu. It is the quickest way to grab three rows and re-categorize them in one go. Tapping the row body still opens the edit form as usual.
Hidden feature
Long-press any row for Duplicate and Delete
Do thisLong-press a row on the Transactions list, or a row in the search results
"Duplicate" / "ทำซ้ำ" opens a new-transaction form prefilled from that row — and duplicating a debt payment deliberately gives you a plain unlinked expense, so the copy never posts against the debt again. "Delete" / "ลบ" on the ledger raises a small bubble pointing at that exact row and names it before it removes anything. The menu is suppressed while you are in select mode.
TipThere are no swipe actions anywhere in this part of the app — the ledger, the search results, the calendar day sheet and the drill-in lists are all scroll views rather than system lists, and swiping a row does nothing. Duplicate and Delete live in the long-press menu instead, and both are also VoiceOver rotor actions, so they are not gesture-only.
Hidden feature
Every row action is also a VoiceOver rotor action
Do thisTurn VoiceOver on, focus a transaction row, then swipe up or down through its Actions
Nothing here answers a swipe and the long-press menu is hard to hit precisely, so the same commands are published to the rotor instead. A ledger or search row offers "Duplicate" / "ทำซ้ำ" and "Delete" / "ลบ"; a row waiting in the inbox offers "Mark as reviewed" / "ทำเครื่องหมายว่าตรวจแล้ว" and "Edit" / "แก้ไข"; and every tag on a row adds its own "View %@ transactions" / "ดูธุรกรรมแท็ก %@" action — which is how you reach a tag drill-in without aiming at a chip a few millimetres wide.
07

The month calendar

Some questions are shaped like a month rather than a cycle: which days were expensive, whether the weekends are the problem, where the quiet stretches were. The calendar swaps the day list for a week-aligned month grid, with every square coloured by that day's money.

  1. Tap the top-left button in the nav bar. The icon shows the mode you will switch to — a calendar glyph while you are in the list, a list glyph while you are in the calendar ("Calendar View" / "มุมมองปฏิทิน", "List View" / "มุมมองรายการ").
  2. Move between months with ◀ and ▶ ("Previous Month" / "เดือนก่อนหน้า", "Next Month" / "เดือนถัดไป").
  3. Pick how the squares are coloured with the segmented control under the header ("Calendar Metric" / "ตัววัดในปฏิทิน", spoken as "Day colour" / "สีของวัน").
  4. Tap a day square that has activity to open that day's transactions.
"Net" / "สุทธิ"
The default. Green when the day's net is positive, red when it is negative, with the intensity scaled against the biggest single-day net in that month. Legend: "Green = net positive · Red = net negative" / "เขียว = สุทธิบวก · แดง = สุทธิลบ".
"In vs Out" / "เข้า–ออก"
The square keeps a neutral fill and a small two-tone capsule shows the proportion of money in to money out. Legend: "Green = money in · Red = money out" / "เขียว = เงินเข้า · แดง = เงินออก".
"Heatmap" / "ฮีตแมป"
Shades by total activity — money in plus money out, ignoring the sign — against the month's maximum. Legend: "Darker = more activity" / "เข้มขึ้น = เคลื่อนไหวมากขึ้น".
  • The header carries the month and year plus "Net this month" / "คงเหลือเดือนนี้" — the month's signed net in whole baht, green only when it is zero or above.
  • The calendar navigates by month and spans your whole personal history. It is independent of the cycle stepper, which only ever scopes the list.
  • Days with no activity are not tappable and stay faint. Today always carries an accent ring, and when today has activity its numeral switches to the full-contrast colour so it stays readable on a coloured square.
  • Colour intensity follows a square-root curve from 0.18 to 0.92 opacity, so a small day is still visible next to a huge one.
  • Nothing rides on colour alone: every legend is text, and each square's VoiceOver label reads out the real numbers — the net, money in, money out and the transaction count, or that the day has no transactions.
  • The week starts on whatever weekday your device calendar uses, with the short localized weekday symbols.
  • The list-or-calendar choice is remembered on this device. The colour mode is not — it resets to Net every time the calendar is rebuilt. The tag filter and the sort order do not apply here at all.

Tapping a day opens a sheet you can drag to half height or all the way up. Its title is the day itself; tapping a row edits it, tapping a tag chip drills into that tag inside the sheet so Back returns you to the day, and "Done" / "เสร็จ" closes it. A day with nothing in it reads "No Transactions" / "ไม่มีรายการ". There are no Duplicate or Delete actions on this sheet — tap through to the form for those.

TipThe calendar and its day sheet include rows still awaiting review, which the day list and search do not. If you are checking whether something was captured at all, the calendar is the complete record.
Hidden feature
Swipe the grid sideways to change month
Do thisIn calendar mode, drag left or right across the month grid
Left moves to the next month, right to the previous one, with a tap haptic and an animation. The gesture needs about 24 pt of travel and only fires when the horizontal movement beats the vertical, so scrolling the page never trips it by accident.
08

Other doors into the same rows

Several screens elsewhere in the app end in a filtered transaction list. They all use the same rows and the same day grouping, and they all describe the current cycle only — none of them has a stepper, a search field or a filter.

  • By category: Summary tab → the donut legend. Tapping a parent row rolls up everything underneath it; tapping a child shows only that subcategory. The same list is reachable from Insights category rows and from Ask Pocketbird's answers.
  • By tag: Summary tab → the "Spending by Tag" legend row, or a tag chip on any transaction row.
  • Rows that were promoted into a shared shop are hidden from both lists.
  • A deleted category still resolves — its transactions keep the link, and the screen title falls back to the name stored on a member row.
  • Empty either way reads "No Transactions This Cycle" / "ยังไม่มีรายการในรอบนี้".
TipIn a single-category list — a leaf category, or a parent with no live children — a row with no note leads with its time of day in 24-hour form instead of repeating the category name, so two ฿60 coffees on the same day are told apart. The multi-category ledger never does this.

One more door is a cleanup screen. Summary tab → the "Uncategorized" legend row, or the cleanup insight card, opens "Categorize" / "จัดหมวดหมู่", which works through everything with no category.

  1. It opens in "Grouped" / "จัดกลุ่ม" mode: rows with the same note text are clustered into one row showing the note, "%lld transactions" / "%lld รายการ", the group total and — when the app can guess — a sparkles suggestion chip. Picking a category assigns it to every row in the group at once.
  2. Switch to "One by One" / "ทีละรายการ" for a plain multi-select checklist, then tap "Assign Category" / "กำหนดหมวดหมู่" in the toolbar — it stays disabled while nothing is selected.
  3. Flip "All time" / "ทุกช่วงเวลา" — off by default — to widen the scope from this cycle to your whole history. The footer always states which scope is showing.
  • A group whose rows have no note is titled "No note" / "ไม่มีโน้ต".
  • A transaction linked to a deleted category is not treated as uncategorized — it still renders under the old category's name, so this screen never nags you about it.
  • Assigning is repeat-safe: re-assigning simply overwrites, and rows that already carry the category are skipped.
  • Tag chips on this screen are deliberately not tappable, because the row tap belongs to selection.
  • When there is nothing left you get "Nothing to categorize" / "ไม่มีรายการให้จัดหมวด".
Hidden feature
Pull the ledger down before you trust a total
Do thisPull down on the Transactions list, on the calendar's day sheet, or on a category or tag drill-in
This is not a cosmetic refresh — it pushes the local edits waiting in your queue and pulls the remote ones, holding the spinner until the round trip actually finishes. Useful right after logging something on another device. Signed out, the gesture safely does nothing.
Hidden feature
Your transactions are searchable from the iOS home screen
Do thisSwipe down on the iOS home screen and search a note, a person, a pocket or a debt name
Pocketbird donates up to 200 recent live personal transactions to Spotlight — each shown with its title and its amount and date — and rebuilds that index at the end of every successful sync, so a fresh install has nothing there until the first sync completes. Tapping a result opens Pocketbird but does not jump to the row, so use Spotlight to remember which transaction you want, then find it in the app's own search.
09

Getting it out as a file

Two different exports exist, for two different reasons. One is a report on a period — a spreadsheet and a one-page PDF, the sort of thing you send to someone. The other is a complete dump of your data, for keeping or for moving elsewhere.

The period export is not on the Transactions tab at all. It lives on Summary → the share icon in the nav bar ("Export" / "ส่งออก"), which seeds the range with the current cycle — or Summary → Cycle Summary → the same icon, which seeds it with the cycle you are looking at.

  1. Tap Export. The sheet is titled "Export transactions" / "ส่งออกรายการ".
  2. Under "Range" / "ช่วงเวลา", keep "This cycle" / "รอบนี้" (the default, with the cycle label shown on the "Period" / "ช่วง" row) or pick "Custom range" / "กำหนดช่วงเอง" and set "Start" / "เริ่ม" and "End" / "สิ้นสุด".
  3. Check the "Summary" / "สรุป" block — "Transactions" / "รายการ" count, "Income" / "รายรับ", "Expense" / "รายจ่าย" and "Net" / "สุทธิ" — which recalculates live for the range you picked.
  4. Under "Format" / "รูปแบบไฟล์", both "CSV spreadsheet" / "สเปรดชีต CSV" and "PDF document" / "เอกสาร PDF" are on by default. Turn off whichever you do not want.
  5. Tap "Export" / "ส่งออก". It reads "Preparing…" / "กำลังเตรียม…" with a spinner while the files are written, then the iOS share sheet appears with them — Files, AirDrop, Mail and the rest.
  • The CSV columns are date, type, amount, category, counterparty, note, tags and trip. Dates are yyyy-MM-dd, type is the raw income or expense rather than a translated word, category is the display path with Parent › Child for a subcategory, and tags are joined with a | character.
  • The PDF is A4 portrait: a "Transaction report" / "รายงานรายการ" heading with the range underneath, a three-column Income / Expense / Net band with the transaction count, up to eight "Top spending categories" / "หมวดที่ใช้จ่ายมากที่สุด" rows with proportional bars, then the full table — "Date" / "วันที่", "Category" / "หมวดหมู่", "Details" / "รายละเอียด", "Amount" / "จำนวนเงิน" — which paginates and repeats its header on every page.
  • Both files cover personal money only — shop sales and costs never appear — deleted rows are excluded, and the range is half-open, so a row dated at the next period's first instant is never counted twice.
  • Filenames carry the range, like budgie-transactions-2026-06-01_2026-06-30, so two exports never collide in your Files app.
  • The preview totals and the file's totals come out of the same engine as the Summary screens, so they cannot disagree with what you see in the app.
Heads upExport is disabled with an explanation rather than failing quietly: turning both formats off shows "Choose at least one format." / "เลือกอย่างน้อยหนึ่งรูปแบบ", and an end date before the start date shows "The end date must be on or after the start date." / "วันที่สิ้นสุดต้องอยู่ในหรือหลังวันที่เริ่มต้น". An empty range still produces a document — the PDF simply prints "No transactions in this period." / "ไม่มีรายการในช่วงนี้".

The portability export lives somewhere else again: More → Settings → "Export Data (JSON)" / "ส่งออกข้อมูล (JSON)" and "Export Transactions (CSV)" / "ส่งออกรายการ (CSV)". Each opens the system document picker so you choose where the file goes; the default names are budgie-export-v12-YYYY-MM-DD.json and budgie-transactions-YYYY-MM-DD.csv.

  • The full CSV is every live transaction, all time, in chronological order — and unlike the period export it is not personal-only, so Shop rows are in it too. It carries seventeen columns, including id, account, trip, debt, installment_number, counterparty, recurring, needs_review and my_share, and its date is a full yyyy-MM-dd HH:mm:ss timestamp rather than an ISO one, so spreadsheets read it without a fight.
  • The JSON is schema v12 and covers transactions, categories, tags, pockets, debts, trips, recurring rules and their exceptions, accounts, account transfers, credit limit groups, counterparties, pocket ledger entries, budgets, cycle overrides, holidays, user settings and your account profile — plus a social section with your own shop entries, bills, shares and contributions when you are signed in.
  • Both read straight from the local store, so they work offline. The JSON's social section is the one part that needs the network; if it cannot be fetched, that key is simply absent from the file.
  • Binary media is not in either file. Receipt photos, trip covers, avatars and shop receipts come back by signing in instead — the JSON says so in its own note field.
  • Deleted data is excluded from both, and the JSON is deterministic — collections sorted by id, keys sorted — so identical data exports byte for byte identically.
  • Cells that begin with =, +, -, @, a tab or a carriage return get a leading apostrophe in both CSV exports, so a note like =1+1 opens in Excel or Sheets as text and never runs as a formula.
TipDates inside exported files, and in their filenames, are always Gregorian — even on a Thai device where the app shows Buddhist-era years on screen. A file stamped 2026-06-30 opens correctly in any spreadsheet, anywhere.