The White Ferns will play West Indies in their T20 World Cup semi-final after a dramatic last game of group play.
West Indies, the 2016 World Cup winners, beat England by six wickets in Dubai to eliminate the English from the play-offs.
West Indies, South Africa and England all finished group play on six points, with the English missing out on the semi-finals on net run rate.
After being asked to bat first England made 141 for seven with Nat Sciver-Brunt top scoring with an unbeaten 57.
In reply, West Indies got off to a rollicking start getting through to 102 before losing their first wicket in the 12th over.
They were also helped by England dropping numerous catches.
The Caribbean side got home with two overs to spare, finishing on 144 for four.
Qiana Joseph made 52 and captain Hayley Matthews 50.
"I don't think many people had us reaching this point in the tournament so I'm incredibly proud of the group," captain Matthews told the ICC afterwards.
"We were up against all odds today and the way we came out in the first half with the ball and then to put on a performance with the bat with Qiana Joseph scoring her first 50... what a time to do it.
"It's going to be a big game against New Zealand, but we're up for the challenge."
It is the first time the West Indies have beaten England in 14 matches.
Australia, who topped group A, will play South Africa in Dubai on Friday morning and New Zealand will play West Indies in Sharjah on Saturday morning.
Sign up for Ngā Pitopito Kōrero, a daily newsletter curated by our editors and delivered straight to your inbox every weekday.