좋은 가계부 app icon

Korean household ledger · extraction notes

좋은 가계부 stores everything on the phone — here is how to get it out

What sits inside the ledger

The domains below mirror how the app organises its own UI — assets split by physical instrument, transactions tagged with a kind, a separate debt section, a category-keyed budget, and statistics on top. The Korean column labels in the export match this split one-for-one.

DomainWhere it originatesGranularityWhat an integrator does with it
Asset balances — cash, 통장, 체크카드, 신용카드User-categorised in the asset sectionPer-asset, currentNet-worth feed for a coaching or planning tool
Transactions — expense, income, savings, transferManual entry; auto-recognised from bank and card push notifications; SMS readPer-row with category and amountSpend analytics, category roll-ups
Credit-card cyclesCard configuration plus the "card payment" deduction entryPer-card, per-cycleCash-flow projection across the cycle boundary
Debt records — borrowed, lent, repaid, receivedManual debt entryPer-counterparty, datedReceivables and payables sync
Monthly budgets by categoryBudget sectionPer-category caps, monthlyVariance dashboards, alerts
Installments and recurring entriesSchedule rules (daily, weekly, monthly; with holiday shift)SeriesForward-looking ledger
Simple notes with photosPer-entry attachmentsPer-row blobReceipt OCR, evidence files

Routes to the data

Three first-party routes carry the user's own ledger; a fourth parallel route reaches the bank-and-card source data through MyData rather than through the app itself.

1. Excel export

The owner taps export inside the app and shares the resulting .xlsx with the integrator. Easy, durable, fully consented. Best for one-off imports and weekly batch refreshes.

2. Google Drive backup file

The app writes a backup file to the owner's Drive when they tap backup. The integrator connects to that Drive with a scoped OAuth grant (limited to the backup folder), decodes the file, and runs the same normalization. The owner triggers the refresh by tapping backup again; no operator polling against the app's process is needed.

3. On-device read with the owner's consent

On the owner's handset, via ADB or a small companion utility, the app's private SQLite store is read directly. This reaches everything the UI shows, photo blobs included. It needs USB access or a developer-mode device, so it suits one-shot migrations rather than ongoing sync.

4. Korean MyData feed for the bank-and-card half

If the downstream goal is just the transaction half the app auto-imports from card-issuer pushes, a 마이데이터 / MyData provider returns the same data straight from the issuers under the FSC scheme. Different consent path, separate rail; it does not return the manual entries, budgets, or debt records that live only inside 좋은 가계부.

For most builds the Excel export covers the long tail and the Drive backup keeps it refreshed. The MyData feed is the cleanest live source for transactions alone, but it is a parallel ledger — not a substitute when budgets, debt, or notes matter. Routes one and two are what we usually pair.

Reading the export

The Excel headers are in Korean and the asset column carries Korean strings. The parser pins on the header text with a column-position fallback, and maps the asset strings to a stable English vocabulary before normalization. This excerpt is illustrative — the shipped parser carries dialect rules for the wording variants the developer has used across versions.

# excerpt — confirmed against a sample export during the build
import pandas as pd

KOR_HEADERS = {
    "날짜": "date",
    "내용": "memo",
    "분류": "category_top",
    "하위분류": "category_sub",
    "금액": "amount",
    "자산": "asset",      # 현금 / 통장 / 체크카드 / 신용카드
    "수입/지출": "kind",   # 수입 | 지출 | 저축 | 이체 | 부채
}

ASSET_KIND = {
    "현금": "cash",
    "통장": "bankbook",
    "체크카드": "debit_card",
    "신용카드": "credit_card",
}

def read_export(path: str) -> list[dict]:
    df = pd.read_excel(path)
    df = df.rename(columns=KOR_HEADERS)
    df["asset_kind"] = df["asset"].map(ASSET_KIND).fillna("other")
    df["amount"] = df["amount"].apply(_won_to_int)   # strips "₩" and commas
    df["kind"] = df["kind"].map({
        "수입": "income", "지출": "expense",
        "저축": "savings", "이체": "transfer", "부채": "debt",
    })
    return df.to_dict("records")

Source, schema, tests

Each item below is tied to a real surface above, not a generic checklist.

  • OpenAPI 3.1 specification for the normalized ledger endpoints (assets, transactions, budgets, debts, installments).
  • Excel-export parser in Python, with the Korean-header map, the asset-string vocabulary, and a column-position fallback for the months when the developer changes a header label.
  • Google Drive backup decoder (Python or Node, your pick), OAuth-scoped to the app's backup folder only — never broader Drive access.
  • Optional on-device extractor — a small companion that runs against a USB-connected handset for one-shot migrations.
  • pytest suite that fixtures three real export samples covering the schema permutations the developer has shipped.
  • Interface documentation in English and Korean.
  • Compliance brief — PIPA consent text in Korean, retention guidance for the photo notes, and a redaction option for projects that should not hold images.

Korean privacy and MyData

PIPA, Korea's Personal Information Protection Act, governs how an integrator handles the owner's own ledger entries. The owner's consent — explicit, in Korean, scoped to the data classes the project actually needs — is the basis we work from. The work happens under an NDA and a data-processing agreement that names retention period, the redaction step for photo attachments, and a delete-on-request channel.

The MyData route sits under a different rail: the FSC scheme, governed by the Credit Information Use and Protection Act, run by licensed providers (sixty-plus as the FSC reported in early 2024, with MyData 2.0 widening the regime). We do not hold a MyData licence ourselves; when a project chooses the MyData parallel feed, we wire the integration to a licensed Korean provider you appoint.

Things we handle on the build

