A simple, focused tool for fetching Roblox concurrent user (CCU) data from the RoMonitor API and exporting to CSV format.
This tool connects to the RoMonitor API to retrieve half-hourly concurrent user counts, aggregates them to daily averages, and exports the data to CSV files for analysis.
- Simple API: Clean, minimal command-line interface
- Flexible: Fetch all history, specific quarters, or just the latest quarter
- Reliable: Error handling and retry logic
- Efficient: Aggregates half-hourly data to daily averages
- Output: Daily CCU data + quarterly summary
pip install -r requirements.txtpython fetch_ccu_data.pypython fetch_ccu_data.py --updatepython fetch_ccu_data.py --quarter Q4 2025python fetch_ccu_data.py --output-dir /path/to/outputThe script creates two CSV files in the data/ directory:
Daily aggregated CCU data
- Date: Calendar date
- Avg_CCU: Average concurrent users for the day
- Max_CCU: Peak concurrent users for the day
- Min_CCU: Minimum concurrent users for the day
- Quarter: Quarter label (e.g., "Q3 2025")
Quarterly aggregated statistics
- Quarter: Quarter label
- Avg_CCU: Average CCU for the quarter
- Max_CCU: Peak CCU in the quarter
- Date (min, max, count): Date range and number of days
API Endpoint: https://api.romonitorstats.com/count
Parameters:
start: Start date (YYYY-MM-DD)end: End date (YYYY-MM-DD)
Response Format:
[
{
"time": "2025-10-29T00:00:00Z",
"count": 12571336
},
...
]The script can fetch data from:
- Q1 2020 through Q4 2025
- Full 6 years of history
- Easily extendable for future quarters
# Run this every Monday to get the latest complete week
python fetch_ccu_data.py --update# Run this on the 1st of each month to fetch full data
python fetch_ccu_data.pyimport pandas as pd
# Load the daily CCU data
ccu = pd.read_csv('data/ccu_daily.csv')
# Convert date to datetime
ccu['Date'] = pd.to_datetime(ccu['Date'])
# Calculate YoY growth for October
oct_2024 = ccu[(ccu['Date'].dt.year == 2024) & (ccu['Date'].dt.month == 10)]
oct_2025 = ccu[(ccu['Date'].dt.year == 2025) & (ccu['Date'].dt.month == 10)]
growth = (oct_2025['Avg_CCU'].mean() - oct_2024['Avg_CCU'].mean()) / oct_2024['Avg_CCU'].mean() * 100
print(f"October YoY Growth: {growth:.1f}%")Edit the top of fetch_ccu_data.py to modify:
API_BASE_URL: API endpoint (if changed)OUTPUT_DIR: Default output directoryTIMEOUT: API request timeout (seconds)RETRY_DELAY: Delay between API calls (seconds)QUARTERS: List of quarters to fetch (add future quarters as needed)
The script handles:
- ✓ Network timeouts
- ✓ API errors (HTTP status codes)
- ✓ Empty responses
- ✓ Malformed data
Failed quarters are skipped with a warning; successful quarters are saved.
- Time per quarter: ~1-2 seconds (includes API delay)
- Full history fetch: ~30-40 seconds for all 24 quarters
- Update fetch: ~1-2 seconds for a single quarter
Update the QUARTERS list in the script:
QUARTERS = [
...existing quarters...
('Q1 2026', '2026-01-01', '2026-03-31'),
('Q2 2026', '2026-04-01', '2026-06-30'),
]The output CSV files can be directly used with:
- Pandas DataFrames for analysis
- Excel for manual review
- Database for permanent storage
- Other analysis scripts
The API may be blocking requests. Wait a few moments and try again.
The date range may not exist or the API endpoint has changed.
The specified quarter may not have data yet (e.g., future quarters before they occur).
Increase the TIMEOUT variable in the script if API is slow.
Internal use only - Moffett Nathanson
- v1.0 (Oct 30, 2025): Initial release
- Fetch quarters by quarter
- Simple CLI with argparse
- Daily + quarterly aggregation