Skip to content
Provenance

Where our data comes from

Every source we poll for Thailand, its live status, and what each dataset is actually derived from. This page is generated from the same registry the ingest pipeline runs on, so a broken or stale feed shows up here as broken or stale. The gaps are listed too.

Live source registry

Read from the public source registry at render time. These are the only sources that feed this site — there are no others held back, and nothing on this list is aspirational.

11

Sources configured

3

Delivering

3

Enabled but not delivering

5

Configured, switched off

Official & government(0)

Government, meteorological, disaster-management, police or embassy feeds published by the body itself.

None. We do not currently ingest a single official or government feed. Nothing on this site is sourced from a government safety bulletin, a meteorological agency, or a police record. State-owned news agencies, where we poll them, are listed under news publishers — they are newspapers, not safety feeds, and we will not label them otherwise.

News publishers(7)

Editorial outlets whose public RSS or Atom feeds we poll. We ingest their headline, summary and link; we do not republish their article text.

SourcePublisherStatusLast delivered
Chiang Rai Timeschiangraitimes.comDelivering1 Aug 2026, 20:45 UTC
Khaosod Englishkhaosod.co.thDelivering1 Aug 2026, 20:45 UTC
The Thaigerthethaiger.comDelivering1 Aug 2026, 20:45 UTC
Bangkok Postbangkokpost.comPausedUnknown
Bangkok Postbangkokpost.comPausedUnknown
Pattaya Newsthepattayanews.comPausedUnknown
Google News ThailandGoogle NewsSwitched offNever

Community & social platforms(4)

Platforms where content is written by members of the public. Anything sourced here is unverified by construction.

SourcePublisherStatusLast delivered
Facebook ThailandFacebookSwitched offNever
Reddit ThailandRedditSwitched offNever
Telegram ThailandTelegramSwitched offNever
X ThailandX (Twitter)Switched offNever

What the statuses mean:

Delivering — the last collection attempt succeeded, and the timestamp shown is that success.

Failing — recent attempts have failed. We do not retain the last successful timestamp, so we cannot tell you how stale it is.

Paused — failed three times in a row, so the poller now skips it entirely. No new data is arriving from this source until someone fixes it.

Never polled — enabled, but has never been polled successfully. It has contributed nothing so far.

Switched off — present in the registry but not enabled. It has never contributed anything and is not contributing now.

Registry read at 1 Aug 2026, 20:49 UTC. This page is regenerated on the same cycle as the poller, so these figures can be up to one cycle old.

What each dataset is derived from

Counts are read live from the API, or from the data file that renders the pages, at the moment this page is generated. "Live records" are rows in the database the API serves. "Curated records" are hand-maintained entries in a file in our codebase — a directory we wrote and check, not a measurement.

Safety alerts

483 live records

Derived from: Three things: safety-classified items from the news feeds listed above, weather warnings computed from Open-Meteo forecast data, and moderated community reports submitted by users. Every alert carries the source it came from.

Not derived from: Any official emergency broadcast, government warning system, or civil-defence feed. We are not connected to one. An absence of alerts here is not evidence that no warning has been issued.

News

2826 live records

Derived from: Headlines, summaries and links polled from the news publishers listed above, then classified for safety relevance and region by a language model. The classification is automated and not reviewed by a human before publication.

Not derived from: Original reporting. We do not have journalists. Coverage is limited to what the feeds above publish in English — an incident no listed outlet covers does not appear here.

Community reports

50 live records

Derived from: Submissions from site and app users, passed through automated content moderation before they appear.

Not derived from: Verified fact. Moderation screens for abuse and spam; it does not confirm that an incident happened. Treat every report as one person's unverified account.

Region safety scores

44 live records

Derived from: A composite computed from the volume and severity of active alerts, the volume of community reports, and curated road-risk data for the region, recomputed on every poll cycle. It is a relative index built from our own coverage.

Not derived from: Crime statistics, accident records, or any official measurement. A region with more reports can score lower than a genuinely more dangerous region with no coverage. The score measures what we can see, which is not the same as what is there.

