Skip to content
Kuovonne's Guide to Airtable
  • Pages
    • Kuovonne's Guide to Airtable
      • Fields
        • Overview of fields types
          • Editable Field Types
          • Computed Field Types
          • Field Types by Formula Data Type
          • Field Types in Scripting
        • Specific field types
          • Formula fields
            • Demystifying Formulas (DareTable 2022)
          • Rollup fields
          • Select fields
          • Attachment fields
            • Uploading Attachments
            • Attachment Size
            • Attachment URLS
            • Thumbnails
        • Converting Field Types
        • Naming fields
        • Metadata fields
          • Simple Metadata Fields
          • Data Validation
          • Additional Dependencies
          • Original Record URL (Thumbprint) Field
          • Column Divider Fields
          • DareTable 2023 Presentation
        • Field dependencies
      • Formulas
        • Formula Field Reference
        • Writing Formulas
          • Using AI to Write Formulas
          • General tips for writing formulas
          • Testing for Blank Values
          • Drafting Formulas in Parts
          • Function versus Operator
          • Typing Special Characters
          • Commenting Formulas
          • Formulas to avoid
        • Formatting Formulas
          • Basic Rules
          • Nested IF formulas
          • SWITCH Formulas
          • Operators
        • Specific Formulas
          • Ranges of Numbers Values
          • Comma Separated List of Fields Values with Optional Fields
          • Earliest / latest date across columns
          • List Fields Values (one per line) with Optional Fields
          • Rounding a date to the half year
          • Url of Interface Page for a record
          • Removing varying items from a list
        • Data Type Conversion in Formulas
          • Text to Numbers
          • Numbers to Text
          • Data type conversions with Dates
        • Troubleshooting Formulas
          • Formulas that won't save
          • Hiding or showing #ERROR!
          • Troubleshooting date/time/duration formulas
          • Troubleshooting numeric formulas
          • Troubleshooting formulas with lookups
          • Troubleshooting text formulas
      • Automations
        • Triggering automations
          • Triggering automations for typed values
          • Triggering automations on existing records
        • Sending Emails
          • Ways to send emails
          • Using links in emails
          • Emailing Attachments
        • Accessing updated record values
        • Third party automations
        • Managing automation runs
      • Templates
        • Templates for record values
        • Templates using field values
      • Controlling Access
        • Sharing a base
        • Access control considerations
        • Techniques for limited access
          • Airtable interface
          • Share link access
          • Synced table
          • Prefilled forms + Automations
          • 3rd party portal
          • 3rd party webhook
        • Preventing base duplication
      • Specific Solutions
        • Most recent form submission for ermail
        • Email digest of a person’s records
        • Sum of Multiple Select choices
        • Link to multiple records based on select choices
        • Dropping Lowest Score (top 4 of 5)
        • Identify the position of a record in a linked record field (top 4 of 6)
        • Sequential Numbering of Records
        • Ending a list of rollup items with ", and"
        • Table ID in a formula
        • Latest/earliest date across several fields
        • Associating People with Records
        • First Tuesday of the Previous Month
      • Miscellaneous
        • Web API Calls for External Integrations
        • Getting paid to work with Airtable
        • Hiring a consultant
        • Airtable Communities
        • Making major changes to a base
      • Suggestion for this guide

Original Record URL (Thumbprint) Field

Thank Kuovonne for creating this content!

Inspiration

When you duplicate a base, such as restoring from a snapshot, all the records get new IDs. This can make it difficult to find matching records across the original base and the duplicate. If you are restoring from a snapshot, something has already gone wrong.
One method is to a primary field that is always unique. A unique, yet meaningful primary field is always a good idea! However, Airtable does not enforce having unique field values (except for autonumber fields, which are not meaningful), and gives no warning when duplicate records are created. (It is possible to build systems that warn of duplicate records, but they are not foolproof.)
Another method is to use an autonumber field. However, if you create new records in both bases, the new records will have the same autonumber, but be very different records.

An alternative identifying field

I suggest having an {Original Record URL} field that uniquely identifies each record that is set via automation.
A record URL includes the IDs of the base, table, and record. This combination is guaranteed to be unique.
If records are created in both bases after the duplication, you can easily identify which base a record was created in.
If you are looking at a duplicate base, you can find the original base from the URL.
Clicking on the URL will bring you directly to the original record (if you have access to it).
An {Original Record URL} field looks more meaningful than an autonumber field and is less likely to be deleted by a well-meaning creator trying to clean up a base.

Setting the {Original Record Url} field

Because an {Original Record Url} field is not native to Airtable, it must be created as an editable field with an automation to set the value.
If you are worried about editors accidentally deleting the value of this field, you can lock down the permissions for the field so that only automations can edit it.

Method 1 (no code)

Use an automation when a record is created.

Pros and Cons of this method

Pros:
very easy to configure
{Original Record Url} field is filled out immediately
Cons:
requires an automation for every table
uses one automation run for every record

How to implement this method

Create the {Original Record Url} field in the table.
Create an automation that triggers when a record is created.
image.png
Configure the Update record action to update the triggering record with the record url.
image.png

Method 2 (No code - Scheduled Find Records)

Use a scheduled automation with a Find records action.

Pros and Cons of this method

Pros:
If many records are created throughout the day, this method can use fewer automation runs.
Cons:
Requires an automation for ever table.
Can update a maximum of 100 records per automation run.
During the delay between when a record is created and when the automation runs, the {Original Record Url} field will be blank.

How to implement this method

Create the {Original Record Url} field in the table.
Create a scheduled automation with your desired frequency.
image.png
For the Find records action, look for fields where the {Original Record Url} is empty.
image.png
For the repeating group, use the list from the Find records action.
image.png
For the Update record action, use the record ID and record URL from the current list item (not the Find records action).
image.png

Method 3 (Automation Script)

Use a scheduled automation that runs a script to update the {Original Record Url} field.

Pros and Cons of this method

Pros:
Uses only one automation slot, no matter how many tables are in your base.
Can update multiple hundreds of records, especially when chaining multiple instances of the script.
Cons:
During the delay between when a record is created and when the automation runs, the {Original Record Url} field will be blank.
Kuovonne’s script is not free.

How to implement this method

Get the script from
.
Create the {Original Record Url} field in each table.
Create a scheduled automation with your desired frequency.
image.png
Create a scripting action, paste the script into the editor, and setup the input variables. (You can leave the processedTableNames input variable blank for the first instance of the script.
image.png
Test the script.
image.png
If you might have more tables or records than can be processed by a single script, chain multiple instances of the script. For example, you might have more than 30 tables in your base, or you might have several hundreds of records that will need updating.
Duplicate the automation and set the processedTableNames input variable to the output from the previous script.
image.png
If you want to chain even more instances of the script, repeat the process, testing the script each time, and then updating the processedTableNames input variable for the new script to the previous instance.
image.png
Thank Kuovonne for creating this content!

Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.