就在苻坚与慕容冲在关中相攻正盛之时,姚苌于(384)五月先进屯到了北地,在那里姚苌厉兵积粟,静观时变。此时前秦华阴、北地、新平、安定有十余万羌胡来降,姚苌势力大增。由于北地一失直接威胁长安。因此,为保长安苻坚统步骑二万御驾亲征以击姚苌,屯兵赵氏玛(今陕西铜川市北)。此战苻坚用兵颇为周密,他首先派遣护军将军杨璧以骑兵三千横截姚苌的归路,又命右将军徐成、左将军窦冲、镇军将军毛当等对姚苌轮番攻击,频频进攻,苌军则是屡尝败绩。同时,苻坚还在安公谷(今陕西铜川市北)上筑堰以塞同官水(今陕西铜川市漆水河),切断姚苌的水源。苌军中无井,干渴异常。保据频阳(今陕西富平县东北)的游钦虽遣军运送粮、水给姚苌,但均为杨璧尽获之。姚苌无奈,命其弟姚尹买统领精锐二万,企图挖堰放水。结果为窦冲大败于鹳雀渠折损一万三千有余,姚尹买为窦冲阵斩。很快夜军中已有渴死者,就在军队士气低落之时,下起大雨,苌军营中水涨三尺,士气大振。苻坚叹曰:“天亦佑贼乎!”这一偶然事件,却使双方将士的心理却受到不小影响,认为苻坚确实气数已尽,姚苌则是天命所归。
六月,西燕内乱,慕容泓被杀,慕容冲继位。姚苌首先遣使与慕容冲通好,并以子姚嵩为质。接着命其弟姚绪拥守杨渠川大营,亲统七万大军全力反击,一举挫败苻坚,并俘获杨璧、毛盛、徐成、齐午等前秦高级将领数十人。此役之后,诸将认为要乘胜追击攻下长安,认为此时应先据长安,而后以制天下。然而,姚苌得知慕容冲已逼近长安,因此他并不急于进攻长安,难免失误。乃谓诸将曰:“燕因怀旧之土而起兵,若功成事捷,咸有东归之思,安能久固秦川!吾欲移兵岭北;广收资实,须秦弊燕回,然后垂拱取之。兵不血刃,坐定天下,此卞庄得二之义也。”此时,原苻坚所徙晋人(即汉族)李详率数千户降姚苌。长安告急之时,前秦各地守将皆率众赶来支援,苻坚宁朔将军宋方率骑三千从云中(今内蒙古托克托县东北)将赴长安,被苌在贰县(今陕西黄陵县西北)击破,只有宋方一人单马突围,其余部众在其司马田晃的带领下全部投降姚苌。姚苌乃留长子兴守北地,宁北将军姚穆守同官川,自率部众攻新平(今陕西彬县)。但是,一切并非如姚苌想象的顺利。新平太守苟辅在其郡人辽西太守冯杰、莲勺令冯羽、尚书郎赵义、汶山太守冯苗支持下率众凭城固守、拼死抵抗。土山地道,姚苌使用各式进攻手段,苟辅则或战山上,或战地下,皆应对自如,后秦损兵折将万有余,却一无所得。
次年正月,姚苌留兵围城,自率大军击安定,此役姚苌生擒前秦安西将军苻珍,岭北诸城悉降之。此时,为慕容冲节节逼退,困守无援的苻坚企图以“帝出五将久长得”的图谶之言来扭转局面,而自率军出奔五将山(今陕西岐山县东北)入陇以收兵运粮,留太子苻宏守长安。五月,苻宏便不敌慕容氏的进攻,无力据守长安,在数千骑之护卫下,带领母妻、宗室等西奔下辨(今甘肃成县西北),最后奔降于东晋。前秦朝中百官也是四处逃散,司隶校尉权翼则带领百人投奔了旧主姚苌。慕容冲旋即占领了长安,纵兵大掠,死伤无数。这时,姚苌再次围攻新平,城中粮草已尽,加之外援不至,苟辅已难支撑。姚苌许诺苟辅带领下属撤回长安,决不留难。然而,当苟辅带领民众一万五千余人才出城,姚苌便围而坑之,无一幸免。姚苌听闻苻坚出奔五将山的消息,即遣骑骑将军吴忠统骑兵追击。七月,吴忠包围五将山,秦军散走,苻坚被俘,将其押至新平。苻坚被俘后,姚苌曾遣使求苻坚将国玺传与自己,坚不但不允,且怒斥姚苌曰:“小羌乃敢干逼天子,岂以传国玺授汝羌也,图纬符命,何所依据?五胡次序,无汝羌名。违天不祥,其能久乎!玺已送晋,不可得也。”最终,苻坚为姚苌溢死于新平佛寺中,在晋阳的坚子苻丕乃自立为帝,改元大安,各地苻氏势力及原拥护前秦的地方势力,又稍集于苻丕之下。
关中旋即成为西燕和姚苌的角逐之地。太元十年(385)十月,慕容冲遣其车骑大将军高盖所领五万余众伐姚苌,为苌击败,高盖投降了姚苌,苌拜其为散骑常侍。但是,慕容冲据有长安后,考虑到当时关东已是慕容垂的天下,此时若东返对其个人来说有弊无利,因此改变原计划,欲久据长安,却引起所部鲜卑大为不满。于第二年二月,爆发内讧,慕容冲被杀,其将军段随被推为燕王,改元昌平。三月,段随又被慕容恒及慕容永袭杀,二人立慕容顗为燕王,改元建明。至此,西燕才决策东归,途中又爆发内江,经过一系列的杀戮,最后是慕容秘之子慕容忠成为西燕主,停驻闻喜(今山西闻喜县)。六月,西燕内订再起,慕容永被推为大单于、大将军,称藩于后燕。
西燕离开关中后,长安空虚,杏城卢水胡郝奴趁机称帝于长安,渭北诸族皆应之。姚苌则从安定出兵,进军长安,击败郝奴等,据长安;终于在太元十一年(386)四月,正式即皇帝,改元建初,建国号大秦,改长安曰常安。追尊其父弋仲为景元皇帝,子兴为呈太子,置百官。自谓以火德承苻氏木行,服色如汉氏承周故事。并徙安定五千余户于长安。