The log, as a file
Two files. The raw one is exactly what was typed at the pump, 302 tanks and 4 purchase rows. The derived one adds every computed column. Both are rebuilt with the site.
cars.json
The four cars: name, trim, fuel, purchase date, last fill, rated tank capacity.
Download JSONmaintenance.csv
The service history: one row per visit, with what was done, where, the product and parts.
Download CSVLicensed CC BY 4.0. Use it for anything; say where it came from. Latest tank in the file: Oct 9, 2026.
Raw columns
| Column | Meaning |
|---|---|
| car | Car slug, matches cars.json. |
| date | Fill-up date, local to America/New_York, YYYY-MM-DD. |
| event | fillup, or purchase for the row that marks the day the car was bought (no fuel numbers). |
| odometer | Odometer at the fill, miles. Tracked for the 2023 Corolla only. Its purchase row is 0. |
| miles | Miles driven on the tank being replaced. Trip-meter readings for the earlier cars; odometer differences for the Corolla. |
| gallons | Gallons pumped. |
| cost | Total paid, US dollars. |
| notes | Free text as typed: oil changes, tires, weather, trips. |
Derived columns in fillups.json
| Column | How it is computed |
|---|---|
| ppg | cost / gallons |
| mpg | miles / gallons, blank when the tank has no miles |
| days | days since the previous fill, or since purchase for a car's first tank |
| miles_per_day | miles / days |
| cost_per_mile | cost / miles |
| cum_miles | running total of miles for the car, the odometer for the Corolla |
| odometer_est | for the 2017 Fit only: the odometer walked back from the trade-in reading of 50,066 on 2023-05-26, so every tank gets an estimate; blank for cars that logged the real thing |
| temp_mean_f | mean of the daily mean temperatures at the Atlanta grid point from the day after the previous fill through the fill day; blank when fewer than 80% of those days are on record |
| fill_fraction | gallons / the car's rated tank capacity from cars.json (capacities verified by the owner), assuming a fill to full |
| events | tags parsed from the notes: oil, tires, filter, service, trip, weather, premium |
maintenance.csv
| Column | Meaning |
|---|---|
| car | Car slug, matches cars.json. |
| date | Date of the visit, YYYY-MM-DD. |
| odometer | Odometer at the visit, miles. For the three earlier cars the number is in the same basis as their fuel log: a running total since purchase, or the estimate walked back from the trade-in reading. |
| odometer_est | yes when the odometer was read off the fuel log for that date rather than off the dash. |
| items | What was done, a semicolon list from: oil, rotation, tires, air filter, cabin filter, fuel filter, inspection, brakes, service, other. |
| shop | Where: a business name, or Home. |
| product | Oil brand, grade and quantity; tire model and size. |
| parts | Filters and other parts installed. |
| cost | Dollars, 0 for a visit covered by an included maintenance plan, blank when not recorded. |
| notes | Free text. |
Entries for the earlier cars were lifted from notes typed next to a tank at the time, so their date is the tank's date and the shop and product are unknown. The Corolla's rows come from the owner's records.
Methods
Averages of per-tank figures (MPG, price per gallon) are means over tanks, which is how the log summarized a year for thirteen years. Overall ratios (miles over gallons, dollars over miles) are shown next to them under their own names, and the two are not interchangeable: a mean of tank MPGs weights every tank the same, the ratio weights big tanks more.
No median, rank or seasonal average is stated from fewer than 5 tanks. A tank under four gallons is never a best or worst tank, because a small top-up produces an unreliable MPG.
Every tank is treated as a fill to full, which is how the log was kept. Dates are civil dates in America/New_York; day counts are calendar differences. No station, location or fuel grade is recorded.
The three earlier cars have no odometer column, so their running mileage is the sum of tank miles since purchase, not a reading. The Corolla's is the odometer.
Weather
Temperatures come from Open-Meteo's historical archive (ERA5 reanalysis), one grid point for Atlanta, chosen as a metro-level reference rather than an address. The daily series is committed to the repository as data/weather-daily.csv (date, mean, max and min in Fahrenheit) and refreshed with a script; days newer than the snapshot are fetched when the site builds, and a tank simply has no temperature when they cannot be. Weather data by Open-Meteo, CC BY 4.0.