hook_user_insert get form values?
Field data is stored in arrays.

Here is a sample user account information I save from information retrieved elsewhere:

 $roles = user_roles();
 $userinfo = array(
      'name' =&gt; $name,
      'pass' =&gt; user_password(),
      'init' =&gt; $name,
      'status' =&gt; 1,
      'access' =&gt; REQUEST_TIME,
      'roles'        =&gt; array(array_search('student', $roles) =&gt; 1),
      'field_first_name'   =&gt; array(LANGUAGE_NONE =&gt; array( 0 =&gt; array('value' =&gt; $ldap_details['first_name']))),
      'field_last_name'    =&gt; array(LANGUAGE_NONE =&gt; array( 0 =&gt; array('value' =&gt; $ldap_details['last_name']))),
      'field_secret_number'  =&gt; array(LANGUAGE_NONE =&gt; array( 0 =&gt; array('value' =&gt; $ldap_details['secret_number']))),
      'mail' =&gt; $ldap_details['mail'],
    );


So as you can see field data is stored as:
array(LANGUAGE_KEY =&gt; array(INDEX =&gt; array('value' =&gt; 'SOMETHING HERE')));

You just access/set it as you would any PHP array.

You may get stuck if you find your fields arent in the user record -- attached fields are not eagerly loaded you have to call a function to be sure they are attached to the User entity:

// For speed, typically Drupal does not attach additional fields to $user
// objects, if they are not found we request attached fields now.
if (!isset($account-&gt;field_first_name ) || !isset($account-&gt;field_last_name)) {
  field_attach_load('user', array($account-&gt;uid =&gt; $account));
}