Methodology

How we measure

Every measurement runs in your browser. The method and the data are public.

Two targets

This site (detour.tw) is deployed on a Cloudflare Free-plan zone. Its /cdn-cgi/trace endpoint reports the colo (data center code) that served you — the landing data center an ordinary Cloudflare site gets for your connection.

We also time cloudflare.com/cdn-cgi/trace. cloudflare.com is Cloudflare's own Enterprise zone, which normally lands in a Taiwan data center for users in Taiwan. It is our "ideal path" baseline — the "Taiwan node" figure on the result card, measured live in every test, not estimated.

Procedure

The browser first gets a single-use signed token, then makes 1 warm-up request and 5 timed requests to each target, interleaved (ours, baseline, ours, baseline…) so transient congestion affects both equally.

Requests bypass caches with a random query string; timing covers request start to body read. Each request times out after 4 s, the whole test after 15 s. We report the median of the 5 samples.

Anti-abuse and sanity checks

Tokens are HMAC-signed, single-use, valid only between 2 and 120 s after issue, and bound to the requesting address.

Physics check: light in fibre covers about 200 km per ms, so an RTT below the distance-based lower bound is impossible. The server also compares client timings with the TCP RTT it observes. Implausible tests are shown but not counted.

One counted test per device per day. The device id lives in the browser, and clearing it makes a new device, so this is best effort.

At most 20 counted tests per IP per day; for IPv6 a /64 counts as one address (a household is usually given a whole /64), and so do the rate limits. Mobile carriers put many users behind one IP (CGNAT), so mobile networks may be under-sampled.

What is excluded, and why

Only tests from users in Taiwan on Taiwanese networks count toward Taiwan statistics. Tests from abroad and travel eSIMs form the international baseline; roaming, VPN, corporate and hosting networks are shown but not counted.

Tests with "Share data" switched off are not stored at all.

Limitations

County location comes from IP geolocation and can be wrong. Mobile networks are the worst case: carrier address blocks are often registered in Taipei, so county statistics skew toward Taipei City. ISPs are identified by ASN; small providers may be grouped as "other".

cloudflare.com is not a perfect proxy: as an Enterprise zone it may route differently from other Enterprise sites. The "Taiwan node" figure is measured on cloudflare.com: it shows how fast a site served in Taiwan is, not that every such site is exactly as fast.

Browser timings include TLS, HTTP and browser overhead, so they read slightly higher than ping. Both targets are timed the same way, so they are comparable.

Round-trip times are measured and reported by your browser. The server can only check that they are plausible, not verify each one, so the median RTT and the median added latency are computed from client-reported values.

Volunteers are not a random sample; participants may skew toward people who care about this issue.

How ISPs are grouped

Tests are attributed by ASN and grouped under the brand a customer would recognise. Registry organisation names differ between databases, so names are never used as the key.

  • Chunghwa Telecom's HiNet fixed broadband (AS3462) and its mobile network (AS17421) are reported separately.
  • Taiwan Star merged into Taiwan Mobile in December 2023; its former AS24157 is counted under Taiwan Mobile.
  • Asia Pacific Telecom merged into Far EasTone in December 2023; the legacy network is still distinguishable and is listed separately.
  • Taiwan Mobile's mobile network (AS24158) and Taiwan Mobile Broadband (AS24163–24165) are reported separately.
  • Academic and government networks are their own groups. Cloud, VPN, iCloud Private Relay and WARP addresses are not household connections: they get the gray light and are never counted.
  • Taiwanese networks not mapped to a brand are listed by ASN. The public daily download still pools them into one group, since a single ASN may be one person's own network.
