Today, Flint from Zwift posted a notice on the forum to inform racers that “ZwiftPower category has been replaced, and is now calculated by our Category Enforcement metrics.” Read the full post >
What does this all mean? Let’s dig in and find out…
A Short ZwiftPower History
ZwiftPower was launched in 2016 as a collaboration between Glen Knight and James Hodges. Glenn handled the hardware side, originally running the ZwiftPower servers out of his garage. James was the programmer. Both poured countless hours into the site. It quickly became the place where Zwift race results lived, since Zwift wasn’t controlling who joined which category or doing any post-processing of results.
Simply put: if you didn’t have a ZwiftPower account, you weren’t a serious Zwift racer. And as a serious racer, you knew the breakdown of ZwiftPower’s FTP-based categories, which quickly became the standard for race categorization on Zwift:

James and Glen signed a contract with Zwift in October 2018, assigning all ZwiftPower-related intellectual property to Zwift. (This contract included terms outlining Zwift’s financial support of the site, but those terms have never been disclosed.)
Then in July 2020, Zwift took over the hosting and management of ZwiftPower. Zwift said this was done to improve product stability. It also allowed for more clear-cut GDPR compliance, since Zwifter’s data would no longer be shipping off to a third-party site.
ZwiftPower hasn’t evolved much since Zwift took it over, but this isn’t surprising. Zwift has been investing in its own systems, with the goal of moving away from ZwiftPower at some point. So we haven’t seen any significant upgrades to the ZwiftPower site since July 2020.
Category Confusion
ZwiftPower did a good job of handling post-race processing of results, but there was no way to stop riders from signing up for the wrong category and blowing up a race. (Example: a sandbagging A rider might get a DQ in the ZwiftPower results, but they’d already blown apart the C race!)
To solve this problem, Zwift started testing Category Enforcement in February 2022. The goal was to set a minimum race category based on a rider’s historic power numbers on Zwift, blocking riders from racing categories below their detected ability. And it worked! Today, approximately 2/3 of all race events on Zwift use Category Enforcement, as indicated by this icon in the Companion app:

