Populate ACF user-profile fields on import

UsersIntermediate~20 min

Before you start

A connected site with ACF active, user reads on, and the ACF user field abilities enabled. The agent user needs edit access to the users. Take a database backup before a large run.

You have a spreadsheet of team details, job titles, social links, a one-line bio, and a set of ACF fields on the user profile waiting to hold them. Typing them into each profile by hand is slow and error-prone, especially once the roster runs past a dozen people. This moves the values across in a controlled way, matched to real accounts, and shown to you before anything saves.

Because it writes to profiles, it runs the two-pass, wait-for-approval flow, and it works only with ACF fields that already exist.

The prompt
I have a spreadsheet of profile details and matching ACF user fields to fill.
ACF is already active and the user field group already exists. Here is the
data:
[paste rows: email, job_title, twitter_url, short_bio ...]
First pass, change nothing: match each row to an existing user by [email], read
the current ACF values on those users, and hand me a before-and-after table for
the first [10], current value beside the value from my sheet. Only fill blanks
unless I say otherwise, and list any row you cannot match to a real account.
I will tell you which to keep. Only after I say so, write the approved ACF
field values by field key, in small batches, showing me each batch before it
saves. At the end, list every user you changed and every row you had to skip.

Why this is safe to run

The whole first pass is reads. Matching rows to users, reading their current ACF values, and building the before-and-after table writes nothing, so you see every proposed value before a single field is saved. Reading the current values also lets it fill gaps instead of overwriting details someone already curated.

The write is scoped tightly to ACF. It writes field values by field key, each sanitized for its field type, and it never creates or edits a field group, so the shape of your fields is off limits to the agent. ACF has to be active and the agent needs edit access to the users, the ACF user field abilities stay off until you enable them, every call is checked against the capability of the user you bound the agent to, and every write lands in the Activity Log with the account it changed. If a value looks wrong, the log tells you exactly which profile to open.

Already connected? You do not have to paste this at all. Ask your agent for the “populate ACF user-profile fields on import” recipe, hand it your rows, and it runs the same two-pass flow on your own accounts.

How it works

  1. Match each spreadsheet row to an existing user so values land on the right account.
  2. Read the current ACF field values on each matched user so it fills gaps rather than clobbering good data.
  3. Show a before-and-after table for a small sample and wait for your approval.
  4. Write the approved ACF field values by field key, in small batches, pausing to show each batch.
  5. Return every user it changed and note any spreadsheet rows it could not match.

Questions

Does this create the ACF fields for me?
No. ACF must already be active and the user field group must already exist. This recipe only reads and writes the values in those existing fields; it never creates or edits a field group. If a field you expect is missing, that is an ACF setup step, not something the agent does.
What if a spreadsheet row does not match a user?
It skips that row and reports it rather than guessing. Matching is by the key you choose, usually email, and any row it cannot line up with a real account is handed back to you as an unmatched list so you can sort it out.