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
Use linked records in forms
Scripts and automations help you link existing records. But what about new data coming in?
Filla lets form users select linked records natively — with search, filtering, and the option to create new linked records inline. Submissions automatically populate linked record fields in your base. No scripts, no UUIDs, no manual matching.
Start free with 5 forms and unlimited submissions.
References
Community discussion covering all three methods and UUID-based scripting: Automatically populating linked records