Op 20 september 1839 opent de Hollandsche IJzeren Spoorweg-Maatschappij tussen Amsterdam en Haarlem de eerste Nederlandse spoorlijn. Beide steden krijgen hierbij een tijdelijk houten ontvangstgebouwtje. Met het verlengen van de Oude Lijn naar Leiden, neemt de HIJSM in 1842 aan de andere zijde van de Spaarne het definitieve stationsgebouw van Haarlem in gebruik. Het eerste echte stationsgebouw van Nederland is naar buitenlands voorbeeld van buiten geheel symmetrisch uitgevoerd. Het station bestaat uit een middendeel met een hoge poort die toegang biedt aan een overdekt pleintje met loketten. Aan beide zijden komen korte lage vleugels met wachtruimtes. Beide zijvleugels hebben een eindgebouw. Aan de linkerzijde komt de woning van de stationschef en aan de rechterzijde het goederenbureau. Aan beide zijden van het gebouw komt langs de gehele perronlengte een muur met drie poortjes en een eindgebouw. Met de komst van de nieuwe lijn naar Uitgeest in 1867 is het gebouw zodanig verbouwd dat het als tweede stationsgebouw gezien kan worden. Het oorspronkelijke stationsgebouw krijgt over de gehele breedte een extra verdieping. Het middendeel boven de entree krijgt bovendien nog een extra verdieping. Aan beide zijden van het gebouw komt een nieuw eindgebouw met een hoog middendeel en twee korte vleugels. Over de perrons en sporen komt een grote perronkap. Met een gevellengte zo’n 120 meter heeft Haarlem op dat moment het grootste stationsgebouw van Nederland.
In 1905 begint de aanleg van het verhoogde emplacement en de bouw van het geheel nieuwe stationscomplex. Een jaar later zijn het eilandperron en de vier perrongebouwen gereed en worden de stationsvoorzieningen hier ondergebracht. Hierna kan het oude stationsgebouw en de oude perronkap gesloopt worden. In 1908 zijn ook het zijperron, het ingangsgebouw, het uitgangsgebouw en de kappen over het emplacement gereed. Het stationsontwerp is het enige dat in Nederland in art nouveau is uitgevoerd. Het hoge entreegebouw is grotendeels symmetrisch, maar kent toch enkele verschillen. Het hoge middendeel krijgt een brede entree met drie dubbele deuren en daarboven een luifel en een halfrond venster. De entree wordt geflankeerd door twee verschillende torens. In het gebouw bevinden zich alleen de grote stationshal met loketten en een aantal dienstruimten. De hoge ontvangsthal krijgt een opvallende houten plafondconstructie. Links van het gebouw komt het asymmetrische uitgangsgebouw. Door de oorspronkelijke functie is het gebouw aanzienlijk soberder vormgegeven dan de entree. De 70 meter tussen beide gebouwen wordt overdekt met een overkapping. Beide gebouwen zijn via een reizigerstunnel verbonden met het zijperron en het eilandperron. Het grootste deel van de perrons en perronsporen zijn overdekt door een imposante overkapping die uit verschillende delen bestaat. De kap is in totaal 470 meter lang en hiermee de langste van Nederland. De perrongebouwen op het eilandperron zijn rijkversierd en zijn grotendeels uit houten elementen opgebouwd. Het seinhuis op het tweede perrongebouw vanuit het westen gezien, is zelfs geheel in hout uitgevoerd. In de middelste twee gebouwen zijn oorspronkelijk de meeste wachtkamers en de twee stationsrestauraties ondergebracht. De twee buitenste gebouwen bevinden zich voornamelijk dienstruimtes. In 1912 krijgt ook het zijperron een toiletgebouwtje. Het bakstenen gebouwtje komt helemaal aan de oostzijde van het perron.
In 1952 neemt NS aan de noordzijde van het station een extra perron en een nieuw entreegebouw met loketten in gebruik. Het nieuwe gebouw bestaat grotendeels uit beton en verglaasde stenen. Vanaf het nieuwe zijperron loopt het dak van het entreegebouw enigszins omhoog. Het stationscomplex blijft, op een aantal interne verbouwingen na, grotendeels in originele staat bewaard en is al sinds 1975 een Rijksmonument.
Op de foto boven dit artikel de hoofdentree van station Haarlem om 8 augustus 2021.