That is because your filter runs BEFORE ACF has saved any postmeta data.
Instead of using
get_field( "firstname" ), you will need to find the value from the $_POST array. Please note that all data is posted via it’s field key, not field name.
You can learn more about this in the docs.