Two sheets are required
A spreadsheet PixWork syncs with needs both a sheet (tab) named Contacts and one named Companies. The names are matched exactly.
Contacts alone will not sync. Even if you only care about contacts, the Companies sheet is required — but a missing sheet and a wrong one are handled differently. If the Companies sheet doesn’t exist, or its header row is empty, the app can set it up with the user’s consent. If the header row is already filled in and the column layout doesn’t match, it is never overwritten: sync stops without writing anything.
Creating a new sheet from within the app sets up both sheets and their header rows. Selecting an existing sheet whose header row is empty also gets set up automatically, with the user’s consent. But a header row that is already filled in and doesn’t match is never overwritten — it produces an error instead.
Contacts — matched by name, order is free
Contacts columns are matched by header name (case-insensitive). You can reorder them, and you can insert your own extra columns between them, and sync still works.
What you cannot do is rename one: changing a header name takes that column out of sync entirely. Renaming "Name" to "Full Name," for instance, means that column stops syncing — and if the Name column in particular can’t be recognized, sync itself stops.
| Header | Default position | In the app | Sync behavior |
|---|---|---|---|
| Name | A | Editable | Identity key. App wins (never overwrites with a blank) |
| Job Title | B | Editable | App wins (never overwrites with a blank) |
| C | Editable | Primary identity key. App wins | |
| Phone | D | Editable | App wins. Compared as digits only, last 9 |
| E | Editable | App wins | |
| Website | F | Editable | App wins |
| Address | G | Editable | App wins |
| Status | H | Read-only | Sheet always wins. Dropdown |
| Assignee | I | Read-only | Sheet always wins |
| Next Action Date | J | Read-only | Sheet always wins |
| Event Name | K | Editable | App wins |
| Met Date | L | Editable | App wins. Date format variations treated as equal |
| Created Date | M | Read-only | Existing value preserved |
| Labels | N | Editable | App wins. Comma-separated; order and spacing differences treated as equal |
| Company Name | O | Editable | Link key to the Companies sheet. Part of the identity key |
| P | Editable | App wins | |
| Q | Editable | App wins | |
| R | Editable | App wins | |
| LINE | S | Editable | App wins |
| Last Updated By | T | Read-only | Overwritten with the email of whoever synced last |
"App wins" means the phone’s value is written to the sheet when the phone has one. When the phone’s field is empty, the sheet’s existing value is never cleared.
Status values
When the app creates the sheet, the Status column (H) gets these six dropdown options. You can put other values in from the sheet side, but the app reads these English values as the canonical set.
UncontactedContactedIn ProgressWonLostDeleted— setting this in the sheet marks the matching contact as deleted inside the app, so it drops out of the list. It does not remove the contact from the phone’s address book
The effect of Deleted stops inside the app. Setting Deleted in the sheet does not clear the contact from everyone’s phone address book — that is a common misreading and does not match the implementation. The OS address book entry is only removed when the contact is deleted from within the app (and only when a phone number is stored). Make this distinction explicit if you run the sheet with a team.
Companies — matched by position, order cannot change
The Companies sheet behaves differently from Contacts. Its first 14 columns must match the order below exactly. Renaming a column, reordering, deleting one, or inserting a column in the middle all mark the sheet incompatible, and sync stops without writing.
Column 15 onward is yours to use. Columns a user adds there are neither read nor written, and are never blanked out.
| Position | Header |
|---|---|
| A | Company Name |
| B | Industry |
| C | Size |
| D | Website |
| E | Summary |
| F | Conversation Starters |
| G | Strength 1 Title |
| H | Strength 1 Detail |
| I | Strength 2 Title |
| J | Strength 2 Detail |
| K | Strength 3 Title |
| L | Strength 3 Detail |
| M | Latest News |
| N | Last Updated |
Column F is named Conversation Starters. Some older material and samples show Deep Insights there — that is the former name. Getting this one header wrong makes the entire Companies sheet incompatible.
Why only Companies is strict about order
Contacts is read and written using header names as the reference. Companies is read and written using column positions directly — so if a position shifts, a value would be written into the wrong column.
To prevent that, PixWork stops without writing anything the moment it detects a mismatch (fail-closed). The design assumes a stopped sync is better than corrupted client data. When sync stops, this column order is the first thing to check.
What gets synced, and how values are compared
- Only contacts updated within the last 90 days are synced. Anything older stays untouched unless it’s edited in the sheet
- Identity matching uses Email alone when an email exists. Only when the email is empty does it fall back to name + company name. Two people with the same name at different companies are treated as different people
- Phone numbers are compared as digits only, on the last 9 digits. Hyphens and country-code differences are treated as the same number
- Dates are normalized only in year-first formats (
2026-08-04/2026/08/04/2026.08.04). Ambiguous formats like7/8/2026are not guessed at — they’re treated as opaque text - Labels are comma-separated, and differences in order or surrounding spaces are treated as the same value
When migrating an existing sheet, check whether date columns are in an ambiguous format like 7/8/2026. Converting them to a year-first format avoids spurious conflicts.