On my printer (3 leads screws, 4 bed screws) the bed.g looks like this and performs an automatic level:
M561 ; clear any bed transform
; If the printer hasn't been homed, home it
[more code ...]
; Probe the bed and do auto calibration
M558 H10 ; higher dive hight for yet to be levelled bed
G30 P0 X{move.axes[0].max/2} Y{move.axes[1].max+sensors.probes[0].offsets[1]} Z-99999
G30 P1 X{move.axes[0].max-10} Y10 Z-99999
G30 P2 X10 Y10 Z-99999 S-1
M558 H3 ; back to speed
while this is my "bed_level.g" macro for tuning the bed level screws:
; Check bed level
; Probe the bed
M558 H10
G30 P0 X{move.axes[0].max} Y{move.axes[1].min} ; probe near an adjusting screw
G30 P1 X{move.axes[0].min} Y{move.axes[1].min}
G30 P2 X{move.axes[0].min} Y{move.axes[1].max}
G30 P3 X{move.axes[0].max} Y{move.axes[1].max} S-1 ; probe near an adjusting screw and report adjustments needed
M558 H3
echo "Deviation:", move.calibration.initial.deviation ^ "mm"
As you can see the commands are the same really, so I must assume the difference is that one is called from a G32 command, vs the other is a standalone macro without any special meaning.