You already know, from at least Jos and from me, that you performed your work correctly.
With the advent of solvers, I exploit KCL a bit more than I once did. More equations aren't a problem, as the solver does all the hard work for me. I focus on just getting things right and developing a methodology that works broadly and can be applied almost on automatic pilot, without investing a lot of hand-wringing.
I added a couple of currents to your diagram (and changed that R5 to an R7):
![enter image description here](https://cdn.statically.io/img/i.sstatic.net/26pSKAOM.png)
Then, for me, that goes something like this:
eq1 = Eq( v1/r1 + v1/r3, vin/r1 + v4/r3 ) # KCL V1
eq2 = Eq( v2/r2 + v2/r4, vin/r2 + v4/r4 ) # KCL V2
eq3 = Eq( v3/r5 + v3/r6, vout/r6 ) # KCL V3
eq4 = Eq( v4/r3 + v4/r4, io1 + v1/r3 + v2/r4 ) # KCL V4
eq5 = Eq( vout/r6, io2 + v3/r6 ) # KCL Vout
eqns = [ eq1, eq2, eq3, eq4, eq5, Eq( v1, 0 ), Eq( v2, v3 ) ] # Virtual V1=0 & V2=V3
unknowns = [ io1, io2, v1, v2, v3, v4, vout ]
na, da = fraction(simplify( solve( eqns, unknowns )[vout] / vin ))
factor(na) / da
(r5 + r6)*(r1*r4 - r2*r3)/(r1*r5*(r2 + r4))
I'm not saying it's better. Just wanted to offer you something to consider, as well. That kind of stuff just flows out of my hand without thinking, as I skim a schematic. I produce it almost without thought, now.