Why Two Scenarios?
Make.com scenarios have a maximum execution time of 40 minutes on paid plans and 5 minutes on the free plan. Since video rendering can take several minutes, a single scenario that submits a render request and waits for completion could exceed these limits. By splitting the workflow into two scenarios, each scenario completes quickly and well within the free plan’s 5-minute execution limit:- Scenario 1 submits the render request and writes the job ID to the spreadsheet (completes in seconds)
- Scenario 2 receives a webhook callback when rendering finishes and updates the spreadsheet with the video URL (completes in seconds)
Architecture Overview
Before You Begin
Ensure you have the following:- A Pictory API key (get one here)
- A Make.com account (free or paid)
- A Google account with access to Google Sheets
- A Google Sheets spreadsheet set up with the required structure (described below)
Google Sheets Setup
Create a Google Sheets spreadsheet with two sheets: Videos and Video Trigger.Sheet 1: “Videos”
This is the primary data sheet that stores video entries and their rendering results. Set up the following column headers in row 1:| Column A | Column B | Column C | Column D | Column E |
|---|---|---|---|---|
| Video Name | Story | Job Id | Video Url | Review Status |
- Video Name: A descriptive name for the video
- Story: The full story text that Pictory will convert into video scenes
- Review Status: Set to
approvedwhen the row is ready for rendering

Sheet 2: “Video Trigger”
This sheet controls when Scenario 1 runs. It contains a single column:| Column A |
|---|
| Trigger DateTime |

Spreadsheet Data Flow
As the two scenarios execute, the Videos sheet progresses through the following states:State 1: Ready for Rendering
The row contains the video name, story text, and review status set toapproved. The Job Id and Video Url columns are empty.

State 2: Render Submitted (After Scenario 1)
After Scenario 1 executes, it submits the render request to Pictory and writes the returnedjobId into the Job Id column. The review status remains approved while the video is being rendered in the Pictory cloud.

State 3: Rendering Complete (After Scenario 2)
When Pictory finishes rendering the video, it sends a webhook callback to Scenario 2. The scenario locates the row by matching the job ID, writes the rendered Video Url, and updates the Review Status fromapproved to done.

