2025 marked our second attempt at finishing the Cape Epic race.
Nathan and I first competed in the 2023 Cape Epic, but our experience was cut short. After just two days in Cape Town, we both contracted giardia, likely from the local water. Despite starting the race sick, we pushed through the prologue. On stage one, near the end of the race, strong winds blew me off my bike, resulting in a cut on my arm. The wound became infected, forcing me to spend several nights in the hospital. Nathan continued as an individual rider and finished the 2023 Epic, but we didn't secure that team placing that everyone is hoping for.
Shortly after returning home in 2023, we decided to try again in 2025. The first hurdle was securing an entry, which we managed through the earlybird registration released the day after the previous year's race finished. Due to the time difference with New Zealand, this meant waking at 2 am to reserve our spot.
Having learned from our previous experience, we decided against staying in the race village, to minimize the risk of illness. Instead, we booked an AirBnB in Stellenbosch, centrally located for all race stages. That meant we could cook our own meals, do our washing, and enjoy a proper night's sleep. Nice showers, plenty of rest.
Throughout the race, I took detailed notes to preserve the experience. What follows is my first-hand account as a competitor in the 2025 Absa Cape Epic.
Prologue: The first test (26 km | 750 m)
Today marked the start of the race – the prologue. A 26 km time trial with over 700 m of climbing. Nathan and I kicked off at 10:22 that morning, which worked out well because we avoided the brunt of the midday heat. Annoyingly though, we ended up catching a fair number of slower riders ahead of us, costing us a minute or two.
But all things considered, we were happy with how it went. We both felt strong (though Nathan was probably the stronger of the two that day – I might've held him up a little), but it was going to be a long week ahead.
The next day, we would be lining up in the B category. The elites started before us, and we went right after. The heat was relentless. It was already in the mid-to-high 30s ºC (~100 ºF) that day, and the forecast suggested it would only get worse as the week unfolded. Stage 1 would be 96 km with 2,700m of climbing, which was looking to take around five to six hours.
At that stage, we were in good shape. Grant Andrews, our mechanic, had joined us again. He helped us out two years ago, and his support was invaluable. He was always working on the bikes, and they were running great.
We planned for an early night. The race the next day would start at 7:20, and with a 45-minute drive to the start line, we would need to leave by 5:45 .

🕞 Prologue results:
- Our time: 1:16:49 (16th in masters, 16th GC masters)
- Masters men first place: 1:06:41 (Karl Platt, Calle Friberg)
- Elite men first place: 0:59:45 (Luca Braidot, Simone Avondetto)
- Elite women first place: 1:12:33 (Annika Langvad, Sofia Gomez Villafane)
Stage 1: Into the furnace (96 km | 2,750 m)
Today was brutal – windy, hot, and long. I struggled from the start, while Nathan was flying. He was on a great day, I was on a terrible one, and I pretty much held him back the whole way. He ended up pushing me up a lot of the climbs or towing me by his hydration pack just to keep me moving. The second half of the stage felt slightly better, but overall, it was just a bad day for me.
This race measures everything. Even just getting here, staying healthy, and avoiding sickness had been a huge focus this past week before the race. We're extra careful at the aid stations – not touching food, not drinking from the cups – just trying to avoid anything that could make us sick.
What we did have at the aid stations was Coca-Cola, which revealed an oversight in my nutrition for the first half of the race. Once I got the Coca-Cola on board, I felt so much better and regained energy in my legs, telling me that I had misjudged my carbohydrate and sugar intake.
The climbing today was brutal because it was so rocky, meaning you couldn't get any momentum going up the climbs. It's completely different from the training we do in New Zealand. Then there were the fast, off-camber corners, where it was so dusty it felt like riding through talcum powder.
The start was chaotic with crashes everywhere. There was a really nasty one from an Italian rider who hit a vineyard strainer wire. It sounded like his bike snapped in half as he flipped over the handlebars.
You forget how different racing in a team is over here. You get stuck in long singletrack trains where you can't pass but also can't slow down, and it's hard to look behind yourself without crashing. It's a really awesome racing dynamic, but really tough and hard to train for. Two hours from the finish today, I just wanted it to be over. And this is only stage 1.
The descents were another battle. Super rocky, so you had to be careful not to puncture. Halfway down, you'd see teams pulled over, fixing flats. It felt like for the whole stage you're just staring at the rocks, trying to protect your tires.
One of the Kiwi teams in the Masters category had to pull out today due to illness, which is really sad for them. I know exactly how that feels after going through it two years ago, so I really feel sorry for them.
Stage 2 is going to be different. A 63 km time trial, in which we start at 20-second intervals. We are expecting around 3 to 3.5 hours, which sounds like a relief after stage 1. I am already feeling the fatigue.

🕞 Stage 1 results:
- Our time: 5:02:58 (12th in masters, ⬆️ (+4) 12th GC)
- Masters first place 4:19:02 (Pavel Gonda, Tobias Luthi)
- Elite men first place: 3:51:03 (Nino Schurter, Filippo Viero Colombo)
- Elite women first place: 4:43:35 (Annika Langvad, Sofia Gomez Villafane)
Stage 2: A lesson in dehydration (63 km | 950 m)
We rolled off at a civil 8:22am, but getting to the start was chaos. With the later start time, we hadn't factored in how bad traffic would be. It got so bad Nathan and I jumped out of the car, let our mechanic drive, and rode 10 km to the start line just to make it in time. This ended up working in our favor since we got a proper warm-up in, but it's these unpredictable moments that make this race so tough. You just can't plan for everything.
Looking at the course profile, it didn't seem too bad, and we both felt great early on. Way better than yesterday. We actually ended up starting in 30-second intervals, meaning we caught up with the first team within five minutes, then the next group five or 10 minutes after that. It felt like we were moving well, but in this race, feeling good can quickly turn around to bite you.
Around the 20 km mark we got in quite a good group which was riding at a good pace, but in hindsight I think the pace was a bit hot for me because there were times I was overreaching a little bit. Around the 30 km mark I remember thinking "Shivers, this is a bit hard."
Thankfully, the next section was mostly downhill, with 10-15 km of farm roads and even a bit of tarmac where we could recover. But the heat was really kicking in, and a few guys in the group kept pushing the pace quite hard, so I wasn't really comfortable. We hit the last aid station, 20 km to go, and most teams pulled in. Nathan and I decided to push on and didn't stop to get a drink. That would end up being a big mistake for us.
The group that came with us drove it really hard, and about 5 km later, the pace blew me to pieces and I nearly had to stop. I had lost all energy and was shivering in the heat – I wasn't well at all. It was brutal.
It's so hard to prepare for riding in such heat. It was in this stage my feet got so hot and sore that I lost the feeling in my toes. I'm not sure if this was due to my dehydration or the swelling in my feet. It also taught me a lesson: this race is as much about nutrition and drinking as it is about riding hard, and today I got that wrong.
The last 15 km was a real struggle where I could barely pedal, hoping to make it to the finish. It was the hottest I've ever felt on a bike before. As soon as I crossed the line, I had to find shade and just sit there. This is where it's so important to have a good partner who can help you through these tough times. This is exactly what Nathan did; he would help me, push where he could, and be a very supportive teammate.
We didn't hang around in the race village; we headed back to the car to get home as early as possible to start our recovery and prepare for the next day. On the way back to the house, we stopped off at a pizza restaurant and ordered three pizzas for the two of us. The amount of food you eat over the week is pretty incredible; we found we would have to go to the supermarket every single day just to get more bottled water and more food to stock up for the next day.

🕞 Stage 2 results:
- Our time: 2:55:07 (21st in Masters, ⬇️ (-1) 13th GC)
- Masters first place 2:26:55 (Pavel Gonda, Tobias Luthi)
- Elite men first place: 2:13:05 (Wout Alleman, Martin Stosek)
- Elite women first place: 2:43:14 (Annika Langvad, Sofia Gomez Villafane)
Stage 3: The 48 °C Inferno (78 km | 2,500 m)
The organizers shortened today's stage by 12 km, which was a real stroke of luck. It turned out to be one of the hardest days I've ever had on a bike. The dust was horrendous and the heat was intense. It hit a sweltering 48 °C (118.4 ºF) on the course and that was before noon. By 2:30pm, the race organizers started pulling riders off the course due to the danger of the extreme heat. The course itself was beautiful, lots of singletrack winding through the side of the valley, but the climbs were brutal, especially in the exposed areas. Standing in the heat today was tough enough, let alone riding for five hours.
Nathan and I decided before the race that we weren't going to focus on placing or moving up in the GC today; we just wanted to get to the finish line, and that turned out to be a great call. It was a real struggle to make it through the day. Like I said earlier, we are also avoiding drinking from the aid stations to prevent getting sick, which made things even tougher. By the last hour today, I was so dry and tempted to get a drink, but Nathan was with me telling me not to, reminding me not to take the risk. It was hard not to just drink the water, but you really have to try your best not to get sick.
One of the climbs today was a 45-50 minute grind, and as we went up, riders were pulling over everywhere. You'd ride past them and you'd see them literally passing out or collapsing, with medics rushing in on motorcycles or running to help. As I passed one of the doctors, I desperately asked him how much further to the top, to which he responded with "about a kilometre". It was brutal. At the top of this climb was the final aid station where we grabbed all the ice we could find and put it all down our bib shorts and shirts, just trying to get some relief from the temperature.
The climbing was incredibly rocky, making it impossible to get any momentum, and the descents were littered with sharp rocks just waiting to puncture your tires. To combat this, we ran extra sealant in our tubeless tires with our mechanic each night topping the sealant up. Any time you ran off the main track you ran the risk of getting thorns in your tires. After most stages you could see where sealant had come out with multiple holes in the tires due to rocks and thorns.
Another decision I made today was to swap out my 34-tooth front chainring for a 32. That change really helped, especially at the start when we hit that massive climb. I don't think I would have made it up with the 34. This race is seriously tough thanks to the dust and the heat and the climbs.
Tomorrow's stage is at Fairview also. It's 80 km with 2,000 m of climbing – a bit less climbing than today, so hopefully it won't be as brutal. The forecast temperatures are around 28-30 °C (82.4-86 ºF), which sounds a lot better than today's furnace.

🕞 Stage 3 results:
- Our time: 5:01:01 (21st in Masters, ⬇️ (-6) 19th GC)
- Masters first place 3:51:21 (Craig Uria, Charlie McFall) shortened course time
- Elite men first place: 3:22:44 (Luca Braidot, Simone Avondetto)
- Elite women first place: 4:14:53 (Annika Langvad, Sofia Gomez Villafane)
Stage 4: Dust blindness (80 km | 1,950 m)
Today started off with the dustiest conditions I've ever seen. This is another example of something you can't replicate in training. The dust was so intrusive that you could not see your front wheel, let alone the other riders. Minutes into the stage, my mouth and nose were like a sandpit, causing Nathan and I to spend the rest of the stage coughing, trying to clear it out of our throats. The soft sand was tough going, especially as we looped back around farm roads and through the vineyards for about 10 km before finally hitting the trails and climbing into Paarl Mountain.
It wasn't as hot as yesterday, but it was still pretty warm early on. Once the clouds rolled in and the sun was blocked, it became a lot more bearable.
The feeling in my feet still hadn't come back since stage 2. Despite this, this was the first day I felt like I could actually race and keep up with the others, which made a big difference. Nathan didn't have to drag me along as much or stop and wait for me, which was a relief for both of us. It was nice to finally feel like I was in the game.
As usual, the trails were incredibly dusty and rocky, so I was constantly on the lookout for punctures. The first water station was a bit of a frenzy. Everyone was worried it would be like the previous day, with the heat, so everyone was loading up on water and ice, trying to stay cool.
The next stage will be just under 100 km with nearly 3,000 m of climbing, so it's shaping up to be another long, tough day.

🕞 Stage 4 results:
- Our time: 4:07:33 (19th in Masters, (↔️) 19th GC)
- First place Masters: 3:27:04 (Christoph Sauser, Cory Wallace)
- First place elite men: 3:06:34 (Luca Braidot, Simone Avondetto)
- First place elite women: 3:50:45 (Annika Langvad, Sofia Gomez Villafane)
Stage 5: The monster climb (98 km | 2,850 m)
Today was the queen stage – the toughest day with the most climbing. It was brutal. The rain overnight helped keep the dust down, which was a godsend after days of riding in dusty, sandy conditions. For once, we could ride without coughing up dust every few minutes.
The real monster climb came 80 km into the race, where we faced around 800 m of climbing at a brutal gradient which got up to 25% in places. It was by far the hardest climb I've ever experienced, especially after already riding for 4.5-5 hours. The only silver lining was that it wasn't scorchingly hot. The rain kicked in during the second half of the stage and it was an absolute blessing to ride in those conditions instead of the heat and sun we've been battling for days. I remember thinking, riding and walking up that hill, that if it had been as hot as the previous days, I'm not sure I would've made it up.
As in a lot of bike races, there are times where you wonder: "why am I doing this?" where you are in a dark place. There were plenty of times like this over the week. It's only very personal reasons that can keep someone in a race like this. For me, it was when one of my friends asked my wife what she wanted me to bring back from South Africa. Her answer was simple: "I don't care what he brings me back, as long as he brings back the finishers' T-shirt!"
Getting the queen stage done felt like a massive relief. From the start, we knew it was going to be a hard day, so we held back, conserving energy for that final climb. I think a lot of teams had the same approach. The first 15-20 km were fast and hot, and I sat off the back instead of trying to keep up with the fast guys because I knew that wouldn't end well. By the two-hour mark, we started passing a lot of teams, which made me feel like we paced ourselves well.
Nathan's been an absolute champion as a partner. I feel bad for him because he's more than capable of being in the top 10, but here we are back a bit in the top 20 because I can't ride as fast or hard as he can. He never complains, pushes me up the hills when he can, and just gets on with it. I probably drive him crazy telling him to slow down, but he never says a word.
The support out there was incredible today, especially since it was a public holiday. The course took us through Stellenbosch, with beautiful trails and crowds cheering us on. With our names on our race numbers, it was awesome to hear people shouting "Keep going, Mitchell!" even though they didn't know us. It gave me such a boost, and it's great how much support this race gets from the local community.
Only two days remain. The next day will be another big one, about 4.5-5 hours of riding, starting and finishing in Lourensford.

🕞 Stage 5 results:
- Our time: 5:14:00 (19th in Masters, ⬆️ (+2) 17th GC)
- First place Masters: 4:45:03 (Christoph Sauser, Cory Wallace)
- First place elite men: 4:13:27 (Nino Schurter, Filippo Viero Colombo)
- First place elite women: 5:23:38 (Annika Langvad, Sofia Gomez Villafane)
Stage 6: Mud and momentum (88 km | 2,550 m)
It rained heavily overnight, leaving us with a muddy, slow, and tough course today. On the bright side, my legs started feeling much better, which helped us get one of our best results of the week – 12th in the Masters category. The conditions were a complete contrast to the previous days, with the wet weather making for a completely different challenge. While it was nice to race in the wet for a change, the mud has its downsides. It's hard on the bike – slippery, and really slow.
Despite that, we rode really well as a team today, passing quite a few others and moving from 19th to 14th overall in the Masters category. Just one day left to go.

🕞 Stage 6 results:
- Our time: 5:08:21 (12th in Masters, ⬆️ (+3) 14th GC)
- First place Masters: 4:17:52 (Karl Platt, Calle Friberg)
- First place elite men: 3:49:37 (Marco Joubert, Tristan Nortje)
- First place elite women: 4:47:57 (Monica Yuliana Calderon Martinez, Tessa Kortekaas)
Stage 7: The final push (40 km | 1,000 m)
Originally planned as a 60 km route with 2,000m of climbing, the bad wind and rain overnight led to a two-hour delay. Just before we set off, we received an email saying the race was being postponed due to weather conditions and that the course would be shortened to 40 km with 1,000m of climbing. That change was a welcome relief to everyone at the end of a long week, giving us more time to relax in our accommodation before the race.
Once the race started, Nathan and I pushed harder than we had earlier in the week, and our legs responded much better. We were able to pass teams we hadn't been able to before, finishing with our best result of the week – 10th in our category and moving up to 13th overall in the Masters. Lourensford is a beautiful place – a vineyard with stunning gardens, restaurants, and buildings. The crowd at the start was huge, and there were a lot of people when we finished, with everyone celebrating their achievements.
Crossing the finish line, we were ushered into a photo shoot, then into a riders' tent where we were given a Cape Epic hamper with cold meats, cheese, and crackers, along with a Cape Epic finishers' medal and T-shirt.Walking into the marquee with the cheers of fellow riders was a special moment. Despite the wet weather during the celebrations, it was a huge relief to get through the race without crashes or sickness, especially after the tough start to the week.
A big shout-out to our mechanic, Grant. He's a hard worker who kept our bikes in perfect condition all week. We didn't get a single puncture or face any mechanical issues, and that was a huge factor in our consistency. We passed a lot of teams who had broken chains or flat tires. His hard work was key to our performance.
We cleaned the bikes, packed up, and went out for dinner, ready to head to the airport the next morning.

🕞 Final results:
- Our time: 1:57:21 (10th in Masters, ⬆️ (+1) 13th GC)
- First place Masters: 1:46:27 (Christoph Sauser, Cory Wallace)
- First place elite men: 1:33:22 (Lukas Baum, Georg Egger)
- First place elite women: 1:54:38 (Monica Yuliana Calderon Martinez, Tessa Kortekaas)
Conclusion: Beyond the finish line
The Absa Cape Epic is a grueling challenge that tests the limits of every cyclist. The first half of the week was incredibly tough, with extreme heat, choking dust, and mud-soaked conditions that tested my resolve. By the end of the race, I found my pace and managed to achieve a solid result despite the struggle. We were extremely proud of our result despite the difficulty earlier in the week, but most of all, we were happy to have had an experience of a lifetime, ticking an item off our bucket lists together.
Nathan's partnership was invaluable throughout the race. His constant encouragement and ability to push me forward when I was struggling made all the difference. Whether it was helping me up tough climbs or patiently waiting for me to catch up, his commitment to the team was clear.
A week after the dust has settled (literally), I can only encourage anyone who is considering doing this event to give it a go, but be prepared for the toughest eight days on the bike you've ever had.

Did we do a good job with this story?