The Cannonball run is one of the most mythologized journeys in car culture: a timed sprint from New York City’s Redball Garage to the Portofino Hotel in Los Angeles. What began with Brock Yates in 1971 has since become legend, spawning records, rallies, and movies. If you’re reading this blog you probably know the legend. What’s less clear is whether the legend still has room for another chapter.
![]() |
| CannonBall run overview |
The record for the run has become incredibly hard to beat and the current best time was set during the Covid lockdown, when traffic was at all-time lows. Many Cannonball runners have been quoted saying that traffic is the single most impactful variable in a successful run and that the Covid record may never be beaten. But in the final months of 2025 I had an idea...
I will preface the rest of this post by saying; Simulating something and actually doing it are worlds apart. But I wanted to test a theory.
I wrote a Python program to collect data from the Google Maps API about delay conditions along all of the 17 possible route-segments of the 9 possible routes from the Redball Garage to the Portofino Hotel and stored all of the collected data in a PostgreSQL database.
![]() |
| All segments of all potential routes |
![]() |
| Python script to get data |
![]() |
| Recorded data for a segment in the database |
The program collects real traffic and delay data for every segment, every hour. That was the easy part. The hard part was figuring out how exactly to make sense of all the data pouring in. I wrote an algorithm which should determine the best route and starting time to avoid traffic. It does this by first, calculating the reliability of each route segment on average at different times. Then it strings together the most reliable segments in order based off of an average speed you feed into the program. That part about average speed is important to consider. If you're going the speed limit you will encounter traffic around metropolitan areas at different times than if you were excessively speeding for large portions of the route. So the algorithm takes a desired target average speed into consideration when stringing together routes to avoid delay trends. For example, if you average a speed of 110 mph (which is the current record) the best route to take is not the shortest route, at that speed the shortest route encounters traffic in the southern portion of the run.
![]() |
| More code to make sense of the data |
I can now specify the start location, finish location, and desired target average speed to calculate the most optimal start time and route based on reliable data at a moment's notice. I call it CannonMiner.
![]() |
| A sample of CannonMiner's output |
The more I let this program collect data every hour, the more accurate it will become and the more confidence can be placed on its predictions. In the meantime I want to validate the predictions. I feel like a mad scientist in a cave.
Over the weekend I role played as an Overhead Manager for a virtual Cannonball run. I watched traffic cameras, weather apps, traffic apps, law enforcement activity, construction notices and waited for a pretend car to travel from point to point every 30 minutes. I checked on progress and calculated the next leg of the journey every 30 minutes for around 26 hours straight. All traffic, law enforcement, and weather conditions, fuel consumption and fuel stops were factored into the "car's" progress across the map. I based the virtual car's stats off of the car currently holding the record, a 2016 Audi S6 with a fuel capacity of 65 US gallons and a tune for more torque and horsepower at low revs.
For traffic: Google Maps and Waze.
Law enforcement: Waze and Broadcastify.
Construction: "511" websites for each state visited and Waze and Google Maps.
Weather: NOAA and TornadoHQ for radar, AccuWeather Severe and NOAA for advisories or watches, AccuWeather Windmap for winds, and of course Windy for a composite.
Traffic Cameras: "511" websites for each state visited, Traffic-Cams.com, and Windy
![]() |
| Watching for delay conditions and plotting progress in realtime |
![]() |
| Various weather sources |
It was a pretty fun experiment. There was lots of law enforcement in New Jersey, but quickly made up for lost time in Pennsylvania and Ohio. The car was holding a record setting pace easily until snow outside of Omaha and I thought the run might be scrubbed. Right after the Nebraska border the roads cleared up, straightened out, and tailwinds helped reduce fuel consumption. The run was back in black.
![]() |
| Blue lines are lightly snowed roads |
| Tailwinds! |
Colorado was also going very nicely, that is until half way through the Rockies when a thick fog had set in.
![]() |
| baaaaaaaad fog |
![]() |
| This is going to be a problem.. |
Pace slowed down considerably in the last portion of Colorado. A little while after the car passed the Utah border, visibility had returned and allowed the car to get back onto a record setting pace. 🙏
![]() |
| Visibility restored! |
In Utah and Nevada the car was able to really pull way ahead of the current record pace, and I felt like this was now in the bag, until I crossed the California border. The moment the car entered California it became a constant struggle against traffic congestion, construction, and law enforcement. As the car came into LA, I knew my lead was now questionable, and it would come down to a battle for minutes.
Help at this stage was outside the capacity of my CannonMiner program, and I had to place faith that it got me into the city at the right time to thread the needle through. I plotted a route from the northeast corner of town to the hotel using my own knowledge of the city and committed. It was all up to the fates now.
A nail-biting 30 minutes passed, still not there, my lead was truly shrinking fast. This is it, the final push to the finish. I calculated every minute, carefully tracking progress through traffic and eventually the car made it into the marina parking in front of the hotel. I totaled up the travel time for this final push, added it to my running total, and I couldn't believe my eyes! I had virtually beaten the record. I spent the next 15 minutes triple checking the math, but as far as my simulation could tell the record had been beaten by just 9 minutes and 5 seconds. My time was 25 Hours, 29 Minutes, and 55 seconds, 25:39:00 to beat.
![]() |
| checkpoint log at the finish |
| Cannonball finish marker, streetview |
In the end CannonMiner didn’t prove that the record can be beaten, I already knew there was still room for improvement; it proved that traffic, timing, and data still matter more than brute speed alone. This was never about claiming a victory or suggesting a simulation equals the real thing; it was about testing whether modern tools and disciplined analysis could still find daylight in a run many consider “finished.” The result, a narrow and fragile margin, reinforces just how razor-thin the edge is and how much of the Cannonball still comes down to conditions lining up perfectly. Whether or not the real-world record ever falls again, this experiment confirmed something important: the run isn’t dead, it’s just brutally unforgiving. And for a mad scientist in a cave, that’s more than enough motivation to keep refining the model.
I intend to do this manual simulation again to continue validating CannonMiner, but if anyone reading this would like to use me as an Overhead Manager for your own Cannonball run, please reach out to me using the contact form.












