Setting up how changes push back to your source
Sync writes your edits back to Google Sheets, HubSpot, Notion, Salesforce or Attio. (Lists from Airtable and Pipedrive can be reloaded from their source, but not written back.) Before the first sync, the Changes panel shows "Choose the key column": click Choose key column to open Configure Sync Settings, pick the field that uniquely identifies each record, and click Save & Enable Sync.
The Primary Key Field#
ListPlus needs one field that uniquely identifies each record — usually an
id field or an email address — to match a ListPlus row to the right
record in the source. The dropdown lists the list's columns that came from
the source; the service's record id (for example id for HubSpot,
_attio_id for Attio) is preselected when the list has it. Pick a column
with a unique value in every row.
Attio#
A list can be written back to Attio only when it was imported from Attio
"People" or "Companies". A list imported from "A list" (the entries of an
Attio list) cannot be written back, and the Changes panel does not offer
writing back for it. The key column is _attio_id, preselected in the sync
settings.
ListPlus writes text, number, date and select fields; the name (also "First name" and "Last name" on their own); the first e-mail ("Email"), the first phone ("Phone") and the first domain ("Domain"); and the location parts "City", "State", "Postal code" and "Country". It does not write "Company" and other references, "Other emails", "Other phones", "Other domains", or fields Attio maintains itself (interaction dates, "Created at", connection strength). Rows added in ListPlus are not created in Attio.
Attio refuses some values: a select value must be an existing option in Attio, a phone number must start with "+" and the country code, and "Country" must be the two-letter code (for example DE). When Attio refuses one value, nothing of that record is written and the change stays open with Attio's reason. Fix the value and sync again.
Handling conflicts#
If the source's value for a field changed since you edited it in ListPlus, that field is a conflict, and the source always wins: your edit for that field is replaced by the source's current value, and the panel tells you which fields ("{source} now holds: … – the list takes that"). There is no setting for this. When you click Write to {source} and the source has changed something, nothing is written yet: the panel says "{source} has changed in the meantime", marks the rows, and the button becomes Write anyway.
Only columns that came from the source are written back. Edits in columns you added in ListPlus stay in the list and are never sent ("stays in the list – the column is not from {source}").
You can reopen the settings any time with the gear button ("Change Settings") in the panel's "Target {source} · Key: {field}" row, without losing anything you've already synced.
Every member sees the open changes; only the workspace's owner and admins can choose the key and write the changes back. The changes are written under the login of the person who connected the account.
Related topics: sync-overview (which sources support sync back, updates existing records only, who can sync) · connect-crm-and-sheets.
For Google Sheets two checks protect your sheet: a cell that holds a formula is never overwritten (that change stays open and says so), and if rows were sorted or inserted while the sync was writing, the rows concerned are reported instead of counted as written — check them in the sheet.
FAQ#
How does ListPlus know which row matches which record when syncing back?#
You set a Primary Key Field in Configure Sync Settings (Changes panel → Choose key column) — a field like the record's ID or email that uniquely identifies it in the source. ListPlus uses that field to match each ListPlus row to its record.
What happens if the source record changed since I edited it?#
The source always wins: that field takes the source's current value in your list and your edit for it is not written. Nothing is written until you click Write anyway, and the panel marks the rows concerned; there is no setting to change this rule.
Does ListPlus suggest a primary key field for me?#
Yes — the dropdown lists the list's columns that came from the source, and the service's record id (for example id for HubSpot or _attio_id for Attio) is preselected when the list has that column.
Is my edit lost when the source changed the same field?#
Yes, for that field: the cell takes the source's current value, and the Changes panel tells you which fields it replaced. Your edits to other fields are still written.
Where do I set the primary key and conflict handling?#
Click "N open changes | Sync" in the status bar to open the Changes panel. The first time, click Choose key column, pick the key and click Save & Enable Sync; later the gear button ("Change Settings") in the panel's Target row reopens them — this doesn't undo anything already synced.
Does Sync push every field, or only the ones I changed?#
Only the fields you actually edited in ListPlus, and only in columns that came from the source, are compared and written; columns you added in ListPlus stay in the list. Rows with an empty Primary Key Field value, and rows you added in ListPlus, are skipped.
Can I write my changes back to Attio?#
Yes, for lists imported from Attio "People" or "Companies" — the key column is _attio_id, preselected in the sync settings. A list imported from "A list" (the entries of an Attio list) cannot be written back.
Which Attio fields does Sync write?#
Text, number, date and select fields, the name ("First name" and "Last name" too), the first "Email", "Phone" and "Domain", and the location parts "City", "State", "Postal code" and "Country". "Company" and other references, "Other emails", "Other phones", "Other domains" and fields Attio maintains itself (interaction dates, "Created at", connection strength) are not written; rows added in ListPlus are not created in Attio.
Why does an Attio change stay open instead of being written?#
Attio refused a value, so nothing of that record was written and the change stays open with Attio's reason. Common causes: a select value that is not an existing option in Attio, a phone number that does not start with "+" and the country code, or a "Country" that is not the two-letter code (for example DE). Correct the value and sync again.