Sachverhalt: A. Die 1945 geborene D._, gelernte Schneiderin, arbeitete bis gegen Ende 1994 als Krankenpflegerin in einem Pflegeheim, seither als selbstständige Wirtin. Am 30. Dezember 2005 beantragte sie bei der IV-Stelle des Kantons St. Gallen eine Rente. Die IV-Stelle ermittelte eine 100-prozentige Arbeitsunfähigkeit in der bisherigen Tätigkeit, hingegen eine 50-prozentige Arbeitsfähigkeit in einer angepassten Tätigkeit, ein Invalideneinkommen von Fr. 21'357.- und aufgrund der im Auszug aus den individuellen Konten (IK) ausgewiesenen Einkommen der Jahre 2000-2003 ein Valideneinkommen von Fr. 22'700.-, was einen Invaliditätsgrad von 6 % ergab. Dementsprechend wies sie das Rentengesuch mit Verfügung vom 13. Juni 2006 ab; sie bestätigte dies mit Einspracheentscheid vom 25. Oktober 2006, wobei sie unter Berücksichtigung eines Valideneinkommens von Fr. 24'700.- und eines Invalideneinkommens von Fr. 22'473.- einen Invaliditätsgrad von 9 % bestimmte. B. Mit Entscheid vom 13. Mai 2008 sprach das Versicherungsgericht des Kantons St. Gallen D._ eine halbe Rente zu. C. Die IV-Stelle des Kantons St. Gallen erhebt Beschwerde in öffentlich-rechtlichen Angelegenheiten mit dem Antrag, der angefochtene Entscheid sei aufzuheben und der Einspracheentscheid zu bestätigen. D._ beantragt Abweisung der Beschwerde und Ausrichtung einer ganzen Rente ab 1. Januar 2005. Das Bundesamt für Sozialversicherungen schliesst auf Gutheissung. 