Auto-populate linked records
Linked record fields don't auto-populate. Use automations, one-time conversion, or scripts to link records automatically.
Method 1: Airtable automations
Best for: recurring linking when new records are created or updated.
Setup:
- Trigger: When a record is created/updated in table A
- Action: Find records in table B (match by primary field)
- Action: Update record in table A → link to the found record(s)
Limitation: Can only match on primary field values. If you need to match on email or another field, see the UUID method below.
Method 2: One-time text-to-link conversion
Best for: bulk linking existing records that share a common identifier.
Steps:
- In table A, create a text field with values matching table B's primary field
- In table B, ensure the primary field values match those in table A's text field
- Convert the text field in table A to "Link to another record" → select table B
- Airtable will auto-link matching records
Note: This is a one-time operation. After conversion, new records won't auto-link.
Method 3: UUID-based script (match on any field)
Best for: matching on non-primary fields (e.g., email, external ID) or when you need flexible matching logic.
Setup:
- Add a
UUIDfield to the parent table (e.g.,Business) - Add a corresponding UUID field to the child table (e.g.,
businessUUIDinEmployee) - Populate matching UUIDs in both tables
- Run a script to link records based on UUID matching
Example script structure:
const parentTable = base.getTable("Business")
const childTable = base.getTable("Employee")
const parentUUIDField = parentTable.getField("UUID")
const childUUIDField = childTable.getField("businessUUID")
const linkField = childTable.getField("LINK to Business")
const parents = await parentTable.selectRecordsAsync({
fields: [parentUUIDField],
}).records
const children = await childTable.selectRecordsAsync({
fields: [childUUIDField, linkField],
}).records
for (const child of children) {
const matchingParent = parents.find(
(p) => p.getCellValue("UUID") === child.getCellValue("businessUUID")
)
if (!child.getCellValue("LINK to Business") && matchingParent) {
await childTable.updateRecordAsync(child, {
"LINK to Business": [{ id: matchingParent.id }],
})
}
}
UUID generator (for scripts):
const createUUID = () => {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0
const v = c === "x" ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}
External tools: Make (formerly Integromat)
For complex workflows or when you hit automation limits, use Make:
- Match on any field (not just primary)
- Handle multiple conditions
- Link across bases
- Transform data before linking
Common patterns
- Matching by email: Use UUID method with email as the UUID source
- Matching by name variations: Normalize names first (LOWER, TRIM, handle nicknames)
- Prevent duplicates: Check if link already exists before updating
Tips
- Generate UUIDs when creating records (via automation or form)
- Keep UUID fields stable—don't change them after linking
- Test scripts on a small subset first
- Consider using Make for production if you need robust error handling
References
Community discussion covering all three methods and UUID-based scripting: Automatically populating linked records