Hospitals

66 live records45 curated records

Derived from: A curated directory plus records imported from OpenStreetMap. Names, locations and phone numbers are point-in-time entries.

Not derived from: A live availability, capacity, or admissions feed. We do not know whether a hospital is open right now, whether it has beds, or whether it will accept your insurance. Phone numbers can go out of date without us knowing.

Beaches

80 live records133 curated records

Derived from: A location directory: names, coordinates, and province, largely imported from OpenStreetMap.

Not derived from: Swim-safety monitoring of any kind. We do not measure flag status, current strength, or water quality, and we do not receive them from anyone who does. See the section below.

Scams

40 live records50 curated records

Derived from: A curated catalogue of scam patterns compiled from reporting and community submissions, describing how each one works and how to avoid it.

Not derived from: A live incident feed or a police record. Entries describe recurring patterns, not events that happened today at a specific place. Report counts reflect how often something has been reported to us, not how often it occurs.

Roads

150 curated records

Derived from: A curated dataset of notable roads with hand-recorded risk characteristics, hazards, and typical traffic conditions.

Not derived from: Live traffic, live accident data, or an official road-authority feed. Conditions are described in general terms and do not reflect the road right now.

What we deliberately do not report

Our rule is that we do not report a value we did not measure. Where a measurement does not exist, the API omits the field entirely rather than returning a default that would read as a reading.

Beach safety is where this bites hardest. Every beach in our database is unmonitored: nobody sends us flag status, current strength, or water quality, and we do not measure them. So the API returns those beaches with monitoring explicitly marked false and the three condition fields removed from the response — not set to null, not defaulted to green, removed. A green flag is a claim that someone checked the water. We have not, so we do not make it. If you need beach conditions, read the physical flags on the beach and ask the lifeguards.

How often this updates

  • News feeds are polled every 15 minutes by a scheduled job. A feed that has failed three consecutive polls is skipped until it is fixed, so its data simply stops updating.
  • Region safety scores, alert expiry, and weather-derived alerts are recomputed on the same 15-minute cycle.
  • Once a day, at 03:00 UTC, old news articles are pruned and daily digests are generated.
  • Curated datasets — hospitals, beaches, scams, roads — do not update on a schedule at all. They change when we edit them, which may be months apart. The record counts above tell you the size of these files, not their freshness.

Gaps we have not closed

Stated plainly, because you cannot judge the data without them. These are generated from the live registry where possible, not written by hand.

No official or government sources

We poll zero government feeds. No meteorological agency, no disaster-management authority, no police or transport ministry, no embassy advisory. This is the single largest gap in our coverage, and it means anything an official body announces reaches us only if a news outlet we poll writes about it in English. Integrating official feeds is the highest-value thing we can do to this dataset, and it has not been done.

Configured sources that are not running

5 sources are present in the registry but switched off, and have never contributed a single record. They are listed above as switched off rather than hidden, because a source we have configured but never run is not coverage.

Sources that are enabled but not delivering

3 enabled sources are currently failing, paused, or have never been polled successfully. While a source is in that state its coverage is simply missing, and because we do not retain a last-success timestamp we cannot tell you precisely how much is missing.

Community reports are unverified

Reports are submitted by the public and screened by automated moderation for abuse and spam. Nobody verifies that the incident described actually happened, and we have no mechanism to do so. They are useful as signal and should not be read as fact.

Tell us we are wrong

If a record here is wrong, stale, or missing — a hospital that has moved, a phone number that no longer answers, a scam that no longer runs, a source we should be polling — we want to know. Corrections are the cheapest way to improve this dataset and we would rather hear it from you than not know.

Licensing and reuse

ThaiSafe data is published under Creative Commons Attribution 4.0. You may use it commercially, redistribute it, and build on it, provided you credit the source and link back. If you republish a figure from this dataset, please also carry the caveats on this page — a number reused without its provenance is how misleading claims get made.

Related