BrandASNs
Chunghwa Telecom (HiNet)AS3462
Chunghwa Telecom MobileAS17421
Taiwan MobileAS24158 · AS24157
Taiwan Mobile Broadband (TFN Media)AS24163 · AS24164 · AS24165
Taiwan Fixed Network (TFN)AS9924
Far EasToneAS9674 · AS18412
Asia Pacific Telecom (now Far EasTone)AS17709 · AS24154 · AS24155
Seednet (Digital United)AS4780
kbroAS38841
Homeplus (KBT)AS9416 · AS18042
Taiwan Broadband Communications (TBC)AS131596
Taiwan Optical Platform (TOP)AS18049
DaDa BroadbandAS18419
So-net TaiwanAS18182
Asia Pacific On-line (APOL)AS7482
New Kaohsiung BroadbandAS9922
Peicity Digital CableAS131627
Hsin Yeong An Cable TVAS131602
VeeTIMEAS17809
Extra-Lan TechnologiesAS18429
Digidom CableTVAS131607
TNET CommunicationAS38851 · AS132157
DongFong TechnologyAS18046
Pittqiao Network InformationAS131642 · AS18178
San Da Cable TVAS131611
Taiwan Intelligent Fiber Optic NetworkAS131584
Taiwan Digital StreamingAS18041
Sky DigitalAS134823
Taiwan Academic Network (TANet)AS1659
TWAREN (NCHC)AS7539
Academia Sinica (ASNet)AS9264
Government Service Network (GSN)AS4782

Privacy

We do not store your IP address. To stop repeat submissions, a keyed hash of your IP and device id that includes the date is kept for 48 hours, then removed from the database; database backups may keep it for up to 30 more days. Server request logging is off, so no logs hold your IP. Each test stores only ISP/ASN, county-level location, landing data centers, round-trip times, device time zone and connection type, for anonymous statistics. Only daily aggregates are published for download, never individual tests; landing data centers with fewer than 3 tests for an ISP on a day are merged. You can switch off "Share data" at any time; when it is off, nothing is stored. Fonts are served by Google Fonts, so your browser connects to Google to load them.

Data licence

Statistics are licensed CC BY 4.0. Reuse freely; please credit "Detour (detour.tw)".

The download holds daily statistics, not individual tests. Each row is one day (Taipei time), one ISP and one landing data center: the number of counted tests, their share of that ISP's tests that day, and the medians of the measured round-trip time, the Taiwan-node round-trip time and the added latency. Data centers with fewer than 3 tests for an ISP on a day are merged into one OTHER row, which shows no medians while it has fewer than 3 tests itself, so no single person's test can be picked out.

/api/export.csv covers every day and is refreshed every hour. Once a day is over, a file with only that day is added and never changes (/api/export/YYYY-MM-DD.csv, e.g. /api/export/2026-11-13.csv). Cite that file to point at a fixed version.

Questions about the data or the method? Write to developer@detour.tw

Cloudflare colo codes

Cloudflare names data centers after the nearest airport (IATA code). This table maps all 344 colos we know to cities; the result card uses it.

