Sachverhalt: A. Die 1966 geborene S._, Mutter eines 2005 geborenen Sohnes, meldete sich im Oktober 2006 bei der Invalidenversicherung zum Leistungsbezug an. Mit Verfügung vom 2. Februar 2009 sprach ihr die IV-Stelle Basel-Stadt eine ganze Invalidenrente vom 1. März 2007 bis 31. August 2008 und eine halbe Invalidenrente ab 1. September 2008 bei einem Invaliditätsgrad von 55 % zu. Im März 2010 leitete die Verwaltung von Amtes wegen ein Revisionsverfahren ein, wobei sie neu einen Invaliditätsgrad von 34 % ermittelte. Nach Durchführung des Vorbescheidverfahrens hob sie die Rente mit Verfügung vom 23. März 2012 auf das Ende des der Zustellung folgenden Monats auf. B. Mit Entscheid vom 28. November 2012 hiess das Sozialversicherungsgericht des Kantons Basel-Stadt die dagegen erhobene Beschwerde (teilweise) gut, hob die Verfügung vom 23. März 2012 auf und sprach der Versicherten ab 1. Mai 2012 eine Viertelsrente zu. C. Die IV-Stelle führt Beschwerde in öffentlich-rechtlichen Angelegenheiten mit dem Rechtsbegehren, der Entscheid vom 28. November 2012 sei aufzuheben und die Verfügung vom 23. März 2012 zu bestätigen. Zudem ersucht sie darum, der Beschwerde aufschiebende Wirkung zu erteilen. S._ lässt auf Abweisung der Beschwerde schliessen und unentgeltliche Rechtspflege beantragen. Das kantonale Gericht verlangt ebenfalls die Abweisung, das Bundeamt für Sozialversicherungen hingegen die Gutheissung des Rechtsmittels. 