This guide covers two Zaps that work together to keep an Airtable Asset Index up to date. The first logs new assets to Airtable when they are uploaded to Frame.io. The second marks records as deleted in Airtable when the corresponding file is deleted in Frame.io.
What you'll need
A Frame.io V4 account with Account Admin permissions
A Zapier account
An Airtable account with an Asset Index table configured (see below)
How these Zaps work together
Every asset uploaded to Frame.io is assigned a unique asset ID. This ID never changes and stays with the file regardless of where it is moved or renamed. It is the key that links both Zaps together. The first Zap logs the Resource ID to Airtable when an asset is created, and the second Zap uses that same ID to find and update the matching record when the file is deleted. Without the Resource ID field in your Airtable table, the second Zap cannot find the record to update.
A note on filters
By default both Zaps run for every asset across your entire workspace. For larger teams or accounts with multiple active projects, adding a filter to scope each Zap to a specific projects is strongly recommended. See Add a Filter to Your Frame.io Zap for instructions.
Airtable Setup
This guide does not cover the setup of the Airtable. Both Zaps are preconfigured to work with an Airtable Asset Index table with the following fields. These fields can be adjusted to match your team's existing table structure.
For logging assets:
Name
Download Link
View Link
Asset Type
Date Uploaded
Project
Uploader
Thumbnail
File ID
For marking deleted assets:
Name
Deleted At
Deleted
File ID
Note: The File ID field is used by both Zaps to identify and match records. Make sure this field exists and is consistently named in your table.
Step 1: Open the template
Click the button below
When the template opens, the guided setup wizard will launch automatically. Before exiting, confirm the Zap has been given a name and saved to the desired folder location. Then click Cancel, then Close setup to exit. Your Zap is saved and you can continue in the Zap editor.
Step 2: Connect your accounts
Frame.io: Select the account associated with the workspace where your Action is configured.
Airtable: Select the account that contains your Asset Index table.
Step 3: Set up the webhook and test the event trigger
Copy the webhook URL from the Test tab of the Catch Hook trigger step in Zapier.
In Frame.io, go to next.frame.io/settings/webhooks and create a new webhook.
Paste the Zapier URL into the URL field and subscribe to the file.ready and file.copied events. See Set Up Webhooks in Frame.io for full instructions.
To fire a test trigger, upload a file to your workspace and wait for it to finish processing. Return to Zapier and confirm the Catch Hook step has received the payload.
Zapier needs to receive the webhook payload before the later steps can be configured. Without it, fields including account ID, workspace ID, project ID, and asset (resource) ID will show an error and cannot be mapped. Once the payload arrives and each step is configured, click Test step to confirm data is flowing correctly before moving on.
Step 4: Confirm dynamic (custom) field mapping in the Show File step
Confirm the following fields in the Show File step are mapped to dynamic (custom) values from the webhook payload:
Account: Account Id from the webhook payload
File: Resource Id from the webhook payload
Each field must use the dynamic (custom) value from the payload, not a static value. Static values lock the Zap to a single hardcoded asset and it will run on that asset every time, regardless of what triggered the action.
Click Test step to confirm data is flowing correctly before moving on.
Step 5: Confirm the Show Project step
The Show Project step retrieves the project name using the project ID from the webhook payload. Confirm the following fields are mapped dynamically:
Account: Account Id from the webhook payload
Workspace: Workspace Id from the webhook payload
Project: Project Id from the webhook payload
Click Test step to confirm data is flowing correctly before moving on.
Step 6: Configure the Airtable step
Select your Airtable Base and Table. The following fields are mapped dynamically from Frame.io and should not be changed:
Name: file name
Download Link: original download URL
View Link: Frame.io view URL
Asset Type: media type
Date Uploaded: file created date
Project: project name from the Show Project step
Uploader: creator name
Thumbnail: thumbnail URL
File ID: resource ID from the webhook payload
Click Test step to confirm data is flowing correctly before moving on.
Step 7: Publish the Zap
Click Publish. The Zap is now live.
Mark Deleted Frame.io Files in Airtable
When an Action is triggered on a file that has been deleted in Frame.io, this Zap finds the matching record in your Airtable Asset Index and marks it as deleted.
Step 1: Open the template
Click the button below
Step 2: Connect your Airtable account
Frame.io: Select the account and workspace you want to monitor for deleted files.
Airtable: Select the account that contains your Asset Index table. This must be the same table used in Part 1.
Step 3: Configure the Frame.io trigger and test
Select your Frame.io Account and Workspace. The trigger fires automatically when a file is deleted in the selected workspace.
To fire a test trigger, delete a file from your workspace. Return to Zapier and confirm the trigger step has received the event.
Click Test step to confirm data is flowing correctly before moving on.
Step 4: Confirm the Airtable search step
The search step finds the Airtable record that matches the deleted file using the File ID from the webhook payload. Confirm the following:
Base: your Airtable base
Table: your Asset Index table
Search field: File ID
Search value: mapped dynamically from the Resource Id in the webhook payload
Click Test step to confirm the correct record is being found before moving on. A record will need to exist for for this test to work.
Step 5: Confirm the Airtable update step
The update step marks the matched record as deleted. It is pre-configured to:
Prepend (deleted)_ to the file name
Set the Deleted At field to the current timestamp
Set the Deleted field to true
Confirm your Airtable Base and Table are correctly selected. The record ID is mapped dynamically from the search step and should not be changed.
Step 6: Publish the Zap
Click Publish. The Zap is now live. When a deleted file Action is triggered in Frame.io, the matching Airtable record will be updated automatically.
Troubleshooting
Catch Hook is not receiving the payload
Make sure the webhook URL in your Action matches the URL from the Catch Hook trigger step exactly. Confirm the Action is active at next.frame.io/settings/actions.
Frame.io fields are empty in the Show File or Show Project steps
The Catch Hook has not received a payload yet. Complete the test trigger step before configuring the downstream steps.
Airtable record is missing fields
Confirm your Airtable table has all required fields and that each field in the Zap is mapped to the correct dynamic (custom) value.
Project name is not appearing in the Airtable record
Confirm the Show Project step is mapped to dynamic (custom) values from the webhook payload. If the project ID is hardcoded, the step will always look up the same project.
Airtable search step is not finding the record
Confirm the File ID field name in your Airtable table matches exactly what is configured in the search step. Also confirm the record was originally created by the Part 1 Zap with the File ID field populated.
Deleted record is not being updated
Confirm the record ID in the update step is mapped dynamically from the search step, not hardcoded.