CodeCityCountry / regionRegion
ACXXingyiChinaAsia
AGRAgraIndiaAsia
AIPJalandharIndiaAsia
AKXAktobeKazakhstanAsia
ALAAlmatyKazakhstanAsia
AMDAhmedabadIndiaAsia
AVAAnshunChinaAsia
BBIBhubaneswarIndiaAsia
BDQJamnagarIndiaAsia
BKKBangkokThailandAsia
BLRBangaloreIndiaAsia
BOMMumbaiIndiaAsia
BWNBandar Seri BegawanBruneiAsia
CANGuangzhouChinaAsia
CCUKolkataIndiaAsia
CEBCebuPhilippinesAsia
CGDChangdeChinaAsia
CGKJakartaIndonesiaAsia
CGOZhengzhouChinaAsia
CGPChittagongBangladeshAsia
CGYCagayan de OroPhilippinesAsia
CJBCoimbatoreIndiaAsia
CKGChongqingChinaAsia
CMBColomboSri LankaAsia
CNNKannurIndiaAsia
CNXChiang MaiThailandAsia
COKKochiIndiaAsia
CRKTarlac CityPhilippinesAsia
CSXChangshaChinaAsia
CTUChengduChinaAsia
CZXChangzhouChinaAsia
DACDhakaBangladeshAsia
DADDa NangVietnamAsia
DELNew DelhiIndiaAsia
DLCDalianChinaAsia
DPSDenpasarIndonesiaAsia
DYUDushanbeTajikistanAsia
FOCFuzhouChinaAsia
FRUBishkekKyrgyzstanAsia
FUKFukuokaJapanAsia
FUOFoshanChinaAsia
HAKChengmaiChinaAsia
HANHanoiVietnamAsia
HGHShaoxingChinaAsia
HKGHong KongHong KongAsia
HYDHyderabadIndiaAsia
HYNTaizhouChinaAsia
ICNSeoulSouth KoreaAsia
ISBIslamabadPakistanAsia
IXCChandigarhIndiaAsia
JAIJaipurIndiaAsia
JHBJohor BahruMalaysiaAsia
JOGYogyakartaIndonesiaAsia
JRGSambalpurIndiaAsia
JXGJiaxingChinaAsia
KCHKuchingMalaysiaAsia
KHHKaohsiungTaiwanAsia
KHIKarachiPakistanAsia
KHNNanchangChinaAsia
KIXOsakaJapanAsia
KMGKunmingChinaAsia
KNUKanpurIndiaAsia
KTMKathmanduNepalAsia
KULKuala LumpurMalaysiaAsia
KWEGuiyangChinaAsia
LHELahorePakistanAsia
LHWLanzhouChinaAsia
LUHLudhianaIndiaAsia
LYALuoyangChinaAsia
MAAChennaiIndiaAsia
MFMMacauMacaoAsia
MLEMaléMaldivesAsia
MLGMalangIndonesiaAsia
MNLManilaPhilippinesAsia
NAGNagpurIndiaAsia
NQZAstanaKazakhstanAsia
NRTTokyoJapanAsia
OKANahaJapanAsia
PATPatnaIndiaAsia
PBHThimphuBhutanAsia
PKXBeijingChinaAsia
PNHPhnom PenhCambodiaAsia
PNQPuneIndiaAsia
SGNHo Chi Minh CityVietnamAsia
SHAShanghaiChinaAsia
SINSingaporeSingaporeAsia
SJWHengshuiChinaAsia
SZXShenzhenChinaAsia
TAOQingdaoChinaAsia
TENTongrenChinaAsia
TNAJinanChinaAsia
TPETaipeiTaiwanAsia
TYNYangquanChinaAsia
UDRUdaipurIndiaAsia
ULNUlaanbaatarMongoliaAsia
URTSurat ThaniThailandAsia
VTEVientianeLaosAsia
WUHWuhanChinaAsia
XFNXiangyangChinaAsia
XIYBaojiChinaAsia
ADLAdelaideAustraliaOceania
AKLAucklandNew ZealandOceania
BNEBrisbaneAustraliaOceania
CBRCanberraAustraliaOceania
CHCChristchurchNew ZealandOceania
GUMHagatnaGuamOceania
HBAHobartAustraliaOceania
MELMelbourneAustraliaOceania
NOUNoumeaNew CaledoniaOceania
PERPerthAustraliaOceania
PPTPapeeteFrench PolynesiaOceania
SUVSuvaFijiOceania
SYDSydneyAustraliaOceania
WLGWellingtonNew ZealandOceania
ABQAlbuquerqueUnited StatesNorth America
ANCAnchorageUnited StatesNorth America
ATLAtlantaUnited StatesNorth America
AUSAustinUnited StatesNorth America
BGIBridgetownBarbadosNorth America
BGRBangorUnited StatesNorth America
BNANashvilleUnited StatesNorth America
BOSBostonUnited StatesNorth America
CLEClevelandUnited StatesNorth America
CLTCharlotteUnited StatesNorth America
CMHColumbusUnited StatesNorth America
CVGCincinnatiUnited StatesNorth America
DENDenverUnited StatesNorth America
DFWDallasUnited StatesNorth America
DTWDetroitUnited StatesNorth America
EWRNewarkUnited StatesNorth America
FSDSioux FallsUnited StatesNorth America
GDLGuadalajaraMexicoNorth America
GNDSt. George'sGrenadaNorth America
GUAGuatemala CityGuatemalaNorth America
HNLHonoluluUnited StatesNorth America
IADAshburnUnited StatesNorth America
IAHHoustonUnited StatesNorth America
INDIndianapolisUnited StatesNorth America
JAXJacksonvilleUnited StatesNorth America
KINKingstonJamaicaNorth America
LASLas VegasUnited StatesNorth America
LAXLos AngelesUnited StatesNorth America
MCIKansas CityUnited StatesNorth America
MEMMemphisUnited StatesNorth America
MEXMexico CityMexicoNorth America
MIAMiamiUnited StatesNorth America
MSPMinneapolisUnited StatesNorth America
OKCOklahoma CityUnited StatesNorth America
OMAOmahaUnited StatesNorth America
ORDChicagoUnited StatesNorth America
ORFNorfolkUnited StatesNorth America
PDXPortlandUnited StatesNorth America
PHLPhiladelphiaUnited StatesNorth America
PHXPhoenixUnited StatesNorth America
PITPittsburghUnited StatesNorth America
POSPort of SpainTrinidad & TobagoNorth America
PTYPanama CityPanamaNorth America
QROQueretaroMexicoNorth America
RDUDurhamUnited StatesNorth America
RICRichmondUnited StatesNorth America
SANSan DiegoUnited StatesNorth America
SAPSan Pedro SulaHondurasNorth America
SATSan AntonioUnited StatesNorth America
SDQSanto DomingoDominican RepublicNorth America
SEASeattleUnited StatesNorth America
SFOSan FranciscoUnited StatesNorth America
SJCSan JoseUnited StatesNorth America
SJOSan JoséCosta RicaNorth America
SJUSan JuanPuerto RicoNorth America
SLCSalt Lake CityUnited StatesNorth America
SMFSacramentoUnited StatesNorth America
STISantiago de los CaballerosDominican RepublicNorth America
STLSt. LouisUnited StatesNorth America
TGUTegucigalpaHondurasNorth America
TLHTallahasseeUnited StatesNorth America
TPATampaUnited StatesNorth America
YHZHalifaxCanadaNorth America
YULMontréalCanadaNorth America
YVRVancouverCanadaNorth America
YWGWinnipegCanadaNorth America
YXESaskatoonCanadaNorth America
YYCCalgaryCanadaNorth America
YYZTorontoCanadaNorth America
ARIAricaChileLatin America
ARUAracatubaBrazilLatin America
ASUAsunciónParaguayLatin America
BAQBarranquillaColombiaLatin America
BELBelémBrazilLatin America
BOGBogotáColombiaLatin America
BSBBrasiliaBrazilLatin America
CAWCampos dos GoytacazesBrazilLatin America
CFCCacadorBrazilLatin America
CGBCuiabaBrazilLatin America
CLOCaliColombiaLatin America
CNFBelo HorizonteBrazilLatin America
CORCórdobaArgentinaLatin America
CWBCuritibaBrazilLatin America
EZEBuenos AiresArgentinaLatin America
FLNFlorianopolisBrazilLatin America
FORFortalezaBrazilLatin America
GEOGeorgetownGuyanaLatin America
GIGRio de JaneiroBrazilLatin America
GRUSão PauloBrazilLatin America
GYEGuayaquilEcuadorLatin America
GYNGoianiaBrazilLatin America
JDOJuazeiro do NorteBrazilLatin America
JOIJoinvilleBrazilLatin America
LIMLimaPeruLatin America
LPBLa PazBoliviaLatin America
MAOManausBrazilLatin America
MDEMedellínColombiaLatin America
NQNNeuquenArgentinaLatin America
NVTTimboBrazilLatin America
PBMParamariboSurinameLatin America
PMWPalmasBrazilLatin America
POAPorto AlegreBrazilLatin America
QWJAmericanaBrazilLatin America
RAORibeirao PretoBrazilLatin America
RECRecifeBrazilLatin America
SCLSantiagoChileLatin America
SJKSão José dos CamposBrazilLatin America
SJPSão José do Rio PretoBrazilLatin America
SODSorocabaBrazilLatin America
SSASalvadorBrazilLatin America
UDIUberlandiaBrazilLatin America
UIOQuitoEcuadorLatin America
VCPCampinasBrazilLatin America
VIXVitoriaBrazilLatin America
XAPChapecoBrazilLatin America
ADBIzmirTürkiyeEurope
AMSAmsterdamNetherlandsEurope
ARNStockholmSwedenEurope
ATHAthensGreeceEurope
BCNBarcelonaSpainEurope
BEGBelgradeSerbiaEurope
BODBordeauxFranceEurope
BRUBrusselsBelgiumEurope
BTSBratislavaSlovakiaEurope
BUDBudapestHungaryEurope
CDGParisFranceEurope
CPHCopenhagenDenmarkEurope
DMEMoscowRussiaEurope
DUBDublinIrelandEurope
DUSDüsseldorfGermanyEurope
FCORomeItalyEurope
FRAFrankfurtGermanyEurope
GOTGothenburgSwedenEurope
GVAGenevaSwitzerlandEurope
HAMHamburgGermanyEurope
HELHelsinkiFinlandEurope
ISTIstanbulTürkiyeEurope
KBPKyivUkraineEurope
KEFReykjavíkIcelandEurope
KIVChișinăuMoldovaEurope
LCANicosiaCyprusEurope
LEDSaint PetersburgRussiaEurope
LHRLondonUnited KingdomEurope
LISLisbonPortugalEurope
LJULjubljanaSloveniaEurope
LUXLuxembourg CityLuxembourgEurope
LYSLyonFranceEurope
MADMadridSpainEurope
MANManchesterUnited KingdomEurope
MLAVallettaMaltaEurope
MRSMarseilleFranceEurope
MSQMinskBelarusEurope
MUCMunichGermanyEurope
MXPMilanItalyEurope
OSLOsloNorwayEurope
OTPBucharestRomaniaEurope
PMOPalermoItalyEurope
PRGPragueCzechiaEurope
PRNPristinaKosovoEurope
RIXRigaLatviaEurope
SKGThessalonikiGreeceEurope
SKPSkopjeNorth MacedoniaEurope
SOFSofiaBulgariaEurope
STRStuttgartGermanyEurope
TBSTbilisiGeorgiaEurope
TIATiranaAlbaniaEurope
TLLTallinnEstoniaEurope
TXLBerlinGermanyEurope
VIEViennaAustriaEurope
VNOVilniusLithuaniaEurope
WAWWarsawPolandEurope
WROWroclawPolandEurope
ZAGZagrebCroatiaEurope
ZRHZurichSwitzerlandEurope
AMMAmmanJordanMiddle East
BAHManamaBahrainMiddle East
BEYBeirutLebanonMiddle East
BGWBaghdadIraqMiddle East
BSRBasraIraqMiddle East
DMMDammamSaudi ArabiaMiddle East
DOHDohaQatarMiddle East
DXBDubaiUnited Arab EmiratesMiddle East
EBLErbilIraqMiddle East
EVNYerevanArmeniaMiddle East
GYDBakuAzerbaijanMiddle East
HFAHaifaIsraelMiddle East
ISUSulaymaniyahIraqMiddle East
JEDJeddahSaudi ArabiaMiddle East
KWIKuwait CityKuwaitMiddle East
LLKAstaraAzerbaijanMiddle East
MCTMuscatOmanMiddle East
NJFNajafIraqMiddle East
RUHRiyadhSaudi ArabiaMiddle East
TLVTel AvivIsraelMiddle East
XNHNasiriyahIraqMiddle East
ZDMRamallahPalestineMiddle East
AAEAnnabaAlgeriaAfrica
ABJAbidjanCôte d’IvoireAfrica
ACCAccraGhanaAfrica
ADDAddis AbabaEthiopiaAfrica
ALGAlgiersAlgeriaAfrica
ASKYamoussoukroCôte d’IvoireAfrica
CAICairoEgyptAfrica
CPTCape TownSouth AfricaAfrica
CZLConstantineAlgeriaAfrica
DARDar es SalaamTanzaniaAfrica
DKRDakarSenegalAfrica
DLADoualaCameroonAfrica
DURDurbanSouth AfricaAfrica
EBBKampalaUgandaAfrica
FIHKinshasaCongo - KinshasaAfrica
GBEGaboroneBotswanaAfrica
HREHarareZimbabweAfrica
JIBDjiboutiDjiboutiAfrica
JNBJohannesburgSouth AfricaAfrica
KGLKigaliRwandaAfrica
LADLuandaAngolaAfrica
LLWLilongweMalawiAfrica
LOSLagosNigeriaAfrica
LUNLusakaZambiaAfrica
MBAMombasaKenyaAfrica
MPMMaputoMozambiqueAfrica
MRUPort LouisMauritiusAfrica
NBONairobiKenyaAfrica
ORNOranAlgeriaAfrica
OUAOuagadougouBurkina FasoAfrica
RUNSaint-DenisRéunionAfrica
TNRAntananarivoMadagascarAfrica
TUNTunisTunisiaAfrica
WDHWindhoekNamibiaAfrica