Social Media Automation in Airtable
Turn any Airtable base into a content publishing engine. One script in an Airtable Automation pushes posts to Instagram, YouTube, TikTok, LinkedIn, X, Facebook, Threads, Pinterest, Reddit, Bluesky, Google Business, Discord, Telegram, Slack, Mastodon and WordPress in a single API call.
Why use IndReelForge inside Airtable?
Airtable is where most content teams already plan their posts β base columns become a natural editorial calendar. The missing piece is a way to actually publish from the row. IndReelForge fills that with a 25-line Airtable script: read the row, fire one HTTP call, write the result back. No middleware, no extra subscription, no copy-paste.
Prerequisite β IndReelForge setup
Three things you need from your dashboard before you wire up Airtable.
Step 1
Create a profile
In your dashboard create a profile (e.g. main). Its name becomes the user field on every API call.
Step 2
Connect socials
Open the profile and click Connect next to each network. Each profile holds one account per network.
Step 3
Generate an API key
On the API Keys page, create a key (2FA must be on). Copy it once β you will paste it into the Airtable script as an input variable.
Recommended base structure
Create a table called Videos with these fields. The script below assumes this layout.
| Field | Type | Purpose |
|---|---|---|
| Video Name | Single line text | Caption / title |
| Video URL | URL or Attachment | Source media |
| Description | Long text | Optional secondary caption |
| Platforms | Multi-select | tiktok, instagram, youtube, β¦ |
| Status | Single select | Pending / Approved / Uploaded / Failed |
| Upload Date | Date | When it was published |
| Platform URLs | Long text | Returned URLs after publish |
Wire up the Automation
Five steps inside Airtable to turn the base into a publishing pipeline.
- 1
Open Automations
In your base, click the Automations icon at the top. Click "Create automation".
- 2
Pick the trigger
Use "When record matches conditions" and set the condition to Status = Approved. (Or "When record updated" if you want all changes to fire.)
- 3
Add a "Run script" action
Click + β Run script. Airtable opens the script editor in the right pane.
- 4
Bind input variables
In the Inputs section add three: recordId (from the trigger), apiKey (paste your IndReelForge key once), userProfile (your profile name). The script reads them via input.config().
- 5
Paste the script & test
Drop the example script below into the editor and click "Test step". A successful run updates the row Status to "Uploaded" and writes the per-platform URLs into the Platform URLs cell.
Paste-ready script
Drop this into the Run Script action. It reads the triggering row, posts to IndReelForge, and writes the result back.
// Airtable β IndReelForge β basic publish-on-status-change script
// Bind these inputs at the top of the action:
// recordId (Trigger record ID)
// apiKey (your IndReelForge API key, kept out of source)
// userProfile (your IndReelForge profile name)
const { recordId, apiKey, userProfile } = input.config();
const table = base.getTable('Videos');
const record = await table.selectRecordAsync(recordId);
// Read fields from the row
const videoUrl = record.getCellValue('Video URL');
const title = record.getCellValue('Video Name');
const description = record.getCellValue('Description') || '';
const platforms = (record.getCellValue('Platforms') || []).map(p => p.name);
if (!videoUrl) throw new Error('Missing Video URL');
if (platforms.length === 0) throw new Error('Pick at least one platform');
// Build form-data payload β IndReelForge accepts video_url for remote files
const form = new FormData();
form.append('video_url', typeof videoUrl === 'string' ? videoUrl : videoUrl[0].url);
form.append('user', userProfile);
form.append('title', title);
if (description) form.append('description', description);
platforms.forEach(p => form.append('platform[]', p));
// Fire the call
const res = await fetch('https://api.indreelforge.com/api/upload', {
method: 'POST',
headers: { Authorization: `Apikey ${apiKey}` },
body: form,
});
const data = await res.json();
// Write the result back to the same row
await table.updateRecordAsync(record, {
Status: data.success ? 'Uploaded' : 'Failed',
'Upload Date': new Date(),
'Platform URLs': JSON.stringify(data.platform_statuses || {}, null, 2),
});Pro tip β use video_url for big files
Airtable scripts can't stream large binaries. Store the video as an attachment (or paste a public URL) and pass it as video_url. IndReelForge fetches and processes the file server-side.
Security β bind the key as an input
Never paste the API key into the script body β bind it as an Input variable on the action. The literal key stays in the workspace settings, not in the script source you might copy elsewhere.
Auto-update the row
The example script writes the per-platform result back into the same row (Status, Upload Date, Platform URLs). Editors see exactly what published and what failed without leaving Airtable.
Common gotchas
- Free Airtable plan caps automations at 100 runs/month.
- Free IndReelForge plan can't post to TikTok β upgrade to Basic+ first.
- Run Script actions time out at 30 seconds. Use video_url so the script returns immediately.
FAQ
Do I need a paid Airtable plan to use Automations?
Airtable Automations is included in every paid Airtable tier. The free Airtable plan includes 100 automation runs per month β enough to test the integration but not for production use. The IndReelForge side is free for the first 10 uploads/month regardless.
How do I avoid hardcoding the API key in the script?
Wire the API key as an "Input variable" on the script action. Set it to a literal value once, and the actual key never appears in the script body. When you copy the base, the input variable name travels but the value is bound to the destination workspace.
Can I send a video file from Airtable, or only a URL?
Airtable scripts run inside a sandbox without filesystem access, so the cleanest pattern is: store the video as an Airtable attachment, pass the attachment URL to IndReelForge as the "video_url" field, and let our backend fetch and process it server-side.
Can I update the Airtable row with the upload result?
Yes β every example script in this guide does exactly that. After the IndReelForge call returns, the script writes the upload status (and optionally the per-platform URLs) back into the same row so editors can see what published and what failed.
How do I handle multiple platforms in one row?
Add a multi-select column called "Platforms". In the script, read the cell, map each option name to a platform[] entry, and let IndReelForge fan out the post in one call.
Explore More
Other automations
Supported platforms
Turn your Airtable base into a publishing engine
Start free with 10 uploads per month, no credit card required. Upgrade to unlimited when your editorial calendar fills up.