But the world of Zwift categories has been confusing since February 2022, because ZwiftPower had an FTP-based categorization scheme separate from Category Enforcement’s zFTP+zMAP-based scheme. The categories overlap in a big way, but riders on the edge of categories (for instance, a low-end B or a high-end C) were often categorized one way by ZwiftPower, and another by Category Enforcement.
Today’s change (in theory) eliminates that confusion.
A Few Notes
- The category update on your ZwiftPower profile will not happen automatically. You have to either take part in an event or click the ‘Refresh profile’ option on your ZwiftPower profile to see the Category Enforcement information on your profile.
- A+ riders will still show in ZwiftPower, for legacy purposes. A+ riders will be anyone with a zFTP >4.6 w/kg AND >300w.
- Event organizers should note that by default ZwiftPower will no longer Upgrade or DQ riders based on their category or W/Kg limits. (This shouldn’t be needed anymore, as long as your event is using Category Enforcement to restrict signups on the front end.) Event organizers will have to configure this option explicitly in ZwiftPower on a per-event basis if they wish to continue using the legacy system. This change won’t affect events already in ZwiftPower. Only future events being picked up will have those enforcement options turned off by default.
- WTRL’s popular Thursday TTT used ZwiftPower’s categories, but those will now shift to Category Enforcement. See WTRL’s post on this >
Wrapping It Up
This is a smart move by Zwift since it simplifies the Zwift racing landscape by creating one category scheme to rule them all.
Additionally, this change will increase fairness in Zwift racing. The metrics used by Category Enforcement are simply more robust than ZwiftPower’s legacy FTP-based categories, which were easy to “game” by keeping one’s 20-minute power below certain thresholds.
Until results-based categorization arrives, a unified Category Enforcement structure is a significant upgrade from what Zwift racers have used in the past. Ride on!
Questions or Comments?
Post below!
“One category scheme to rule them all…”. Sounds vaguely familiar. I suggest a TTT to Mordor.
Well we do ride right through a volcano…
Well that sound like loads of climbing, and gravel.
and taters!
Great stuff. Cat enforcement has been a huge step forward but is there any news, a hint, whisper or very rough time frame for results based categorisation?
I know they’re working on it. I think it’s quite possible they even have a backend system computing results now, we just can’t see it.
As for ETA? No idea!
Based on nothing other than conjecture and previous acquisition of ZP, I wonder if they’ll make an attempt to use ZR.app which has become increasingly popular.
Love to see even more categories. Narrow things down to small FTP increments. When you just go up barely above the previous cat it feels like you have no chance.
Im with you there and I feel your pain, I am in the same boat, but if they split Cats to narrower bands will there be enough participants in each category?
If that’s what you want, try the Dirt Racing Series starting next month. Nice narrow categories. Should make for great racing.
Categories need to be organizer-editable. I think that will happen… eventually. But not any time soon.
Whether categorization is based on power numbers or race results, organizers should be able to say “I want 6 categories” or “I want 3” and determine the criteria for categorization.
It’d be nice if all the categories were split into 3 (A+, A, A-, B+, B, B-, etc.) and the default was to just cluster 3 together and maybe not even show that +/- is an option to the general public. But a race organizer could select to choose to cluster 2 or have each subcategory separate or whatever. I mean, better still would be some sort of results based ranking and letting organizers choose if they want to separate by power, race rank, and choose if they want groupings based on size or a set number of groups or… Read more »
Race?????
Aha, your comment truncated at race! No worries
sorry but that’s nonsense. if you ride a race in real life there is no 100 cat either. if you’re not among the best, you don’t win. thats life. You can’t invent a suitable category for everyone just so that he can win…
That doesn’t work, ICR used it and it was a field day for sand baggers.
Tfc mad Monday races been doing this for years👍
Yeah, and it’d be nice if it were somehow able to be automated. The last couple seasons with the specific race links when you put your data in is better, but back when the people running it had to manually check everyone to make sure they were in the right category after the race, it took forever to get results. I was thinking specifically of them when I was thinking the categories should be broken down into more subcategories that most of us never see and are off by default but that a organizer could turn on and automatically sort… Read more »
How is that any different from racing in local Crits, RRs or XC events?
Anything to get a trophy 🏆
When is “results-based” categorization supposed to arrive? What’s the hold up?
It has already arrived – http://zwiftracing.app
What’s Zwift’s algorithm for calculating zFTP and zMAP, do we know?
https://zwiftinsider.com/category-enforcement/
I see you young Eric! (Old Andy here). Hopefully this will solve a lot of confusion. At the start of the year I was a B in both Zwift Power and Zwift. Then a B in ZP, but an A in Z, Then a B in both again. Then an A in ZP, but a B in Z, until I hit “refresh profile” today, and I’m now a B in both once again (and a very happy bunny I am too). As John asks in the previous post, it would be very interesting to see how the zFTP and zMAP… Read more »
Hi Old Andy (I’m afraid we are about the same age, since we race together quite often). Actually the explication is quite simple. The model used by Zwift assume that your zFTP should be much lower than your 5 mn PB, and only a little bit lower than your 12 mn PB. In other words, the model consider a kind of slope between you 5mn PB, your 12mn PB and your zFTP (which would be a 40mn PB). The higher is your 5mn PB in comparison to your 12mn PB, the steeper is the slope. This mean that if you… Read more »
Yes this is a good explanation. I’ve been in Cat B for years, then in January this year in one of the Zwift events, coasted round but finished with an out of saddle, flat out effort up one of the hills in London which took just over 11 minutes. This boosted my 12 minute performance and I was immediately put into Cat A. I’m not complaining I was delighted to become an A, but there are many Cat B racers far better than me. A few weeks later, it might have been in one of the Zwift Insider mini races)… Read more »
Hi Pierre. Firstly, your English is excellent (probably better than mine!!). Now that you have explained it so well it makes perfect sense. And your comments about the relationship between zFTP and zMAP and age also ring true for me. My zMAP is in the middle of the B band, but my zFTP is towards the top end and close to an A. I look forward to racing against you soon – be sure to say hi. And many thanks for your reply.
They should split C cat into 2 groups.
C- and C+.
The group is too large at present time and it’s too hard to get any placings in events when you’ve just gone up from D cat.
Especially on the Zwift-organised races. Cat C can easily have 150 participants, so splitting it into C1/C2 should still leave a lot of participants in each. I don’t want a guaranteed win, just a category I can at least stay with the lead group for a while. Cat D was great fun, but despite never winning a race I went up to Cat C & wouldn’t even call it racing, I’m that far back. I’m 51, & can only ride infrequently, so I’m not about to improve enough to ever compete as it stands.
Don’t know why they choose MAP and FTP. It’s pretty much the same thing and closely correlated. I would use FTP and 1 minute power to determine the category that will cover both aerobic and raw muscular power. Or use result-based like zwiftracing.app
Something is wrong
Something is wrong, I’m in Category C
Zwiftpower =/= ur race category any more. Look up your category on Zwift -> My Profile -> Fitness
Except the category that ZP posts these days is the Zwift Cat Enforcement Category. That’s what this whole article is about.
Is it the case that a rider needs to be over one of or both the zMAP and zFTP threshold to qualify as that cat? As an example, would a rider with zMAP = 5.2wkg and zFTP = 4.4wkg and 300W be cat A or cat B? They are below the threshold on zMAP and over it on zFTP
You just need to be over on one of them
That’s what I suspected, thanks
Will the categories available to me in Zwift be the same as my categories in ZwiftPower?
A: Not necessarily, ZwiftPower is a supplement to Zwift that can use its own custom rules and category limits. Your info in ZwiftPower doesn’t dictate your available categories in Zwift, your rides in Zwift are used to determine your available categories.
Does this make any sense?
Ur power profile from ALL rides done in Zwift is used to determine ur new category. Zwiftpower don’t mean **** any more basically.
sorry folks, but I don’t understand some people here who want 100 sub-categories. Yes, I know nowadays there are no more races at school because children would lose there… you have to be considerate of the weaker ones and wrap them all in cotton wool…. but the world isn’t like that! There are always people who can do something better than you. and with Zwift, 4th categories are sufficient. what’s the use of being first in the d-3 class but being 168 drivers faster in the leaderboard? then what is this trophy worth? exactly… nothing… I don’t stand a chance against the top people in my… Read more »
You realise there’s a huge middle ground between 4 and 100? Cat C is 2.5-3.2Wkg that’s a huge gap in real terms. People just want to race against a group with maybe a 15% spread, not nearly 30% difference in Wkg. It’s not about glory, there’s none anyway it’s a meaningless online race, people just want to enjoy a race
Zwift Power has made this process entirely too complicated. I’m taking a trip to Mordor
Isn’t the biggest incentive for Zwift to use this enforcement to stop/block account sharing? My children who occasionally like to jump on an indoor bike and have fun in a race are no longer able, because they obviously get dropped instantly in an A race.
Still, it’s good incentive to enforce velominati rule #9 on the little ones more strictly though.
What’s the problem? Children can use their own account. Zwift is free for kids.
Did the last “Ride London” event yesterday (D cat) and 2nd and 3rd place finishers were well above the ‘old’ W/Kg limit of 2.5. They would have been DQ on Zwift Power before but not now it seems!
Aren’t this week’s events less than 10 minutes? Winners in each cat should be well above the old 20 minute power cutoffs.
The new category limits are ~5% higher.
There are a lot of riders managing their power to stay just inside the Category Enforcement boundaries so that they can win races. e.g. Riding in D cat races with 5-20 min output well above the 2.4 W/kg and massive sprint power but keeping their average below 2.4W/Kg.
at least the new system considers ur 2-5min power as well now. old system only cared about 20min power.
https://zwiftracing.app has already arrived with results-based categories, and lots of organizers are using it
Bye bye good (ZRL-)results for mid-level C-riders 🙈 Cat-Enforcement in general is a great idea (!) … BUT the current settings are bad news for lots of mid-level C’s … 3 reasons : 1) low B’s are C now and will hurt you with their “normal” speed 2) all power values under 2min don’t matter for CE (!!!), so people with ~8W/Kg per minute will destroy your chances at every decisive moment or kicker like Legsnapper, Titans Rev. and so on easily 3) and when Pack Dynamic v4 will be rolled out, then you’ll even get more problems added to… Read more »
I’m not entirely sure of the difference between Zwift’s Category Enforcement, and the categories that Zwiftpower used to use. But I don’t trust Zwift. I’ve been in cat enforced races where riders of A+ categorization on ZP have been allowed to enter and tear apart B cat. How can there be that big of a determining factor between the two? I’ve always relied on ZP as the place to turn for “official” race results, and knew that it was only a matter of time before Zwift turned it into a ****show. There needs to be a dedicated site separate from… Read more »
I just got downgraded back to C from B so now I won’t get blown out of races. Happy day.
I’d prefer an age category system so I can I compare myself to those of a similar age. Probably only older people would like this.
I get that but you can scan up (or down) for reported age. Man I still get killed by those super aging athletes that have kept (or found) their strength somehow.
Why can’t Zwift Power be more integrated with Zwift? You do a race… You get unofficial results… Zwift Power processes everything..then updates everything on Zwift.
Still need to fix sand bagging. Still a major problem.
Go to Zwiftpower, Rankings>Individual Select C and 50-59 age group Guy in 1st place Race Ranking 98. 2 pts 1,166th He was 1st before CE and still 1st after. 15s 12 Wkg (61 st %) 1m 7.76 wkg (76 th %) 5m 4.61 wkg (55 th %) 20m 3.25 wkg (27 th %) 15s 960 w (68 th %) 1m 621 w (86 th %) 5m 369 w (65 %) 20m 260 w (34 %) I will leave it up to you to make your own judgement as to whether this person is managing their 20 min data or the… Read more »
Enjoyed racing in C category usually finishing in the top half but never getting on the podium, now i have been bumped to B category and spend most of my time at the back usually on my own after a kilometer or 2.
The opposite has happened to me. Gone from hanging on in B flat races until the final K or 2 and always being dropped on the hills to actually being in the mix in C races.
Very mixed feelings about it. Enjoying the races but my ego is bruised.