These are the specifics that take a parser for this app from "works on a sample" to "works on next month's release too."

  • The Korean column headers in the Excel export shift wording between releases. We pin against both the header text (현금 / 통장 / 체크카드 / 신용카드) and a column-position fallback, and the maintenance contract covers a recheck against the latest export sample each quarter.
  • Installments and the "card payment" deduction interact: the parent purchase already sits in the ledger, the schedule emits per-month rows, and the card-payment entry closes the credit-card cycle. Our normalizer keeps the parent purchase, the schedule, and the cycle settle as three linked rows so a downstream sum does not double-count the same spend.
  • The upper/lower category toggle is a settings flag. When the owner turns it off mid-month, older rows still carry sub-categories and newer ones do not. The schema marks category_sub optional so a downstream map does not break when the user flips the toggle.
  • Photo attachments on simple notes are blobs on-device. The Excel export drops them; the Drive backup keeps them. The backup-route output ships them base64-encoded with a documented redaction option, so projects that should not store images can opt out at the parser stage rather than retroactively scrub.
  • Access is arranged during onboarding — we ask the owner to share one recent Drive backup and one recent Excel export, decode them in a sandbox, then run the pipeline against any subsequent backup or export the owner uploads. We do not hold the owner's Google credentials.

Pricing and how a job runs

A parser for this app — Excel reader, Drive backup decoder, normalized output, tests, docs — runs about a week and a half from kickoff. Pay $300 (more if scope grows past the listed deliverables) after we deliver runnable source; review the code, run it against your own export, then pay. The alternative is to skip the source and call our hosted endpoint, billed per call with no upfront fee. Either route includes the OpenAPI spec, the test fixtures, and the interface documentation in both languages. Tell us the app name and what you want out of it at /contact.html and we will scope the work back to you within a day.

What was checked

Reviewed the developer's Play Store listing for cashbook.app.hs — that is where the feature list, the asset categories, and the export and Drive-backup behaviour above come from. Reviewed the FSC's announcement on MyData 2.0 for the regulated parallel feed and the published text of PIPA for the personal-data treatment. Three citations below.

  1. 좋은 가계부 — Google Play listing (cashbook.app.hs)
  2. FSC: Plan for MyData 2.0 in Financial Services
  3. Personal Information Protection Act — English text (KLRI)

Other Korean ledger apps

An integration that handles 좋은 가계부 frequently sits next to one of these, either as a comparison view or a migration source. Names are listed as plain references.

  • 편한가계부 (Easy Budget) — Realbyte's manual-entry ledger, described in industry coverage as a twenty-million-download app and a long-running category leader in Korea.
  • 뱅크샐러드 (BankSalad) — MyData-licensed aggregator covering banks, cards, insurance, and credit score; the closest "automatic" counterpart to a manual ledger.
  • 다이어리 가계부 — the same developer (HS App)'s diary-style ledger; useful to compare schema decisions between two products from one team.
  • 쓰기 쉬운 가계부 — minimal entry form, popular as a first-time ledger.
  • 돈버는 가계부 — cashback-flavored ledger that adds reward tracking on top of the ledger pattern.
  • 간단한 가계부 — minimalist alternative in the same Android category.
  • 우리집 가계부 — household-shared ledger, two-account oriented.
  • 토스 (Toss) — finance super-app; spend tracking sits alongside payments and transfers and is sourced through MyData.

Common questions

Is the Excel export a single sheet or multiple tabs?

Single sheet in current builds, with date, memo, category, sub-category, amount, asset, and kind columns under Korean headers. Our parser normalizes those to English keys in the OpenAPI spec.

Can the Korean MyData feed replace the Excel and Drive path for the bank and card half?

Yes for the auto-imported card and bank rows, because a licensed MyData provider reads the same issuers. It does not see the user's manual entries, the budgets they set, or the debt records that live only inside the app.

What happens to the upper and lower category toggle in the normalized output?

Both fields are always present; sub-category is null when the owner has the toggle switched off. The OpenAPI schema marks it optional so a downstream map does not break when the user changes the setting later.

Are the photo attachments on simple notes included in the exports?

Not in the Excel file; yes in the Google Drive backup. The backup-route output ships them base64-encoded; ask for the redaction option if the downstream pipeline is not meant to hold images.

Interface

The screens below are the developer's published Play Store screenshots, included here so a reader can see the surfaces a parser actually has to reconcile against — the calendar view, the asset split, the category statistics, the budget panel, and the settings that toggle the upper/lower category behaviour.

좋은 가계부 screenshot 1 좋은 가계부 screenshot 2 좋은 가계부 screenshot 3 좋은 가계부 screenshot 4 좋은 가계부 screenshot 5 좋은 가계부 screenshot 6 좋은 가계부 screenshot 7 좋은 가계부 screenshot 8
좋은 가계부 screenshot 1 enlarged
좋은 가계부 screenshot 2 enlarged
좋은 가계부 screenshot 3 enlarged
좋은 가계부 screenshot 4 enlarged
좋은 가계부 screenshot 5 enlarged
좋은 가계부 screenshot 6 enlarged
좋은 가계부 screenshot 7 enlarged
좋은 가계부 screenshot 8 enlarged
App profile

좋은 가계부 is HS App's Korean-language household ledger for Android, distributed free on Google Play under the package id cashbook.app.hs (per its Play Store listing). Asset categories cover cash, 통장 (bankbook), 체크카드 (check card), and 신용카드 (credit card). Transaction kinds are expense, income, savings, transfer, debt, and balance. Automated entry runs through SMS read and push parse against bank and card company app notifications. Native Excel export, configurable widget, password protection, configurable theme. Backup and restore via Google Drive. Korean-only interface in current builds.

Mapping reviewed 2026-05-30 by the OpenBanking Studio integration desk.