Minnows - under sin första säsong i toppflyget - plockade upp bara två poäng från deras öppning 10 matcher och var åtta poäng på drift av säkerhet i början av april.
Men en körning på sex segrar och två dragningar i sina sista nio matcher höll dem uppe.
De skulle ha gått ner om Empoli hade vunnit, men de förlorade 2-1 till Palermo för att drabbas av nedflyttning.
Crotones chanser innan kick-off såg inte bra ut som de stod inför femte plats Lazio, men de var välförtjänta vinnare.
Andrea Nalini och Diego Falcinelli - deras enda spelare att göra mål mer än fyra mål den här säsongen - gav dem en 2-0 ledning innan Ciro Immobile drog en tillbaka från ett straff.
Men Bastos skickades iväg för Lazio och Nalini fick en sekund när Crotone firade en av de mest kända dagarna i sin historia.
Matchändar, Crotone 3, Lazio 1.
Andra halvlek, Crotone 3, Lazio 1.
Substitution, Crotone. Andrej Kotnik ersätter Aleksandar Tonev.
Substitution, Crotone. Giuseppe Borello ersätter Diego Falcinelli.
Hörnet, Crotone. Förföljd av Giorgio Spizzichino.
Försöket räddades. Sergej Milinkovic-Savic (Lazio) höger fotade skott från utsidan boxen sparas i mitten av målet. Hjälpt av Ciro Immobile.
Försening över. De är redo att fortsätta.
Substitution, Crotone. Djamel Mesbah ersätter Andrea Nalini.
Försening i match Andrea Nalini (Crotone) på grund av en skada.
Alessandro Rossi (Lazio) vinner en frispark i den defensiva halvan.
Foul av Marcus Rohden (Krotone).
Försöket räddades. Gianmarco Ferrari (Crotone) huvud från vänster sida av sex yard box sparas i det övre vänstra hörnet. Hjälpt av Andrea Barberis.
Foul av Alessandro Murgia (Lazio).
Diego Falcinelli (Crotone) vinner en frispark i anfallshalvan.
Alessandro Murgia (Lazio) vinner en frispark i defensiva halvan.
Foul av Andrea Barberis (krotone).
Försök missade. Aleksandar Tonev (Crotone) höger fotade skott utanför lådan är för hög. Hjälpt av Andrea Barberis efter ett hörn.
Hörnet, Crotone. Förföljd av Giorgio Spizzichino.
Hörnet, Crotone. Förföljd av Giorgio Spizzichino.
Ersättning, Lazio. Giorgio Spizzizino ersätter Wallace.
Sergej Milinkovic-Savic (Lazio) vinner en frispark i defensiva halvan.
Foul av Andrea Nalini (krotone).
Ciro Immobile (Lazio) vinner en frispark på vänsterflygeln.
Foul av Federico Cecchirini (krotone).
Foul av Luca Crecco (Lazio).
Marcus Rohden (Crotone) vinner en frispark i den defensiva halvan.
Foul av Wallace (Lazio). - (EN) Herr ordförande!
Andrea Nalini (Crotone) vinner en frispark i anfallshalvan.
Ersättning, Lazio. Alessandro Rossi ersätter Felipe Anderson.
Ersättning, Lazio. Luca Crecco ersätter Lucas Biglia.
Försök missade. Diego Falcinelli (Crotone) vänster fotade skott från utanför lådan missar till höger.
Försening över. De är redo att fortsätta.
Försening i match Wallace (Lazio) på grund av en skada.
Försening i match Aleksandar Tonev (Crotone) på grund av en skada.
Foul av Wallace (Lazio). - (EN) Herr ordförande!
Diego Falcinelli (Crotone) vinner en frispark i defensiva halvan.
Försök blockerat. Ciro Immobile (Lazio) höger fotade skott från höger sida av lådan är blockerad. Hjälpt av Felipe Anderson.
Alessandro Murgia (Lazio) vinner en frispark i defensiva halvan.
Foul av Aleksandar Tonev (krotone).
Andrea Nalini (Crotone) visas det gula kortet för överdriven fest.
Crotone avslutade en av de största rymlingar Serie A har sett genom att slå Lazio på sista dagen att stanna uppe.