Here's the function in the badges plugin that is adapted from the core; it checks whether all fields are filled out, but of course you can do other things with the info:
function check_user_fields($userid,$params) {
list($useraccount, $userprofile, $userfields)=qa_db_select_with_pending(
qa_db_user_account_selectspec($userid, true),
qa_db_user_profile_selectspec($userid, true),
qa_db_userfields_selectspec()
);
// avatar badge
if (qa_opt('avatar_allow_upload') && isset($useraccount['avatarblobid'])) {
$badges = array('avatar');
qa_badge_award_check($badges, false, $userid);
}
// profile completion
$missing = false;
foreach ($userfields as $userfield) {
if(!$userprofile[$userfield['title']]) {
$missing = true;
break;
}
}
if(!$missing) {
$badges = array('profiler');
qa_badge_award_check($badges, false, $userid);
}
}