AutomationFlowsEmail & Gmail › E-commerce Bestseller Video Generator (algolia + Google Veo 3)

E-commerce Bestseller Video Generator (algolia + Google Veo 3)

ByEmir Belkahia @emirbelkahia on n8n.io

This workflow automatically identifies your weekly bestselling product from your Algolia-powered e-commerce store and generates a cinematic product video using Google VEO 3.0 AI, helping marketing teams create engaging video content without manual editing or expensive production…

Cron / scheduled trigger★★★★★ complexity33 nodesHTTP RequestGmail
Email & Gmail Trigger: Cron / scheduled Nodes: 33 Complexity: ★★★★★ Added:
E-commerce Bestseller Video Generator (algolia + Google Veo 3) — n8n workflow card showing HTTP Request, Gmail integration

This workflow corresponds to n8n.io template #11119 — we link there as the canonical source.

This workflow follows the Gmail → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "xxjvJIcWqHC1t9FU",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "2025 Nov - E-commerce - Pull bestseller of the week and generate a video - for publication",
  "tags": [
    {
      "id": "6OaASw2bkjvGJYfM",
      "name": "Experimentation",
      "createdAt": "2025-11-15T18:16:11.694Z",
      "updatedAt": "2025-11-15T18:16:11.694Z"
    },
    {
      "id": "r2J8HDdF1EXu4FtQ",
      "name": "Algolia",
      "createdAt": "2025-11-15T18:14:57.032Z",
      "updatedAt": "2025-11-15T18:14:57.032Z"
    },
    {
      "id": "rapjVlcQ0SoPnEXg",
      "name": "AI",
      "createdAt": "2025-11-15T18:14:48.492Z",
      "updatedAt": "2025-11-15T18:14:48.492Z"
    }
  ],
  "nodes": [
    {
      "id": "1754418e-842b-4abc-bdb5-346a7af25a82",
      "name": "Every week on monday morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "disabled": true,
      "position": [
        0,
        80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 21
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "49e015ee-eac4-4e19-91de-2bec48e34fc9",
      "name": "Test Trigger while building the workflow",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        -224
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "8835ff62-b7eb-46a7-acac-88feca4c8b33",
      "name": "Get weekly bestseller from Algolia",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        352,
        -224
      ],
      "parameters": {
        "url": "https://ALGOLIA_APP_ID.algolia.net/1/indexes/unicorns_prod_products/query",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "params",
              "value": "hitsPerPage=1"
            }
          ]
        },
        "genericAuthType": "httpCustomAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpCustomAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "8dc00a09-331a-434c-9050-9cc843b81f89",
      "name": "If no video for that product",
      "type": "n8n-nodes-base.if",
      "position": [
        640,
        -224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "5dc716d8-c032-4a12-a2cd-33b22ab437f3",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              },
              "leftValue": "={{ $json.hits[0].hasVideo }}",
              "rightValue": "false"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "35a556b2-3af7-43c9-9120-a32d3abd54d2",
      "name": "Image URL is present",
      "type": "n8n-nodes-base.if",
      "position": [
        944,
        -224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e70943ac-a10b-403e-a4bb-47e7421f8a46",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.hits[0].images[0] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "fa0524f1-1568-440e-82e9-49280016d638",
      "name": "Check image availability",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        1296,
        -240
      ],
      "parameters": {
        "url": "={{ $json.hits[0].images[0] }}",
        "options": {
          "response": {
            "response": {
              "fullResponse": true
            }
          }
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "728688c5-4245-41e9-bbba-6ed6f8ca6874",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        960,
        112
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "425eac1e-e80f-49e3-8539-490e876b47de",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        16
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 272,
        "content": "### If there is already a video for that product, we do nothing"
      },
      "typeVersion": 1
    },
    {
      "id": "cae89016-9e7e-4c4c-81e8-f270439ced69",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 272,
        "content": "### Error handling: a best selling product has no image, tell a human"
      },
      "typeVersion": 1
    },
    {
      "id": "f928de44-5358-4cdf-a19d-79ac36fb49ac",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 272,
        "content": "### Error handling: a best selling product has a broken image, tell a human"
      },
      "typeVersion": 1
    },
    {
      "id": "d0c253d1-ff1e-4539-8c8b-6812334ca79e",
      "name": "Tell admin that bestseller has no image",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1376,
        96
      ],
      "parameters": {
        "sendTo": "admin@example.com",
        "message": "=Unicorns Shop - Best seller has no image: {{ $json.hits[0].sku }}",
        "options": {},
        "subject": "=Unicorns Shop - Best seller has no image: {{ $json.hits[0].sku }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "cdce35f8-8e1f-46de-a2b7-6dc4104de63d",
      "name": "Tell admin that bestseller has broken image",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1808,
        112
      ],
      "parameters": {
        "sendTo": "admin@example.com",
        "message": "=Unicorns Shop - Best seller has no image: {{ $json.hits[0].sku }}",
        "options": {},
        "subject": "=Unicorns Shop - Best seller has no image: {{ $json.hits[0].sku }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c46a408f-93ad-4945-a22a-91bbb23bdd97",
      "name": "Image is present and valid",
      "type": "n8n-nodes-base.if",
      "position": [
        1600,
        -256
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "3a9d468b-1c32-4c2e-ab48-0fd754c4307a",
              "operator": {
                "type": "number",
                "operation": "equals"
              },
              "leftValue": "={{ $json.statusCode }}",
              "rightValue": 200
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "5c8cbeec-7be3-4b01-b6d4-ad76bad0fe5e",
      "name": "Wait for video generation",
      "type": "n8n-nodes-base.wait",
      "position": [
        2608,
        -272
      ],
      "parameters": {
        "amount": 60
      },
      "typeVersion": 1.1
    },
    {
      "id": "b3f352b1-d2c5-445f-86ed-9ca29130ef82",
      "name": "Finished ?",
      "type": "n8n-nodes-base.if",
      "position": [
        3024,
        -272
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "bc2d5054-b343-44ba-88f7-ab4295b0aa2a",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.done }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2f324e9c-68e3-44a1-9579-6bd7f7a031ff",
      "name": "Wait more",
      "type": "n8n-nodes-base.wait",
      "position": [
        3232,
        -160
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "df040539-5d2a-4ee8-8fc2-5ddb7c9916c5",
      "name": "Generate video with Google VEO 3",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2400,
        -272
      ],
      "parameters": {
        "url": "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT-ID-GOOGLE-CLOUD/locations/us-central1/publishers/google/models/veo-3.0-generate-001:predictLongRunning",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"instances\": [\n    {\n      \"prompt\": \"A short cinematic product video shot in a studio. A small plush toy rests motionless on a flat surface. The camera moves slowly in a smooth dolly orbit around it to reveal multiple angles over about 6 seconds. The toy itself never moves \u2014 it\u2019s not alive or on a turntable. Use soft white studio lighting, a neutral background, and shallow depth of field for a realistic and professional look. The framing should be centered and medium close-up, with gentle camera motion like a slider or gimbal shot.\",\n      \"image\": {\n        \"bytesBase64Encoded\": \"{{ $json.data }}\",\n        \"mimeType\": \"image/jpeg\"\n      }\n    }\n  ],\n  \"parameters\": {\n    \"aspectRatio\": \"9:16\",\n    \"durationSeconds\":6,\n    \"sampleCount\": 1,\n    \"resizeMode\": \"pad\",\n    \"storageUri\": \"gs://GOOGLE_STORAGE_BUCKET_NAME/outputs/\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleCloudNaturalLanguageOAuth2Api"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        },
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "googleOAuth2Api": {
          "name": "<your credential>"
        },
        "googleCloudNaturalLanguageOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "6e7407d9-e840-42e4-8598-226977c71845",
      "name": "Get video name and storage bucket",
      "type": "n8n-nodes-base.set",
      "position": [
        3232,
        -368
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a2bfc7e1-588f-47f8-87c4-12c20e799f08",
              "name": "=bucketName",
              "type": "string",
              "value": "={{$json.response.videos[0].gcsUri.match(/^gs:\\/\\/([^/]+)\\/(.+)$/)[1]}}"
            },
            {
              "id": "6b1e96f4-a731-4c37-a44c-8260cb1fc5e6",
              "name": "objectName",
              "type": "string",
              "value": "={{ $json.response.videos[0].gcsUri.match(/^gs:\\/\\/([^/]+)\\/(.+)$/)[2]}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b3b64d35-a5d8-4c86-9bac-aef17c4134e4",
      "name": "Checking if we're done",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2816,
        -272
      ],
      "parameters": {
        "url": "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT-ID-GOOGLE-CLOUD/locations/us-central1/publishers/google/models/veo-3.0-generate-001:fetchPredictOperation",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"operationName\": \"{{ $json.name }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleCloudNaturalLanguageOAuth2Api"
      },
      "credentials": {
        "googleCloudNaturalLanguageOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "64c06571-b93b-49bb-bb80-41f62bd1954e",
      "name": "Downloading the MP4 file",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3712,
        -368
      ],
      "parameters": {
        "url": "=https://storage.googleapis.com/{{ $json.data[0].bucketName }}/{{ $json.data[0].objectName }}",
        "options": {},
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "googleCloudStorageOAuth2Api"
      },
      "credentials": {
        "googleCloudStorageOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "c9573d6d-d087-49ac-b9c6-c5efd24e4d8c",
      "name": "Drop video in Supabase Bucket",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3920,
        -368
      ],
      "parameters": {
        "url": "=https://YOUR_SUPABASE_PROJECT.supabase.co/storage/v1/object/unicorns-images/{{ $('Get weekly bestseller from Algolia').item.json.hits[0].objectID }}.mp4",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "authentication": "predefinedCredentialType",
        "inputDataFieldName": "data",
        "nodeCredentialType": "supabaseApi"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        },
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "d7140d66-ca5e-4be6-a545-bbc039445339",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3520,
        -368
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "1e7eedb0-8104-4e78-a80b-3f21f52bc59d",
      "name": "Index in Algolia",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4128,
        -368
      ],
      "parameters": {
        "url": "https://ALGOLIA_APP_ID-dsn.algolia.net/1/indexes/unicorns_prod_products/batch",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"requests\": [\n    {\n      \"action\": \"partialUpdateObject\",\n      \"body\": {\n        \"objectID\": \"{{ $('Get weekly bestseller from Algolia').item.json.hits[0].objectID }}\",\n        \"videos\": [\n          \"https://YOUR_SUPABASE_PROJECT.supabase.co/storage/v1/object/public/{{ $json.Key }}\"\n        ],\n        \"hasVideo\": true\n      }\n    }\n  ]\n} ",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpCustomAuth"
      },
      "credentials": {
        "httpCustomAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "3f033063-e2bb-402c-94f1-82d7f6d1a3e2",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -992,
        -640
      ],
      "parameters": {
        "width": 864,
        "height": 992,
        "content": "# Automated Weekly Video Generation for E-commerce Bestsellers (Algolia + Google VEO 3)\nThis workflow automatically identifies your weekly bestselling product from your Algolia-powered e-commerce store and generates a cinematic product video using Google VEO 3.0 AI if the product doesn't already have one.\n\n## Who's it for\nE-commerce stores using Algolia for search. Ideal for marketing teams wanting to automate video content creation for top products without manual editing or expensive production tools.\n\n## How it works\nEvery Monday at 9:00 AM, the workflow queries your Algolia index for the top-selling product, checks if it has a video, validates the product image, then generates a cinematic video using Google VEO 3.0. The video is stored in Supabase and the Algolia record is updated with the video URL.\n\n## How it identifies the bestseller\nThe workflow leverages Algolia's custom ranking feature. When sending an empty search query, Algolia returns products following your custom ranking criteria (typically inStock and popularity attributes). You'll need to configure your index's custom ranking to match your business needs.\n\n## Requirements\n- Algolia account with product index\n- Google Vertex AI with VEO 3.0 API access\n- Google Cloud Storage bucket (required for VEO 3.0 output)\n- Supabase storage bucket\n- Gmail for notifications\n\n## Why both Google Cloud Storage AND Supabase?\nVEO 3.0 outputs videos as base64 or MP4 files in Google Cloud Storage. Base64 strings are too long for n8n to process, so Google Cloud Storage is mandatory. The workflow then downloads the MP4 and uploads it to Supabase where your other product assets live, offering simpler pricing and easier frontend integration.\n\n## Setup time\n~20 minutes to connect credentials, configure index names, and set up storage buckets.\n\n## \ud83d\udca1 Pro tip\nUse manual execution during setup to test immediately instead of waiting for Monday's scheduled run."
      },
      "typeVersion": 1
    },
    {
      "id": "7bd2fa1a-b168-415b-93ab-ad785faf5e16",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4368,
        -400
      ],
      "parameters": {
        "width": 320,
        "height": 144,
        "content": "## Questions or Feedback?\n\n\ud83d\udce7 emir.belkahia@gmail.com  \n\ud83d\udcbc [linkedin.com/in/emirbelkahia](https://www.linkedin.com/in/emirbelkahia/)"
      },
      "typeVersion": 1
    },
    {
      "id": "2b75e269-9ee8-4e7b-b146-0fb2349efd60",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 848,
        "content": "## Workflow Trigger\n\n**Purpose:** Launch the workflow either manually (test) or automatically every Monday at 9:00 PM."
      },
      "typeVersion": 1
    },
    {
      "id": "00232fdb-a853-46e0-8baf-1736787abeb8",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        256,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 288,
        "height": 848,
        "content": "## Bestseller Identification\n\n**Purpose:** Query the Algolia index to retrieve the top-ranked product of the week."
      },
      "typeVersion": 1
    },
    {
      "id": "23591cca-763a-49ca-91de-f92493b3dce1",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        592,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 848,
        "content": "## Video Presence Check\n\n**Purpose:** Avoid regenerating a video if the product already has one."
      },
      "typeVersion": 1
    },
    {
      "id": "867c2715-1cc0-410d-b16c-59c48522ac74",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 784,
        "height": 848,
        "content": "## Image URL Validation\n\n**Purpose:** \n- Ensure the bestselling product has an image URL.\n- Validate that the image URL is accessible and returns a 200 status."
      },
      "typeVersion": 1
    },
    {
      "id": "b55810ad-3f40-452e-a896-31837de9422c",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 1360,
        "height": 624,
        "content": "## Video Generation with Google VEO 3.0\n\n**Purpose:** Transform product image into little promotional video using VEO 3.0 AI."
      },
      "typeVersion": 1
    },
    {
      "id": "9c80bba6-0caa-473f-be91-b9595ca687ab",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3456,
        -544
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 416,
        "content": "## Product Update in Algolia\n\n**Purpose:** Mark product as having a video and add the public URL (to publish it on the store)."
      },
      "typeVersion": 1
    },
    {
      "id": "2d29e29f-5533-4220-a6a5-34997510fadd",
      "name": "Convert image to base64 for VEO 3",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        2144,
        -272
      ],
      "parameters": {
        "options": {},
        "operation": "binaryToPropery"
      },
      "typeVersion": 1.1
    },
    {
      "id": "ef0b1143-1895-4158-a728-d8128a3345f6",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        400
      ],
      "parameters": {
        "color": 6,
        "width": 880,
        "height": 576,
        "content": "# \ud83c\udf99\ufe0f Video Walkthrough\n@[youtube](sjzush0DYFU)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "ca547939-4e9b-41e0-a601-7704970e0e1a",
  "connections": {
    "Aggregate": {
      "main": [
        [
          {
            "node": "Downloading the MP4 file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait more": {
      "main": [
        [
          {
            "node": "Checking if we're done",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Finished ?": {
      "main": [
        [
          {
            "node": "Get video name and storage bucket",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait more",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Image URL is present": {
      "main": [
        [
          {
            "node": "Check image availability",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Tell admin that bestseller has no image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Checking if we're done": {
      "main": [
        [
          {
            "node": "Finished ?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check image availability": {
      "main": [
        [
          {
            "node": "Image is present and valid",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Tell admin that bestseller has broken image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Downloading the MP4 file": {
      "main": [
        [
          {
            "node": "Drop video in Supabase Bucket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for video generation": {
      "main": [
        [
          {
            "node": "Checking if we're done",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Image is present and valid": {
      "main": [
        [
          {
            "node": "Convert image to base64 for VEO 3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Tell admin that bestseller has broken image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Every week on monday morning": {
      "main": [
        []
      ]
    },
    "If no video for that product": {
      "main": [
        [
          {
            "node": "Image URL is present",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Drop video in Supabase Bucket": {
      "main": [
        [
          {
            "node": "Index in Algolia",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate video with Google VEO 3": {
      "main": [
        [
          {
            "node": "Wait for video generation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert image to base64 for VEO 3": {
      "main": [
        [
          {
            "node": "Generate video with Google VEO 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get video name and storage bucket": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get weekly bestseller from Algolia": {
      "main": [
        [
          {
            "node": "If no video for that product",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Test Trigger while building the workflow": {
      "main": [
        [
          {
            "node": "Get weekly bestseller from Algolia",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow automatically identifies your weekly bestselling product from your Algolia-powered e-commerce store and generates a cinematic product video using Google VEO 3.0 AI, helping marketing teams create engaging video content without manual editing or expensive production…

Source: https://n8n.io/workflows/11119/ — original creator credit. Request a take-down →

More Email & Gmail workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Email & Gmail

YOUR_ID 4. Uses gmail, googleDrive, googleSheets, httpRequest. Scheduled trigger; 53 nodes.

Gmail, Google Drive, Google Sheets +1
Email & Gmail

Instead of providing a routine check, it focuses on significant movements by: Sending a Slack alert only if a query crosses a defined movement threshold. Emailing a structured report with the Top 25 i

HTTP Request, Slack, Gmail
Email & Gmail

Looking for a way to track GitHub bounty issues automatically and get notified in real time? This GitHub Bounty Tracker workflow monitors repositories for issues labeled 💎 Bounty, logs them in Google

Google Sheets, HTTP Request, WhatsApp +1
Email & Gmail

This workflow automatically sends a beautifully designed HTML newsletter every Sunday at 8 AM, featuring products currently on sale from your Algolia-powered e-commerce store.

Google Sheets, HTTP Request, Gmail
Email & Gmail

Automates daily CVE-driven scanning against bug bounty scopes. It fetches bug-bounty domains, pulls newly published Project Discovery templates, converts them to Nuclei rules, runs targeted scans, and

HTTP Request, Ssh, Gmail