Der Fluss entspringt in einem Sumpfgebiet nordwestlich des Aswejasees in Belarus nahe dem Drei-Länder-Eck zu Lettland und Russland, fließt nordwärts und bildet für 12 km die Grenze zwischen diesen beiden Staaten. Die nächsten 59 km bis zum Zil-See verläuft die Zilupe auf lettischem Territorium, bildet dann für weitere 4 km die Grenze und mündet auf russischem Territorium in die Welikaja. Die Breite des Flusses beträgt in Lettland 10–15 Meter, unterhalb Krasnogorodsk 30 Meter.
Größte Zuflüsse sind Plusona (27 km), Istra (39 km) und Werscha.
Größere Orte am Ufer sind Zilupe, Pogrow und Krasnogorodsk.