Every content production team hits the same bottleneck: coordinating video files between editors, reviewers, and stakeholders. You're manually creating folders in Frame.io, updating status in spreadsheets, downloading approved files, uploading to storage, and triggering transcription — all tasks that take 10–15 hours per week and introduce human error at every step.
This tutorial shows you how to build an automated content production system that connects Frame.io's v4 API with Make and Airtable. You'll learn how to:
- Authenticate Frame.io v4 API through Adobe Developer Console
- Auto-create Frame.io folders when video projects enter production
- Trigger workflows when videos are approved for publishing
- Handle version stacks and folder hierarchies
- Download files and trigger transcription automatically
This is the exact system we use at Business Automated to manage our YouTube content pipeline, saving hours every week on coordination and file management.
Video Tutorial
The Content Production Workflow
At Business Automated, we manage our video content pipeline in Airtable with two key automation workflows:
| Workflow | Trigger | Actions |
|---|---|---|
| Folder Creation | Video status changes to "Shooting" | Create Frame.io folder, create Google Drive folder, save URLs to Airtable |
| Approval Processing | Video approved in Frame.io | Download file to Google Drive, trigger transcription, update Airtable status to "Scheduling" |
This architecture keeps Airtable as the source of truth for project status while Frame.io handles the review and collaboration process.
The Airtable Base Structure
Our Videos table includes these key fields:
- Video Name (Single line text)
- Status (Single select: Copywriting → Shooting → Editing → Review → Scheduling → Published)
- Frame.io Folder Link (URL field)
- Google Drive Folder Link (URL field)
- Transcript (Long text)
- Summary (Long text)
The Status field acts as the state machine — each transition triggers specific automations in Make.
Authenticating Frame.io v4 API in Make
Frame.io's v4 API requires authentication through Adobe Developer Console. This is the most complex part of the setup, so follow these steps carefully.
Step 1: Create Adobe Developer Console Account
Critical requirement: Your Adobe Developer Console account MUST use the exact same email address as your Frame.io account. If these don't match, the integration will fail.
- Go to developer.adobe.com
- Create an account or sign in
- Verify you're using the same email as your Frame.io login
Step 2: Handle Google Authentication Migration
If you previously logged into Frame.io using Google authentication, you'll need to migrate:
- Contact Frame.io customer support
- Request them to reset your password credentials
- Ask them to enable Adobe authentication for your account
- Once completed, your Frame.io account will be linked to your Adobe Developer Console
This step is required — you cannot skip it if you used Google login previously.
Step 3: Create a Frame.io API Project
- In Adobe Developer Console, click Create New Project
- Select Add API
- From the list of available APIs, select Frame.io API
- Choose OAuth Server-to-Server authentication
- Complete the project setup
You can create multiple applications within a single project if you need separate credentials for different environments (production, testing, etc.).
Step 4: Get Your API Credentials
- Open your Frame.io API project
- Navigate to Credentials → OAuth Server-to-Server
- Copy the Client ID and Client Secret
- Keep these secure — you'll use them in Make
Step 5: Connect Frame.io in Make
- In Make, add a Frame.io module to your scenario
- Click Add next to the connection field
- Select Frame.io (Adobe)
- Enter your Client ID and Client Secret from Adobe Developer Console
- Authorize the connection
Once connected, Make will use OAuth to authenticate all Frame.io API requests on your behalf.
Workflow 1: Auto-Create Frame.io Folders
When a video project moves from copywriting to production, we automatically create a Frame.io folder to organize all raw footage and editing drafts.
The Make Scenario
Trigger: Airtable → Watch Records
- Table: Videos
- Filter: Status = "Shooting"
Action 1: Frame.io → Create Folder
- Parent Folder ID:
YOUR_PROJECT_ROOT_FOLDER_ID - Folder Name:
{{Airtable.Video Name}}
Action 2: Airtable → Update Record
- Record ID:
{{Airtable.Record ID}} - Frame.io Folder Link:
{{Frame.io.View URL}}
Migrating from Frame.io v3 to v4
If you have existing scenarios using the old Frame.io modules:
- Replace the module — Delete the old "Create Folder" module and add the new Frame.io v4 version
- Update the connection — Use the Adobe Developer Console credentials
- Map the folder name — The field structure is the same (just map your video name from Airtable)
- Change the URL field — Instead of saving the asset ID, save the complete
View URLfield from Frame.io's response
The v4 API returns a view_url field that provides a direct link to the folder in Frame.io's web interface — this is more useful for your team than the raw folder ID.
Testing the Workflow
To test:
- In Airtable, change a video's status to "Shooting"
- Watch the Make scenario execute
- Verify a new folder appears in Frame.io
- Check that the folder URL is saved back to Airtable
The folder is now ready for your team to upload raw footage and editing drafts.
Workflow 2: Approval-Triggered Processing
When a video is approved in Frame.io, we want to automatically download it, trigger transcription, and move it to the next stage in our content pipeline.
This workflow is more complex because it needs to:
- Listen for approval events via webhook
- Handle both single files and version stacks
- Retrieve the correct Airtable record based on folder association
- Download files with quality options
The Make Scenario
Trigger: Frame.io → Watch Events (Webhook)
- Event Type: Metadata Value Updated
- Connection: Frame.io v4 (Adobe)
Filter 1: Check Approval Status
- Condition: Field Name = "status"
- Condition: Value = "approved"
Only approved assets pass this filter — all other metadata changes are ignored.
Action 1: Frame.io → Make an API Call
- URL:
https://api.frame.io/v4/assets/{{Event.Asset ID}} - Method: GET
- Query String:
include=media_links
Why use "Make an API call" instead of "Get File"? The built-in "Get File" module doesn't support the include=media_links parameter, which is required to retrieve download URLs for the asset.
Action 2: Frame.io → Get Version Stack (with Error Handler)
- Asset ID:
{{Event.Parent ID}} - Error Handler: Resume (ignore errors)
This step checks if the parent is a version stack. If it is, we get the version stack details. If it's not (the request fails), the error handler makes the module return empty values, and we continue.
Action 3: Frame.io → Get Folder
- Folder ID:
{{Version Stack.Parent ID}} OR {{File.Parent ID}}
Use Make's ifempty() function to handle both cases:
{{ifempty(2.parent_id; 1.parent_id)}}
This means: "Use the version stack's parent ID if available (module 2), otherwise use the file's parent ID (module 1)."
Why this complexity? Frame.io has two possible structures:
- Single file: File → Folder
- Versioned file: File → Version Stack → Folder
Your automation needs to handle both cases to work reliably.
Action 4: Airtable → Search Records
- Table: Videos
- Filter: Frame.io Folder Link contains
{{Folder.View URL}}
This finds the Airtable record associated with this Frame.io folder.
Action 5: Airtable → Update Record
- Record ID:
{{Search Results.Record ID}} - Status: "Scheduling"
Action 6: HTTP → Download File (optional)
- URL:
{{File.media_links.original}} - Destination: Google Drive, Dropbox, or custom storage
Action 7: Trigger Transcription (optional)
- Send the file URL to Deepgram, AssemblyAI, or another transcription service
- Save the transcript back to Airtable
Understanding Version Stacks
Frame.io's version stacks group multiple versions of the same asset. When you upload a new version on top of an existing file, Frame.io creates:
Folder
└── Version Stack
├── Version 1 (original)
└── Version 2 (new upload)
When an approval event fires for Version 2, the event's parent is the version stack, not the folder. That's why we need the two-step check:
- Try to get the version stack (succeeds if parent is a version stack)
- Get the folder using either the version stack's parent OR the file's parent
The error handler with Resume directive ensures the scenario continues even when the "Get Version Stack" step fails (which happens when there's no version stack).
Testing the Approval Workflow
To test:
- Upload a video to a Frame.io folder linked to an Airtable record
- In Frame.io, click Review → Approve on the video
- Watch the Make scenario execute
- Verify the Airtable record status changed to "Scheduling"
- Check that the file downloaded to your storage (if configured)
If you have transcription configured, you should also see the transcript populate in Airtable within a few minutes.
Handling Media Links and File Downloads
Frame.io provides multiple quality versions of each asset. When you include media_links in your API request, you get:
{
"media_links": {
"original": "https://...",
"high": "https://...",
"medium": "https://...",
"low": "https://..."
}
}
Choose the appropriate quality for your use case:
| Quality | Use Case |
|---|---|
| original | Archival storage, final publishing, editing |
| high | Preview downloads, client sharing |
| medium | Transcription services, AI processing |
| low | Thumbnails, quick previews |
For transcription workflows, medium quality is usually sufficient — it reduces download time and transcription costs while maintaining audio clarity.
Advanced: Transcription Integration
After downloading an approved video, trigger automatic transcription:
Option 1: Deepgram
- Add Deepgram → Transcribe Audio module
- Input:
{{File.media_links.medium}} - Save transcript to Airtable
Option 2: AssemblyAI
- Upload file to AssemblyAI
- Wait for transcription completion
- Retrieve transcript and summary
- Save to Airtable
Option 3: OpenAI Whisper via Make
- Download file from Frame.io
- Send to OpenAI Whisper API
- Save transcript to Airtable
We use Deepgram because it's fast, accurate, and provides both transcript and AI-generated summaries — perfect for creating social media posts and blog content from video.
Error Handling Best Practices
Frame.io webhook automations can fail for several reasons:
| Error | Solution |
|---|---|
| Asset not found | Add a 5-second delay before retrieving the asset — Frame.io's webhook sometimes fires before the asset is fully processed |
| Version stack errors | Use the Resume error handler pattern shown above |
| Missing Airtable record | Add a filter that checks if the Airtable search returned results before proceeding |
| Download failures | Add retry logic with 3 attempts and exponential backoff |
Always create an Errors table in Airtable that logs:
- Timestamp
- Error message
- Asset ID
- Scenario name
Send Slack notifications when errors occur so your team can investigate failures quickly.
Architecture Patterns
Pattern 1: Airtable as Single Source of Truth
Keep all project metadata in Airtable:
- Video title, description, status
- Frame.io folder links
- Google Drive folder links
- Transcripts and summaries
- Publishing schedule
Frame.io is only used for review and collaboration — not for storing project state.
Pattern 2: Webhook Bridge
Use Frame.io webhooks to trigger Make scenarios, but don't perform heavy processing directly in the webhook handler. Instead:
- Webhook receives approval event
- Immediately update Airtable status
- Separate scenario (triggered by Airtable status change) handles file download and processing
This prevents webhook timeouts and makes debugging easier.
Pattern 3: Bidirectional Linking
Create links in both directions:
- Airtable → Frame.io (folder URL saved in Airtable)
- Frame.io → Airtable (search by folder URL when webhook fires)
This allows you to navigate from project management to review platform and back without manual lookups.
Common Use Cases
YouTube Content Pipeline
- Script writing in Airtable (Status: Copywriting)
- Status → Shooting: Create Frame.io + Google Drive folders
- Upload raw footage to Frame.io
- Editor uploads draft to Frame.io
- Reviewer approves in Frame.io
- Webhook triggers: download to Drive, transcribe, update status
- Airtable triggers: generate thumbnail, create social posts, schedule publishing
Client Review Workflows
- Project created in Airtable (Status: In Progress)
- Create Frame.io folder, invite client as reviewer
- Upload deliverables to Frame.io
- Client leaves feedback or approves
- Approval triggers: download final files, update Airtable, send invoice, archive project
Multi-Format Content Production
- Record video interview
- Upload to Frame.io for editing
- After approval: download video, extract audio, transcribe
- Use transcript to generate blog post, podcast description, social snippets
- All assets linked in single Airtable record
Migrating Existing Frame.io Workflows
If you have existing Make scenarios using Frame.io v3:
- Audit your scenarios — List all scenarios that use Frame.io modules
- Set up Adobe authentication — Complete the Adobe Developer Console setup
- Test in a duplicate scenario — Clone your production scenario and update one module at a time
- Replace triggers first — Update webhook triggers to use v4 authentication
- Replace actions — Update create folder, get file, and other action modules
- Update field mappings — v4 uses slightly different field names (e.g.,
view_urlinstead ofasset_id) - Test end-to-end — Run the full workflow with test data
- Deploy and monitor — Replace the old scenario and monitor for errors
Do not delete old scenarios immediately — keep them paused for 2 weeks in case you need to reference the logic or rollback.
Getting Started Checklist
Follow these steps to implement Frame.io automation for your content pipeline:
- Create Adobe Developer Console account — Use the same email as your Frame.io account
- Migrate from Google auth if needed — Contact Frame.io support to enable Adobe authentication
- Create Frame.io API project — In Adobe Developer Console, add the Frame.io API
- Get Client ID and Client Secret — Copy credentials from your API project
- Test authentication in Make — Add a simple "Get Folder" action to verify the connection works
- Set up Airtable base — Create Videos table with Status field and folder link fields
- Build folder creation workflow — Airtable status change → Frame.io folder creation
- Build approval workflow — Frame.io webhook → file download → Airtable update
- Test with a real video file — Upload, approve, and verify the full automation runs
- Add transcription integration — Optional: connect Deepgram, AssemblyAI, or Whisper
- Set up error logging and notifications — Create Errors table and Slack alerts
When to Hire Help
Consider hiring a Make automation consultant when:
- You need to migrate multiple existing Frame.io scenarios to v4
- Your workflow requires custom error handling and retry logic
- You want to integrate transcription, AI summarization, or multi-platform publishing
- You need advanced version control and approval routing
- Your team needs training on maintaining the automation
We design and implement complete content production systems that connect Frame.io, Airtable, Make, and your entire tool stack — with the architecture, error handling, and documentation that keeps them running reliably. See how we work.
Next Steps
Once you have Frame.io connected to Airtable and Make:
- Add AI-powered content generation to create social posts from transcripts
- Build client portals with Softr that show project status
- Implement automated reporting dashboards for stakeholders
- Connect to your CRM for client project tracking
Frame.io automation is just one piece of a complete content production system. The same patterns — webhooks, state machines, bidirectional linking — apply to every tool in your stack.