Where our data comes from
None of the data on Tetono is typed in by hand. Every figure comes from a source we can name, arrives on a schedule, and passes a check that refuses the new batch if it looks wrong. This page sets out where each dataset comes from and what we do to it — so you can verify it yourself instead of taking our word for it.
PM2.5 air quality
Source: the Air4Thai system run by Thailand's Pollution Control Department, covering 173 monitoring stations across 74 provinces.
The list of stations and their coordinates is a snapshot refreshed daily. The readings you see are live, fetched when you open the page — through our own proxy, so that thousands of visitors do not hit the department's servers directly (cached for 10 minutes).
The colour bands ("very good / moderate / beginning to affect health") use Thailand's own AQI and the 2023 national PM2.5 standard in µg/m³, not the US EPA or WHO scales, which assign different colours to the same reading. We use the Thai one because it is the scale the country's actual health warnings are issued against.
⚠️ A station that returns a blank reading is treated as "no data", never as zero. There was a bug where a dead station rendered as "0 µg/m³ · very good" and entered the national ranking as the cleanest air in the country. Those two cases are now told apart.
Fuel prices
Source: the official feeds of both PTT (PTT OR) and Bangchak.
We show them side by side in one table, and because Bangchak publishes tomorrow's price in advance, the page can tell you whether fuel is about to go up or down before the change takes effect (cached for 30 minutes).
Each brand's premium grades are different products, so they are folded into one row per fuel type rather than compared by trade name — which would imply they are the same thing.
Gold prices
Source: the published rates of the Gold Traders Association, via two public feeds that we merge (one carries bullion, the other adds the spot price per ounce). Refreshed automatically every 5 minutes.
Any field the upstream feed does not send, we do not display at all rather than showing a dash or a zero — which is why the jewellery-gold rate is currently hidden: that feed is returning nothing.
Government lottery results
Source: the official API of the Government Lottery Office (GLO), fetched on draw days.
The archive keeps past draws searchable, and the statistics page shows the frequency of 2-digit and 3-digit endings and the numbers that have come up most often. ⚠️ Those statistics are a count of the past and predict nothing. Each draw is independent of every other one, and the page says so on itself.
EV charging stations
Source: OpenStreetMap (ODbL licence) and Open Charge Map (CC BY), together 331 charging points across 44 provinces, refreshed weekly.
⚠️ Each station's province is computed from its coordinates, not from the text attached to the record. We take the latitude and longitude and test which province polygon it falls inside, against a 77-province boundary file. Addresses typed into OSM are spelled several different ways and are sometimes simply wrong; coordinates do not lie. Points that land outside the country (spill-over from across the border) are dropped.
Operator names are normalised onto one canonical set, as are connector types (Type 2, CCS2, CHAdeMO), because upstream records write them inconsistently.
What we do not do: we do not pull from the operators' own apps, and we do not use Google Places — Google's terms forbid storing the place content it returns, which is incompatible with building pages that hold the data in order to show it. So we accept less coverage than an operator's app in exchange for every row being something we are allowed to republish. Browse charging stations
Healthcare facilities
Source: the CITIZENinfo open government dataset (data.go.th) and OpenStreetMap, together 13,731 facilities across 77 provinces, refreshed monthly.
⚠️ Public/private is decided from the facility's name first, and only then from the upstream tag — which sounds backwards and is necessary: live OSM data contains 117 sub-district health-promoting hospitals tagged as private, evidently from one bad bulk edit. Thai facility names are legally defined classes — sub-district health-promoting, military camp, municipal, university — and nothing named that way is private, whatever a mapper typed.
⚠️ A facility we cannot classify gets no badge at all, and is counted in neither the public nor the private filter. The two filters therefore add up to less than the total, which is deliberate: a wrong badge on a health directory is worse than no badge.
⚠️ Coordinates age well, but the CITIZENinfo list is a 2020 snapshot. Facilities that opened since then reach us only through OSM. Call ahead before travelling. Find hospitals
Public and bank holidays
Source: Cabinet announcements, curated by hand rather than fetched — substitution days and special holidays are announced as resolutions, and there is no feed to pull.
⚠️ The government and bank holiday sets are not the same, and the difference changes the answer — the Royal Ploughing Ceremony and the start of Buddhist Lent are government holidays on which banks open; Labour Day is a bank holiday on which government offices work. The working-days calculator therefore asks which set to use before it counts. See the holiday calendar
Tax and labour rules
Source: the Revenue Code for personal income tax, and the Labour Protection Act for severance and overtime.
The rules the calculators apply — the rate brackets, each deduction group's ceiling, the expense allowance for each category of income, the severance bands by length of service — are written out separately in code with an automated test suite that checks them on every change, rather than being buried in a page. That way they can be compared against the statute directly.
⚠️ Our calculators are an estimate for planning, not tax advice, and some things are deliberately not built because they would mean deciding something on your behalf — joint versus separate filing for spouses, and the dividend tax credit among them. Where real money is involved, check with the Revenue Department or an accountant.
Weather
Source: Open-Meteo, for both place search and the forecast itself — an open service that needs no key.
What stops bad data overwriting good
Every dataset above is overwritten automatically on a schedule, which means one upstream outage could erase months of accumulated coverage. So there are two gates:
- If a fetch comes back with far fewer records than we already hold, the pipeline refuses to write and keeps the previous set.
- If a source that used to contribute has vanished entirely, it also refuses — the first gate cannot see this case on its own, because CITIZENinfo accounts for the bulk of the hospital rows. If OpenStreetMap disappeared completely, taking every clinic and dental practice with it, the total would barely move and would sail through a count check.
And because a partly-completed fetch is wrong data rather than less data, a partial result is recorded as "that source is empty" so the second gate can see it, instead of being passed through quietly.
Attribution, and telling us about a wrong record
Every data page names its source and the date of the data, and for OpenStreetMap and Open Charge Map it links back to the individual upstream record. The ODbL and CC BY licences require that credit — and it is useful beyond compliance: if you find a station or a facility with wrong details, you can fix it at the source, and our next refresh will pick up your correction. That improves the data for everyone using it, not just for this site.
If a figure here does not match its source, that one is on us. Tell us on the contact page