We develop a tractable equilibrium model of the labour market, featuring heterogeneous labour supply elasticities across occupations that can be estimated in a baseline period using observed worker flows. We use this model to study the heterogeneous impact of subsequent demand shifts on wages and employment in Germany. We validate the estimated elasticities with external correlates, including occupational licensing and task distance. Cross-occupation effects, capturing the response to demand shifts in close substitute occupations, are particularly important for explaining the labour market’s response to shocks. Overall, heterogeneous supply elasticities play a key role in explaining occupational changes over recent decades.