Building a Zero-Cost VPN Monitoring System: 645+ Measurements from Tokyo
How I built an automated VPN testing platform that runs 24/7 on Google's free tier
Most VPN review sites don't actually test VPNs. They recommend whatever pays the highest affiliate commission.
As a data analyst in Tokyo, I wanted to change that. So I built Tokyo VPN Speed Monitor - an automated system that tests 15 VPNs every 6 hours and publishes all data openly.
The best part? It runs on $0/month.
The Motivation
Working with data professionally, I've seen how easily numbers can be manipulated to serve commercial interests. The VPN review industry is particularly egregious:
- Sites rank VPNs by affiliate commission, not performance
- "Independent" reviews are thinly-veiled advertisements
- Actual testing is rare or non-existent
- Most data is US/EU-centric, ignoring Asian users
I wanted to build something different: transparent, automated, and unbiased.
What I Built
Tokyo VPN Speed Monitor measures VPN performance from an Asian perspective:
Core Features:
- Automated testing every 6 hours
- 645+ measurements collected
- Statistical stability analysis
- Price monitoring with alerts
- Free VPN leak detection tool
- Public REST API
- MIT License (fully open source)
Live Demo: blstweb.jp/network/vpn
Architecture: Free Tier All the Way
Google Apps Script (Backend)
The entire automation runs on Apps Script's free tier:
function measureVPNSpeed() {
const vpns = getActiveVPNList();
for (const vpn of vpns) {
const result = {
download: testDownloadSpeed(vpn),
upload: testUploadSpeed(vpn),
latency: measureLatency(vpn),
timestamp: new Date()
};
recordMeasurement(vpn, result);
analyzeStability(vpn, result);
detectAnomalies(vpn, result);
}
}
Trigger: Runs every 6 hours automatically Cost: $0 (within free tier limits)
Google Spreadsheet (Storage)
Using Spreadsheet as a time-series database:
function recordMeasurement(vpn, result) {
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('Measurements');
sheet.appendRow([
result.timestamp,
vpn.name,
result.download,
result.upload,
result.latency
]);
}
Advantages:
- Free, unlimited storage
- Built-in REST API
- Easy data exports
- Collaborative editing
- No database setup
Statistical Analysis
Measuring stability, not just speed:
// Coefficient of Variation
function calculateStability(measurements) {
const speeds = measurements.map(m => m.download);
const mean = average(speeds);
const stdDev = standardDeviation(speeds);
return {
mean: mean,
cv: (stdDev / mean) * 100,
rating: getRating(cv)
};
}
// 3-Sigma Anomaly Detection
function detectAnomalies(current, historical) {
const mean = average(historical);
const sigma = standardDeviation(historical);
const threshold = mean - (3 * sigma);
if (current < threshold) {
sendAlert({
vpn: vpn.name,
severity: 'high',
message: `Speed ${((mean - current) / mean * 100).toFixed(1)}% below normal`
});
}
}
Key Findings: 645+ Measurements
Time-of-Day Patterns
Speed varies significantly by hour:
- Fastest: 6am-9am Tokyo time (avg 12% faster)
- Slowest: 9pm-12am Tokyo time (peak usage)
- Variation: Up to 30% between peak and off-peak
Top Performers from Tokyo
1. NordVPN
- Average: 465 Mbps
- Coefficient of Variation: 7.2% (most stable)
- Uptime: 100%
- Price: ¥410/month
2. ExpressVPN
- Average: 428 Mbps
- CV: 12.5%
- Uptime: 98.2%
- Price: $2.99/month (highest)
3. Surfshark
- Average: 385 Mbps
- CV: 15.8%
- Uptime: 99.1%
- Price: ¥288/month (best value)
Price vs Performance
No correlation between price and performance. The most expensive VPN isn't the fastest. Mid-range options often deliver better value.
Weekend Effect
Speeds are 5% more stable on weekends due to lower overall network congestion.
Outage Patterns
60% of outages occur between midnight-6am (maintenance windows).
VPN Leak Detection Tool
Beyond speed, security matters:
Client-Side Diagnostics:
async function checkDNSLeak() {
const response = await fetch('https://dns-leak-test.com/api');
const data = await response.json();
return {
leaked: data.country !== expectedCountry,
servers: data.dns_servers
};
}
async function checkWebRTCLeak() {
const pc = new RTCPeerConnection({iceServers: []});
const leakedIPs = await detectLocalIPs(pc);
return leakedIPs;
}
Privacy Guarantee:
- 100% client-side execution
- Zero data transmission to servers
- No tracking or cookies
Try it: VPN Leak Test
Transparency as a Feature
Everything is public:
Open Data:
- All 645+ measurements accessible via API
- Historical trends publicly visible
- No data manipulation or filtering
Open Source:
- Full codebase on GitHub (MIT License)
- Community contributions welcome
- Fork and deploy your own instance
No Conflicts:
- No sponsored content
- No revenue model
REST API
Access all data programmatically:
# Latest measurements
GET https://www.blstweb.jp/network/vpn/api/latest
# Historical data
GET https://www.blstweb.jp/network/vpn/api/history?vpn=nordvpn&days=30
# Rankings
GET https://www.blstweb.jp/network/vpn/api/rankings
Response Format:
{
"vpn": "nordvpn",
"timestamp": "2025-12-21T10:00:00Z",
"download": 465.2,
"upload": 382.1,
"latency": 12.5,
"cv": 7.2
}
Roadmap
Phase 1: Geographic Expansion (1-3 months)
- Osaka and Fukuoka test locations
- 20 VPN providers
- ML-based anomaly detection
Phase 2: Asian Network (3-6 months)
- Seoul, Singapore, Hong Kong
- Community-submitted VPN requests
- Enhanced API with more metrics
Phase 3: Global Scale (6-12 months)
- Worldwide testing network
- Real-time dashboard
- Mobile applications
Lessons Learned
1. Free Tier Is Powerful
Google's free tier is surprisingly robust for production workloads. Strategic use eliminates infrastructure costs entirely.
2. Constraints Drive Simplicity
The 6-minute execution limit forced elegant, efficient code. Constraints can be creative catalysts.
3. Transparency Builds Trust
Open-sourcing everything led to community contributions and validation. Transparency > monetization.
4. Data > Opinions
Automated, continuous testing beats one-time manual reviews. Let the data speak.
Contributing
This is a community project:
GitHub: hmy0210/vpn-stability-ranking
Ways to contribute:
- Report bugs
- Suggest features
- Submit pull requests
- Recommend VPNs to test
- Share feedback
Start Here
Live Dashboard: blstweb.jp/network/vpn
Source Code: github.com/hmy0210/vpn-stability-ranking
VPN Leak Test: blstweb.jp/network/vpn/security-diagnosis
Questions? Find me on Twitter @takechiyo0210