How-to

Airtable to Video: Automate Video Creation from a Base

Turn Airtable records into finished videos automatically. Connect a base to the Renderly API, map fields to template variables, and render every row without opening an editor.

Airtable to Video: Automate Video Creation from a Base

Airtable holds the data. Renderly holds the design. This guide connects the two, so every row in a base becomes a finished video without anyone opening an editor.

The setup takes about 30 minutes. After that, a new row produces a new video automatically.

What you need

  • An Airtable base with one row per video you want.
  • A Renderly API key. Create one in the dashboard under Settings → API keys.
  • A template with dynamic overlays. Any template on the templates page works.

Step 1 - Prepare the Airtable base

Add one column per variable you want to change per video. Column names do not have to match the template exactly, but the mapping is simpler when they do.

Add one more column named Status, as a single-select with the options Pending, Rendering and Done. The automation reads this column to decide which rows to process, which stops the same row rendering twice.

PropertyHeadlinePricePhotoStatus
12 Oak StreetJust listed$459,000attachmentPending
8 Vine CourtOpen Sunday$612,000attachmentPending

Step 2 - Get a Renderly API key and template ID

List the templates available to you and copy the id of the one you want:

curl https://renderly.video/api/v1/templates \
  -H "Authorization: Bearer $RENDERLY_API_KEY"

System template IDs are readable strings, such as real-estate-listing. You will pass that ID with every render request.

Keep the API key on the server side. An Airtable Automation script runs on Airtable's servers, so a key stored there is not exposed to visitors.

Step 3 - Map Airtable fields to template variables

Renderly templates mark replaceable elements with isDynamic: true. The name of each dynamic overlay is the key you send in the replacements object.

The /api/v1/templates response from Step 2 lists the dynamic variable names for each template. Match those names to your Airtable columns. The field that gets replaced depends on the overlay type: text and shape overlays take content, and video, image and sound overlays take src.

Step 4 - Send one render request per row

One row becomes one POST. This is the whole integration:

curl -X POST https://renderly.video/api/v1/renders \
  -H "Authorization: Bearer $RENDERLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "real-estate-listing",
    "replacements": {
      "property_name": "12 Oak Street",
      "headline": "Just listed",
      "price": "$459,000",
      "hero_image": "https://dl.airtable.com/.../oak-street.jpg"
    },
    "webhookUrl": "https://your-app.com/hooks/renderly"
  }'

The response returns a job ID immediately. Rendering happens asynchronously, so the request does not block.

In Airtable, put this in an Automation with a "When record matches conditions" trigger set to Status = Pending, followed by a "Run script" action. Set Status to Rendering in the same script, so a re-run does not duplicate the job.

If you prefer no code, the same three fields go into an HTTP request module in n8n, Make.com or Zapier.

Step 5 - Receive the finished video with a webhook

Because webhookUrl was included, Renderly posts back when the job finishes:

{
  "event": "render.completed",
  "data": {
    "jobId": "cm9x2k4p10001qw8r7a3b2c1d",
    "status": "COMPLETED",
    "outputUrl": "https://cdn.renderly.video/renders/cm9x2k4p10001qw8r7a3b2c1d.mp4",
    "creditsUsed": 1,
    "durationInFrames": 1620,
    "fps": 30
  },
  "timestamp": "2026-08-13T09:12:44.110Z"
}

Write outputUrl back to the Airtable row and set Status to Done. The base is now the single record of what has rendered and what has not.

Webhook payloads are signed with HMAC-SHA256. Verify the signature before you trust the body - the webhooks guide covers the check.

What this costs at scale

Renderly bills 1 credit per minute of 1080p output, rounded up to the nearest half credit. The listing tour runs 54 seconds, so each row costs 1 credit.

Rows per monthCreditsPlanCost
100100Creator, $29/moincluded
1,0001,000Business, $99/moincluded
5,0005,000Business + 4,000 extra$99 + $480

Extra credits on the Business plan are $0.12 each. A 5,000-video month therefore runs about $579, or 11.6 cents per finished video. A shorter cut is cheaper in steps, not smoothly: anything up to 30 seconds bills half a credit.

Where to go next

The same pattern works with any data source that can send an HTTP request. Only Step 1 changes: point the trigger at the new source, keep the same replacements object, and the render call is identical. That is why the Google Sheets guide and the CSV guide share Steps 2 through 5 with this one. The Notion guide is the exception: its values arrive typed, so they need unwrapping before they can be sent.

For a scheduled run rather than a row-by-row trigger, the webhooks guide covers how to collect results in bulk.

Frequently asked

Do I need code to connect Airtable to Renderly?
No. Airtable Automations can send an HTTP request directly, and Zapier, Make.com and n8n all have Airtable triggers plus an HTTP request action. Code is only necessary if you want to run the job on your own server or add custom retry logic.
How many videos can I render from one base?
There is no row limit. Throughput is governed by your plan's concurrent render limit, not by Airtable. A 1,000-row base renders as 1,000 separate jobs, each billed at 1 credit per minute of 1080p output.
What happens if a row has a missing field?
The overlay keeps the default value stored in the template. Nothing fails. To catch gaps before they render, add an Airtable formula field that flags rows with empty required columns and filter on it.
Can I use images or video clips from Airtable attachments?
Yes. Pass the attachment URL as the replacement value for an image or video overlay. Renderly fetches the file at render time, so the URL must be publicly reachable.
How do I know when a video is ready?
Pass a webhookUrl in the render request and Renderly posts a render.completed event with the video URL. Polling GET /api/v1/renders/:jobId also works, but a webhook removes the wait loop.