Faits: A. Par contrat du 29 septembre 1995, V._ SNC ont cédé à H.Y._ et sa fille A.Y._, moyennant le paiement d'un loyer mensuel, l'usage d'un appartement de cinq pièces destiné à l'habitation dans l'immeuble sis 29 rue ... à Genève. Le bail, conclu initialement du 1er octobre 1995 au 30 septembre 1996, était renouvelable ensuite tacitement d'année en année, sauf congé donné trois mois à l'avance. A la suite du décès de H.Y._, A.Y._ est devenue l'unique locataire du logement au terme d'un avenant du 15 février 2006. A une date indéterminée, V._ SNC ont vendu l'immeuble à W._ SA, laquelle a vendu l'appartement cité à X._ SA le 11 décembre 2006. La société X._ SA, qui a son siège à Genève, est active dans le domaine de l'achat et de la vente de biens immobiliers. Elle a acheté l'appartement en cause dans un lot de sept appartements, sis 29 et 31 rue ..., pour lesquels elle a payé 4'226'000 fr. Elle a revendu six de ces sept appartements, respectivement en date du 3 décembre 2007, du 27 mai 2008, du 18 décembre 2008, du 3 septembre 2009, du 30 mars 2010 et du 29 novembre 2010, pour un montant total de 6'950'000 fr. Par courrier du 28 octobre 2008, X._ SA a informé A.Y._ de son intention de vendre l'appartement qu'elle occupait pour la somme de 1'500'000 fr. Elle lui a proposé d'acheter son logement, tout en précisant qu'elle avait déjà des acquéreurs privés intéressés par ce bien pour leur usage personnel. Par avis de résiliation du 7 septembre 2009, X._ SA a résilié le bail de A.Y._ pour le 30 septembre 2010, au motif qu'elle entendait vendre l'appartement libre de tout occupant. La locataire s'est opposée à la résiliation du bail. B. Par décision du 26 mai 2010, la Commission de conciliation en matière de baux et loyers du canton de Genève a déclaré la résiliation valable et a accordé à la locataire une prolongation du bail de trois ans, soit jusqu'au 30 septembre 2013. La commission a estimé que la résiliation ne constituait pas un congé-vente et que la locataire n'avait pas démontré l'existence d'une disproportion évidente entre les intérêts en présence. A.Y._ a saisi le Tribunal des baux et loyers du canton de Genève, sollicitant l'annulation du congé, subsidiairement une prolongation de bail de quatre ans, échéant au 30 septembre 2014. En cours de procédure, il a été établi que A.Y._ exerçait la profession de médecin hospitalier et réalisait un salaire net mensuel d'environ 8'000 fr. Elle vit dans l'appartement avec sa mère F.Y._, alors âgée de 69 ans, dont les revenus bruts s'élevaient à 58'709 fr. par an et qui disposait d'une fortune mobilière nette de 746'903 fr. A.Y._ a déclaré qu'elle était prête à déménager à la campagne si cela était nécessaire. Le représentant de la bailleresse a expliqué que celle-ci vendait ses appartements à des acquéreurs, qui généralement souhaitaient y habiter eux-mêmes; il était donc important pour elle que l'appartement soit libre de tout occupant au moment de la vente. Le réviseur de la société a affirmé que celle-ci devait vendre avec profit un ou deux objets chaque année, faute de quoi elle subirait des pertes qui pourraient l'obliger à cesser son activité. Il a été indiqué que les revenus de la société provenaient à raison de 60% à 80% de la vente des appartements; la société verse des salaires à trois employés, dont un courtier qui bénéficie de commissions en fonction des ventes effectuées. Par jugement du 18 octobre 2011, le Tribunal des baux et loyers a annulé le congé notifié le 7 septembre 2009. Il a considéré que le congé revêtait un caractère purement spéculatif. Saisie d'un appel formé par la bailleresse, la Chambre des baux et loyers de la Cour de justice genevoise, par arrêt du 29 juin 2012, a confirmé le jugement attaqué. La cour cantonale a estimé en substance que le congé était abusif parce que la bailleresse se livrait à la spéculation immobilière. C. X._ SA exerce un recours en matière civile au Tribunal fédéral contre l'arrêt précité. Invoquant l'interdiction de l'arbitraire ainsi qu'une violation des art. 8 CC et 271 CO, elle conclut à l'annulation de cette décision, à ce qu'il soit constaté que le congé donné pour le 30 septembre 2010 est valable et à ce qu'aucune prolongation du bail ne soit accordée à la locataire; subsidiairement, elle demande le renvoi de la cause à la cour cantonale. L'intimée propose le rejet du recours. La recourante a répliqué. 