Schedule social posts from Airtable to 9 platforms
Turn your Airtable content calendar into a multi-platform scheduler. No native Airtable extension needed — Automations + a single API call to CodivUpload's REST API publishes to TikTok, Instagram, YouTube, X, LinkedIn, and 4 more.
Recommended Airtable schema
Start with seven fields. The script and sync-back automation reference each by name — keep them exactly as listed for fastest setup.
| Field | Type | Purpose |
|---|---|---|
| Profile | Single select | Display name of the CodivUpload profile that owns the connected accounts |
| Caption | Long text | The post body — sent as description to CodivUpload |
| Media URL | URL | Public HTTPS URL for image or video |
| Scheduled At | Date + Time | ISO 8601 UTC publish time (omit to publish immediately) |
| Platforms | Multi-select | instagram, tiktok, x, linkedin, youtube, facebook, threads, pinterest, bluesky, google_business, snapchat |
| Status | Single select | draft → scheduled → publishing → completed / failed |
| Post ID | Single line text | Returned post_id from /v1/posts after scheduling |
| Result URL | URL | Filled by sync-back automation once published |
The Automation Script
Drop this into an Airtable Automation triggered by "When record matches conditions" with Status = scheduled. It reads the row, posts to CodivUpload, and writes the returned id back.
const inputConfig = input.config();
const recordId = inputConfig.recordId;
const table = base.getTable("Posts");
const record = await table.selectRecordAsync(recordId, {
fields: ["Profile", "Caption", "Media URL", "Scheduled At", "Platforms"],
});
const platforms = (record.getCellValue("Platforms") || []).map(p => p.name);
const res = await fetch("https://api.codivupload.com/v1/posts", {
method: "POST",
headers: {
"Authorization": "Bearer " + inputConfig.apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({
post_type: "image",
profile_name: record.getCellValueAsString("Profile"),
platforms: platforms,
media_urls: [record.getCellValue("Media URL")],
description: record.getCellValue("Caption"),
scheduled_date: record.getCellValueAsString("Scheduled At"),
}),
});
const json = await res.json();
await table.updateRecordAsync(record, {
"Status": { name: res.ok ? "scheduled" : "failed" },
"Post ID": json.post_id || "",
});When to use this integration
Editorial calendar
Marketing teams plan a month of posts in Airtable, then click a button to schedule each row to 9 platforms.
Approval workflow
Set Status=approved to auto-trigger an Automation. Drafts stay in CodivUpload until a human approves.
Bulk import from spreadsheet
Paste 50 rows from your content plan, run an Automation Script that loops through Status=draft and schedules them.
Wire your Airtable to 11 social platforms
Free plan covers 30 posts per month. No credit card. No platform-by-platform API setup.