A customer's phone number lives in two places: Salesforce, where the sales team maintains it, and the Customers table in Airtable, where an integration writes a copy through Airtable's API for the support team. The ownership map says Salesforce owns Phone and Airtable only reads it. Nothing in the base enforces that, though. Any editor can type over the number in the grid, an interface with an editable Phone field lets a support agent change it mid-call, and any integration with a token for the base can write to it. When one of them does, Airtable and Salesforce disagree until the integration next writes that record, or, if the integration also writes back to Salesforce, the wrong value travels the other way.
InAir's guide to operating Airtable inside complex, high-volume system landscapes sets the rule in its Non-Authoritative Read-Only Lock: "If a system is not authoritative for a field, it must not write to that field." Cross-System Source of Truth decides which system owns each field. This post covers how to make that decision hold inside Airtable: which account the integration should write as, how to restrict the field to it, what the restriction covers and what it doesn't, and how to test it.
Airtable's field editing permissions let a base's Owners and Creators restrict who can edit the values in a field. They're available on Team, Business and Enterprise Scale plans, and they aren't limited to the grid. Airtable's documentation says they apply "anywhere that edits can be made," naming interfaces, the mobile apps, extensions and the API. For integrations, the same article answers the exact question this post is about: editing can be limited to an integration "if you limit editing to the specific user whose personal access token is used by the API script or integration," or, for OAuth integrations, to "the user who authorized the OAuth integration."
That makes the lock an account-level rule. The permission is set per user, not per token or per integration, so the field can be locked to the integration only if the integration is the only thing writing as that account.
|
Where the write comes from |
Blocked when the field is restricted to the integration's account? |
|---|---|
|
A collaborator editing in the grid |
Yes |
|
An interface, including one where the field looks editable |
Yes |
|
Another integration using a different user's token |
Yes |
|
An OAuth connection authorized by a different user |
Yes |
|
An extension in the base |
Yes |
|
A local automation writing the field |
Yes, once “Allow this field to be modified by automations” is unticked |
|
CSV imports |
Yes. It’s an extension, so it follows the user’s permissions |
|
An Owner or Creator changing the permission itself |
No: they can change or remove it |
|
A form |
Yes, once “Allow this field to be set in records created through forms” is unticked. Forms can’t edit existing records anyway |
The “permissions” row is the one real limit of the lock. The permission controls who can edit a field’s values, and the documentation is explicit that it doesn’t control who can change its configuration, so anyone with Owner or Creator access can still lift it. Automations and forms are blocked only if the matching options are unticked when the permission is set: “Allow this field to be modified by automations” and “Allow this field to be set in records created through forms.”
The lock only works if the integration writes through an account that nothing else uses. An integration running on a person's own token fails that test in two ways. Restricting Phone to that person still lets them edit it by hand, and every other integration they've connected with the same account inherits the right to write it. It also depends on that person staying: if their account is removed, the integration loses its access.
There are two ways to set it up, depending on how many integrations write to the base.
The fewer integrations an account serves, the fewer systems the lock has to trust.
The Integration Load framework treats ownership as one of its containment factors, and this is where an ownership decision becomes something the base checks rather than something people remember.
Create the account. Set up a dedicated Airtable account for the integration, as described above.
If anyone, or anything, currently writes the field besides the integration, find out before step 5. The pillar’s version of this example runs a logging phase first: a Last modified by field scoped to Phone shows who made the latest change, and an automation logs every edit not made by the integration’s account to a review table without blocking it. Once that log shows nothing unexpected, the restriction goes on. Any automation that still writes Phone will start to error once the lock is on, so update or turn off those automations before step 5.
Keep the order in mind if the integration’s credentials ever change. If it moves to a new account before the field’s permission is updated, the new account won’t be allowed to write Phone, so update the permission to the new account as part of the switch.
When Someone Needs to Change the Value
The lock removes an option people were using. A support agent who hears a new number on a call still needs somewhere to put it, and if there isn't one, the number ends up in a notes field or a message, or the agent asks someone with Creator access to lift the lock.
The answer follows from the ownership map: the change goes to whoever owns the value in Salesforce, and the integration brings it back to Airtable. What makes that work, and keeps it from turning into a two-way sync, is a separate field for the reported number. Add a Reported Phone field to the Customers table that support agents can edit, and the integration never reads or writes. An agent who hears a new number on a call enters it there; Phone stays locked. Make the rest the easy path: a button on the support team’s interface can flag the record for review and notify the account owner, who checks the number and updates Salesforce. The new number then reaches Phone on the integration’s next run, from the only account allowed to write it, and the agent can clear Reported Phone once the two match.
Run these in a copy of the base, with the integration pointed at it, ideally from a Salesforce sandbox, and check that the field's permission is set in the copy before you start:
If your team also updates data through CSV imports or other extensions such as scripting, test each of those the same way, since the documentation doesn't address them.
If you have fields that other systems own and people in Airtable still edit, and you'd like each one locked to the account that should be writing it, Schedule a Discovery Call with InAir and we'll set it up with you.