1959. július 13-án gyorsjáratként indult 147-es jelzéssel a rákospalotai Kozák tér és az újpesti Egyesült Izzó között az Arany János utca – Rákos út – Bajcsy-Zsilinszky (Illyés Gyula) utca – Hubay Jenő tér – Deák Ferenc utca – Dózsa György (Fő) út – Sződliget utca – aluljáró – Újpest, Fóti út – Váci út útvonalon. A járat csak a reggeli és a délutáni csúcsidőben közlekedett. 1960-ban útvonala Rákospalotán módosult, a Rákos út után a Régi Fóti út – Kazinczy utca – Pozsony utca – aluljáró útvonalon haladt. Egy éven belül betétjárata is indult 147A jelzéssel a Sződliget utcától az Egyesült Izzóig. A járat a 147-eshez hasonlóan kizárólag munkanapokon csúcsidőben járt. 1961. december 11-én a 147-es jelzése 96-osra,[1] a 147A járaté 96B-re módosult. 1962. február 26-án GY12-es jelzéssel gyári gyorsjárat indult a Kozák tértől az újpesti Pamutgyárig. A járat a 96-ossal a Fóti útig azonos útvonalon közlekedett. 1965-ben a 96B, 1966-ban pedig a GY12-es járat szűnt meg.
1972. január 17-én a 96-os Kozák téri végállomását áthelyezték az újpalotai Erdőkerülő utcához. 1973-ban 96A jelzéssel új járat indult Újpalota, Erdőkerülő utca és Újpest, Cérnagyár között. 1974. március 1-jén 196-os jelzéssel gyorsjáratot indítottak az Újpalota, Erdőkerülő utca – Újpest, Fóti út viszonylaton.
1975. június 2-án a 96-os, 96A és 196-os buszok újpalotai végállomását az Erdőkerülő utca és a Felszabadulás útja sarkán kialakított autóbusz-végállomáshoz helyezték át. 1977. január 3-án a 196-os gyorsjárat jelzése 96-osra módosult. Március 31-én a 96A jelzésű betétjárat megszűnt, ezzel együtt a 96-os útvonala módosult: az Egyesült Izzót körforgalomban, a Fóti út – Megyeri út – Váci út – Fóti út útvonalon közelíti meg és a 96A megszűnése miatt egész nap közlekedik.
A 2008-as paraméterkönyv bevezetésével összevonták a 47-es és 96-os járatot. Ebből a két vonalból jött létre a 96-os és 296-os busz, amelyek a korábbi 96-os útvonalán haladnak. A jelenlegi 96-os érinti a régi 47-es busz vonalát. Újpest, Fóti út (Cérnagyár) végállomás és a Baross utca közt a 47-es és a 96-os korábban azonos útvonalon közlekedett. Az új 96-os nem érinti a 47-es korábbi Irányi Dániel utca, Mildenberger utca, Nádor utca megállóhelyeit a Cérnagyár felé, illetve nem áll a Baross utca és az Irányi Dániel utca megállóban a Fóti út felé. Ehelyett Újpest, Fóti út felé a Nádor utcán éri el a Fóti utat, Újpalota felé pedig a Fóti út – Leiningen Károly utca – Szent Imre utca – Görgey Artúr utca útvonalon közlekedik a vasútállomásig. Az autóbusz a Szilágyi utcán keresztül tér vissza a régi 96-os útvonalára Rákospalota-Újpest vasútállomást elhagyva.
Útvonala
Újpest, Fóti út felé
Újpalota, Szentmihályi út vá. – Erdőkerülő utca – Zsókavár utca – Nyírpalota út – Páskomliget utca – Bánkút utca – Arany János utca – Bercsényi Miklós utca – Szerencs utca – Rákos út – Illyés Gyula utca – Hubay Jenő tér – Deák utca – Fő út – Sződliget utca – Pozsony utca – Szilágyi utca – Görgey Artúr utca – Szent Imre utca – Szent László tér – Türr István utca – Nádor utca – Fóti út – Megyeri út – Váci út – Újpest, Fóti út vá.
Újpalota, Szentmihályi út felé
Újpest, Fóti út vá. – Fóti út – Leiningen Károly utca – Szent Imre utca – Görgey Artúr utca – Szilágyi utca – Pozsony utca – Sződliget utca – Pázmány Péter utca – Bácska utca – Hubay Jenő tér – Illyés Gyula utca – Rákos út – Szerencs utca – Bercsényi Miklós utca – Arany János utca – Bánkút utca – Páskomliget utca – Nyírpalota út – Zsókavár utca – Erdőkerülő utca – Újpalota, Szentmihályi út vá.