macOS gives you no fan readout at all. No RPM anywhere in Activity Monitor, System Settings or System Information, which is a strange gap for the one component in your Mac you can actually hear.
The reason is the same as for temperature. There is no public API for it. Fan speeds live in the System Management Controller, a separate coprocessor you reach through IOKit, and the request layout is undocumented.
Every fan app on the Mac is reading the SMC. The keys are not a secret at this point: FNum reports how many fans the machine has, and each fan then has a key for its live speed and two more for the range it can run in.
Putting it in the menu bar
AirStats is free and open source. Turn on Fan Speed as a menu bar metric in settings, or open the panel for the full thermal module with the range each fan can run in.
Min and max RPM are fixed properties of the chassis, so they get read once at startup rather than every cycle, and only the live speed is sampled continuously. An SMC read is a round trip to another chip and costs around 0.2 ms, which is not free, so it is worth not doing the same read forever.
Your fans probably say 0, and that is correct
This is the part that sends people looking for a second opinion, so it is worth saying clearly.
Apple silicon laptops park their fans completely. Not slow. Stopped, at 0 RPM. They stay stopped through everything most people do, and only spin up well past sustained high temperatures. A MacBook Pro reading 0 RPM while you work is the machine operating exactly as designed.
Some Macs have no fan at all. The Apple silicon MacBook Air is passively cooled. There is no fan to read, so FNum reports zero and a correct app shows you nothing rather than inventing a number.
A stopped fan and a failed read are different things, and an app that shows you 0 for both is lying to you half the time. In AirStats a failed read drops that fan out of the reading entirely, so a 0 you see is a real measurement of a real fan that is really not spinning.
When the fans do come on
Fan speed is a lagging indicator. By the time it is interesting, the answer is somewhere else, and the useful move is to look at what caused it rather than at the RPM.
- Fans up, CPU busy. Working as intended. Open the panel, check top processes, decide whether you meant to be running that.
- Fans up, CPU idle, temperature normal. Usually something outside the CPU: a charger, ambient heat, or a machine that was hammered a minute ago and has not caught up.
- Fans cycling up and down repeatedly. Something is waking periodically. A monitor with threshold alerts will tell you when it happens instead of you happening to be at the desk.
Which is the same conclusion as the temperature version of this question. Thermals are a symptom. The process list is the diagnosis.