Barcelona's dismal start to the LaLiga season continued as a second-half winner from substitute Alvaro Negredo handed Cadiz another major top-flight scalp.
Ronald Koeman's men had banked on a fortunate own goal to haul themselves level after Alvaro Gimenez bundled the buoyant home side into an eighth-minute lead.
But an embarrassing defensive mix-up in the 63rd minute handed Negredo the chance to hit the winner with his first touch moments after replacing Gimenez and they held on for a 2-1 win.
Having already sunk Real Madrid on their return to the top-flight, the hosts started with confidence against their seventh-placed opponents.
But Gimenez's opener invited a period of intense pressure as Cadiz keeper Jeremias Ledesma made brilliant saves to deny both Lionel Messi and Philippe Coutinho before half-time.
But Barcelona failed to make the most of their opportunities and were almost made to pay early in the second half when Marc-Andre Ter Stegen made a crucial interception to deny Gimenez a second.
Barca levelled in fortunate fashion in the 57th minute when Jordi Alba's cross hit Pedro Alcala who diverted the ball into his own net.
But within five minutes Cadiz were back in front after Alba's throw back towards his own area caused panic in the visitors' rearguard and allowed Negredo to grab his side's second.
Sergio Busquets fired wide and Messi was once again denied by Ledesma but Cadiz had a good chance to extend their lead when ter Stegen denied Ivan Alejo.
Heading into injury time, Cadiz substitute Bobby Adekanye wasted an opportunity when he was sent clean through, and the game ended with Messi flopping a free-kick into the Cadiz wall.