System 04DataLive
Lãi suất 24h
Founder and owner, since 2026
Compares deposit and lending rates at around 40 Vietnamese banks every day, and totals the cost of a 10 to 20 year loan instead of quoting only the headline rate.
- Company
- Public data product sponsored by PFA; the asset is held in my name
- Role
- Project owner: product, data, infrastructure, legal, revenue, final say; wrote the whole data pipeline myself
- Status
laisuat24h.vn has been live since 12 Aug 2026 on Cloudflare Pages. Nightly cycle on GitHub Actions: backup, scrape posted rates, read public groups (6 days a month), build the site, publish.
Three-person team; I hold product, engineering, legal and revenue.
- Address
- laisuat24h.vn (opens in a new tab)

Screenshot of the real interface.
Metrics
- 45banks and credit institutions in the source list; 41 with published data (15/08)
- 14,085rate-table rows in the append-only store, history kept for every day measured
- 1,393automated checks in 110 groups, about 1,700 runs: per-bank table parsing, numeric validation rules, boundary guards, legal constraints
- 3 / 16major-bank loan pages that publish a promotional rate together with its term, which is why there is a phone-survey layer at all
- 112pages in the sitemap, Vietnamese and English, with open data as CSV and JSON
The story
The problem
The rate on a bank's home page is the advertised price; the rate a depositor actually receives sits somewhere else. One bank posts 5.9% for a 12-month term while a depositor who knows to ask is quoted 8.0%.
On 1 billion VND, two percentage points is 21 million VND a year. Depositors and borrowers need to see both layers, and to watch them move over time.
Read on: approach and lesson
Approach
Every night the system reads the rate tables of 45 banks from official web pages and PDFs, then reads posts in public Facebook groups after stripping phone numbers and poster identities, and merges the two layers to expose the gap between the posted rate and what the market actually quotes. The store is append-only and history is never rewritten, because yesterday's rate table now exists nowhere else.
Lesson
The expensive lessons were about operating discipline rather than parsing technique: a backup counts as a backup only once it has been restored and the rows counted; monitoring has to sit outside the system it measures; and one layer of the data exists only for whoever picks up the phone and asks the bank.
Technical decisions
The rate store is append-only
The rate store takes new rows only; a row that has landed is never edited and never deleted. Yesterday's rate table exists nowhere else now, so the history is an asset in its own right, and the only way to build it is to write every single day.
Lending rates: two machine layers, one human layer
Measured 14 Aug 2026: the store held 234 base-rate rows, 2 margin rows, and 0 banks carrying both. So the lending table combines three layers, a survey by calling banks directly (recorded by a person), posted rates (scraped), and market quotes (read from groups), and every cell carries its own source label.
Public groups read logged out, only the numbers kept
The market layer reads public groups in a logged-out state, and an automated check holds that boundary. Poster identities are stripped before anything enters the store, and the history pages keep only figures that were already published in public.
From this system
Need interest-rate data with history and a source?
The dataset is published openly as CSV and JSON, with a source recorded on every cell. If you build financial products, content or research, send me the problem.