Faits: A. Le 16 mars 2012, A._, domicilié à Savièse, a requis par l'intermédiaire de B._ un permis de construire un chalet sur la parcelle n° 9764 de la commune de Riddes. Helvetia Nostra a formé opposition. Par décision du 5 juillet 2012, la commune de Riddes a écarté l'opposition et délivré le permis de construire. Helvetia Nostra a recouru auprès du Conseil d'Etat du canton du Valais. Le 22 août 2012, celui-ci a déclaré le recours irrecevable faute de qualité pour recourir de l'organisation. Helvetia Nostra a saisi le Tribunal cantonal valaisan, lequel a rejeté le recours dans la mesure où il était recevable par arrêt du 23 novembre 2012. Il a mis à la charge de la recourante 1'000 fr. de frais judiciaires ainsi que 1'500 fr. de dépens en faveur des constructeurs. B. Le 21 décembre 2012, par la voie du recours en matière de droit public, Helvetia Nostra a demandé au Tribunal fédéral l'annulation de l'arrêt cantonal et le renvoi de la cause à l'autorité de dernière instance, subsidiairement la réforme de l'arrêt attaqué en ce sens que le permis de construire est annulé. Les intimés ont conclu à l'irrecevabilité, subsidiairement au rejet du recours. Les requêtes d'effet suspensif et de suspension de la procédure ont été admises par ordonnance présidentielle du 31 janvier 2013. Dans des arrêts de principe du 22 mai 2013, le Tribunal fédéral a notamment admis la qualité pour recourir d'Helvetia Nostra (ATF 139 II 271) ainsi que l'applicabilité directe des art. 75b et 197 ch. 9 Cst. (ATF 139 II 243 et 263). La procédure a été reprise par ordonnance du 2 juillet 2013. Après avoir pris connaissance des arrêts précités, les intimés ont modifié leurs conclusions par courrier du 8 août 2013. Ils demandent au Tribunal fédéral de renvoyer le dossier au Tribunal cantonal pour nouvelle décision sur le fond, sans annuler le permis de construire, et à mettre l'entier des frais judiciaires ainsi que les dépens à la charge de la recourante. Helvetia Nostra n'a pas été invitée à se déterminer, compte tenu de l'issue de la cause.