Scenario 1: Render Text to Video from Google Spreadsheet
This scenario watches for new rows in the trigger sheet, finds approved video entries, submits them to the Pictory Render API, and writes the job ID back to the spreadsheet.
Module Breakdown
1. Trigger Video Render (Google Sheets: Watch New Rows)
| Property | Value |
|---|---|
| Module | google-sheets:watchRows |
| Sheet | Video Trigger |
| Schedule | Every 5 minutes |
| Purpose | Detects new rows added to the trigger sheet |
2. Search for Approved Rows (Google Sheets: Search Rows)
| Property | Value |
|---|---|
| Module | google-sheets:filterRows |
| Sheet | Videos |
| Filter | Column E (Review Status) equals approved |
| Purpose | Finds video entries that are approved for rendering |
approved. Only approved entries proceed to the rendering step.
3. Pictory Render Storyboard Video (HTTP: Make a Request)
| Property | Value |
|---|---|
| Module | http:MakeRequest |
| Method | POST |
| URL | https://api.pictory.ai/pictoryapis/v2/video/storyboard/render |
| Purpose | Submits the video rendering request to Pictory |
POST request to the Pictory Render Storyboard Video API with the following configuration:
Headers:
Content-Type:application/jsonAuthorization: Your Pictory API key
| Field | Description |
|---|---|
videoName | Name assigned to the generated video |
webhook | The URL of your Scenario 2 webhook (Pictory sends a callback here when rendering completes) |
smartLayoutName | Visual layout theme applied to the video |
voiceOver | AI voice configuration with the selected speaker |
backgroundMusic | Auto-selected background music at 10% volume |
scenes[].story | The story text pulled from the spreadsheet’s Story column |
jobId that uniquely identifies the rendering job.
4. Write Job Id (Google Sheets: Update a Cell)
| Property | Value |
|---|---|
| Module | google-sheets:updateCell |
| Sheet | Videos |
| Cell | Column C (Job Id) at the matching row |
| Value | {{data.data.jobId}} from the API response |
| Purpose | Records the job ID for tracking and webhook correlation |
jobId returned by the Pictory API into the Job Id column of the corresponding row. This value is used by Scenario 2 to locate the correct row when the webhook fires.
Scenario 2: Video Rendered Webhook
This scenario listens for webhook callbacks from Pictory when a video finishes rendering, then updates the spreadsheet with the video URL and marks the row as completed.
Module Breakdown
1. Video Rendered Webhook (Custom Webhook)
| Property | Value |
|---|---|
| Module | gateway:CustomWebHook |
| Trigger | Immediately as data arrives |
| Purpose | Receives the callback from Pictory when video rendering completes |
POST request to this webhook URL with the following payload:
webhook field of the Pictory API request body in Scenario 1.2. Search for Rendered Job Row (Google Sheets: Search Rows)
| Property | Value |
|---|---|
| Module | google-sheets:filterRows |
| Sheet | Videos |
| Filter | Column C (Job Id) equals {{webhook.job_id}} |
| Purpose | Finds the spreadsheet row that matches the completed job |
job_id received from the webhook. This correlates the webhook callback with the correct video entry.
3. Update Rendered Video Url (Google Sheets: Update a Cell)
| Property | Value |
|---|---|
| Module | google-sheets:updateCell |
| Sheet | Videos |
| Cell | Column D (Video Url) at the matching row |
| Value | {{webhook.data.videoURL}} |
| Purpose | Writes the rendered video URL to the spreadsheet |
4. Update Review Status (Google Sheets: Update a Cell)
| Property | Value |
|---|---|
| Module | google-sheets:updateCell |
| Sheet | Videos |
| Cell | Column E (Review Status) at the matching row |
| Value | done |
| Purpose | Marks the video entry as completed |
approved to done, indicating that the video has been successfully rendered and the URL is available.
Import the Blueprints
Both scenarios are available as pre-configured blueprint JSON files that can be imported directly into your Make.com account. Blueprints are Make.com’s format for sharing scenario configurations — they contain the complete module setup, connections, and data mappings, eliminating the need to configure each module manually. Download the blueprint files before proceeding:- Render Text To Video From Google Sheet (Scenario 1)
- Video Rendered Webhook (Scenario 2)
Step-by-Step Import and Configuration
Follow this order to ensure the webhook URL is available when configuring Scenario 1. Scenario 2 must be created first because it generates the webhook URL that Scenario 1 needs.Prepare your Google Spreadsheet
approved.Import Scenario 2 (Video Rendered Webhook)
- Log in to your Make.com account
- Click Scenarios in the left sidebar, then click Create a new scenario
- In the scenario editor, click the three-dot menu (⋮) at the bottom of the screen
- Select Import Blueprint from the menu
- Choose the downloaded
Video Rendered Webhook.blueprint.jsonfile and click Save - The scenario modules will appear in the editor, matching the layout shown in the Scenario 2 screenshot above
Configure Google Sheets connection in Scenario 2
- Click on the Search for Rendered Job Row module
- Under Connection, click Add and sign in with your Google account to authorize Make.com
- Select your spreadsheet under Spreadsheet Name and choose the Videos sheet
- Repeat for the Update Rendered Video Url and Update Review Status modules, using the same Google connection
Copy the webhook URL
- Click on the Video Rendered Webhook module (the first module in the scenario)
- Under Webhook, click Add to create a new webhook
- Assign a descriptive name (e.g., “Pictory Video Rendered Webhook”) and click Save
- Make.com generates a unique webhook URL. Copy this URL — it is required when configuring Scenario 1.
Activate Scenario 2
Import Scenario 1 (Render Text to Video from Google Spreadsheet)
- Go back to Scenarios and click Create a new scenario
- Click the three-dot menu (⋮) at the bottom and select Import Blueprint
- Choose the downloaded
Render Text To Video From Google Sheet.blueprint.jsonfile and click Save
Configure Google Sheets connection in Scenario 1
- Click on the Trigger Video Render module
- Under Connection, add your Google account (or reuse the connection created in Scenario 2)
- Select your spreadsheet and choose the Video Trigger sheet
- Repeat for the Search for Approved Rows module (select the Videos sheet) and the Write Job Id module (select the Videos sheet)
Configure the Pictory API key
- Click on the Pictory Render Storyboard Video module (the HTTP request module)
- In the Headers section, locate the Authorization header
- Replace
YOUR_PICTORY_API_KEYwith your actual Pictory API key (e.g.,pictai_xxxx...)
Set the webhook URL in the request body
- Still in the Pictory Render Storyboard Video module, scroll down to the Request content (JSON body)
- Locate the
webhookfield in the JSON body - Replace
YOUR_MAKE_WEBHOOK_URLwith the webhook URL you copied from Scenario 2 in Step 4
Activate Scenario 1 and trigger a run
- Turn on Scenario 1 by toggling the Scheduling switch. The default schedule is set to run Every 5 minutes.
- To initiate your first video render, add a datetime value (e.g., the current date and time) to a new row in the Video Trigger sheet
- During the next polling cycle, Scenario 1 detects the new row, identifies approved entries in the Videos sheet, submits the render request, and writes the job ID back to the spreadsheet
- Upon rendering completion, Pictory sends a webhook callback to Scenario 2, which updates the video URL and sets the review status to
done
Best Practices
Secure Your API Key
Secure Your API Key
Monitor Webhook Delivery
Monitor Webhook Delivery
Handle Rendering Failures
Handle Rendering Failures
success field. You can add a Router module after the webhook trigger to handle failed renders separately, such as sending a notification or updating the spreadsheet with an error status.Batch Processing
Batch Processing
Free Plan Considerations
Free Plan Considerations
Troubleshooting
401 Unauthorized from Pictory API
401 Unauthorized from Pictory API
Webhook not receiving callbacks
Webhook not receiving callbacks
Spreadsheet row not updating
Spreadsheet row not updating
Scenario times out on free plan
Scenario times out on free plan
