n8n + WooCommerce: Auto-Generate Product Videos from Your Store

Mar 10, 2026 By smrht@icloud.com

Product pages with video convert 80% better than those without. Yet most WooCommerce stores have zero product videos because creating them manually costs $50-200 per SKU. This guide shows you how to auto-generate a product video every time you publish a new listing — using n8n, the WooCommerce REST API, and a JSON-based video renderer.

By the end, you'll have five automated workflows that turn your WooCommerce catalog into a video-rich storefront without touching a video editor.

Why Product Videos Move the Needle

Shopify's 2025 benchmark report found that product pages with embedded video see a 34% lower bounce rate and 27% higher add-to-cart rate. For WooCommerce stores, the effect is even more pronounced because the average WooCommerce store has worse product imagery than Shopify stores — video fills that gap.

The problem is production cost. A freelance videographer charges $75-150 per product. A Fiverr gig runs $25-50. Multiply that by 500 SKUs and you're looking at $12,500 minimum. Most store owners skip it entirely.

Automated product videos flip the equation. The per-video cost drops to $0.05-0.15 depending on resolution and duration. A 500-product catalog costs around $50 total. And once the workflow is set up, every new product gets a video automatically.

Architecture Overview

The pipeline has four components:

WooCommerce Store → n8n Workflow → JSON Video API → WooCommerce Product Gallery
       ↓                ↓               ↓                    ↓
  Product data    Transform to     Render video        Upload MP4 back
  (images, text,  video template   (5-15 seconds)      to product media
   price, URL)    JSON payload

WooCommerce pushes product data via webhooks. n8n catches the webhook, transforms the data into a video template, sends it to the JSON-to-Video API for rendering, then uploads the finished MP4 back to the WooCommerce product gallery. No human in the loop.

Setting Up WooCommerce REST API Credentials

First, generate API keys in WooCommerce. Go to WooCommerce → Settings → Advanced → REST API and create a new key with Read/Write permissions. You'll get a Consumer Key and Consumer Secret.

Store these in n8n as a credential of type "WooCommerce API":

{
  "url": "https://yourstore.com",
  "consumerKey": "ck_abc123...",
  "consumerSecret": "cs_xyz789...",
  "includeCredentialsInQuery": true
}

The includeCredentialsInQuery flag matters. Some hosting setups strip Authorization headers, so query-string auth is more reliable for WooCommerce specifically.

Test the connection by hitting GET /wp-json/wc/v3/products?per_page=1. If you get a JSON product back, you're good.

n8n WooCommerce Node Configuration

n8n has a native WooCommerce node, but for this workflow the Webhook + HTTP Request combination gives more control. Here's the complete n8n setup guide if you're starting from scratch.

Create a Webhook node as your trigger. In WooCommerce, add a webhook under WooCommerce → Settings → Advanced → Webhooks:

  • Topic: Product created
  • Delivery URL: Your n8n webhook URL
  • Secret: A shared secret for HMAC verification

The webhook payload includes everything you need: product name, price, images, description, categories, and permalink.

Five Automation Triggers

1. New Product Published → Auto-Generate Video

This is the core workflow. Every new product triggers a 10-second video featuring the product's hero image, name, price, and a CTA.

Trigger: WooCommerce webhook on product.created

{
  "nodes": [
    {
      "name": "Product Webhook",
      "type": "n8n-nodes-base.webhook",
      "parameters": {
        "path": "woo-new-product",
        "httpMethod": "POST"
      }
    },
    {
      "name": "Build Video JSON",
      "type": "n8n-nodes-base.set",
      "parameters": {
        "values": {
          "string": [
            {
              "name": "videoPayload",
              "value": "={{ JSON.stringify({ resolution: '1080x1080', fps: 30, scenes: [{ duration: 10, layers: [{ type: 'image', src: $json.images[0].src, fit: 'cover' }, { type: 'text', text: $json.name, y: '70%', fontSize: 48, fontWeight: 'bold', color: '#ffffff' }, { type: 'text', text: '$' + $json.price, y: '82%', fontSize: 36, color: '#FFD700' }]}]}) }}"
            }
          ]
        }
      }
    },
    {
      "name": "Render Video",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "url": "https://api.jsonvideo.com/v1/render",
        "method": "POST",
        "headers": { "Authorization": "Bearer {{ $credentials.jsonVideoApi.apiKey }}" },
        "body": "={{ $json.videoPayload }}"
      }
    }
  ]
}

2. Price Change → Update Sale Video

When a product's price drops, generate a "SALE" video with the original price crossed out and the new price highlighted. Use the product.updated webhook and filter for price changes in n8n with an IF node.

// IF node condition
{{ $json.regular_price !== $json.sale_price && $json.sale_price !== "" }}

The sale video template adds a red "SALE" badge and shows both prices — the old price with a strikethrough effect and the new price in bold.

3. Product Review Received → Testimonial Video

Trigger on review.created. Pull the reviewer's name, star rating, and comment text. Generate a testimonial-style video with a star animation and the quote overlaid on the product image.

This works especially well for stores with 4-5 star reviews. Set the IF node to only trigger for reviews rated 4 or higher.

4. Low Stock Alert → Urgency Video

WooCommerce sends a product.updated webhook when stock changes. Filter for stock_quantity < 5 and generate an urgency video with "Only X left!" messaging. Post these directly to Instagram Stories via the Meta API node.

5. Weekly "New Arrivals" Compilation

Use a Cron trigger (every Monday at 9 AM) instead of a webhook. Query the WooCommerce API for products created in the last 7 days, then generate a compilation video showing each product for 3 seconds with transitions.

// HTTP Request to get last week's products
GET /wp-json/wc/v3/products?after={{ $now.minus(7, 'days').toISO() }}&orderby=date&order=desc&per_page=10

Building the JSON Video Template

Here's a complete product video template that works for any WooCommerce product. It pulls the hero image, product name, price, and a short description, then adds a branded CTA at the end.

{
  "resolution": "1080x1080",
  "fps": 30,
  "scenes": [
    {
      "duration": 4,
      "layers": [
        {
          "type": "image",
          "src": "{{product.images[0].src}}",
          "fit": "cover",
          "animations": [
            { "type": "kenBurns", "zoom": 1.15, "duration": 4 }
          ]
        },
        {
          "type": "shape",
          "shape": "rectangle",
          "x": 0,
          "y": "65%",
          "width": "100%",
          "height": "35%",
          "fill": "linear-gradient(transparent, rgba(0,0,0,0.85))"
        },
        {
          "type": "text",
          "text": "{{product.name}}",
          "x": "5%",
          "y": "72%",
          "fontSize": 42,
          "fontWeight": "bold",
          "color": "#ffffff",
          "maxWidth": "90%",
          "animations": [
            { "type": "fadeIn", "delay": 0.5, "duration": 0.4 }
          ]
        },
        {
          "type": "text",
          "text": "${{product.price}}",
          "x": "5%",
          "y": "88%",
          "fontSize": 36,
          "color": "#FFD700",
          "fontWeight": "bold",
          "animations": [
            { "type": "fadeIn", "delay": 0.8, "duration": 0.4 }
          ]
        }
      ]
    },
    {
      "duration": 3,
      "layers": [
        {
          "type": "image",
          "src": "{{product.images[1].src}}",
          "fit": "cover"
        },
        {
          "type": "text",
          "text": "{{product.short_description | stripHtml | truncate(120)}}",
          "x": "5%",
          "y": "75%",
          "fontSize": 28,
          "color": "#ffffff",
          "maxWidth": "90%",
          "backgroundColor": "rgba(0,0,0,0.6)",
          "padding": 16
        }
      ]
    },
    {
      "duration": 3,
      "layers": [
        {
          "type": "shape",
          "shape": "rectangle",
          "fill": "{{store.brandColor}}",
          "width": "100%",
          "height": "100%"
        },
        {
          "type": "text",
          "text": "Shop Now",
          "x": "center",
          "y": "40%",
          "fontSize": 52,
          "fontWeight": "bold",
          "color": "#ffffff"
        },
        {
          "type": "text",
          "text": "{{store.url}}/product/{{product.slug}}",
          "x": "center",
          "y": "58%",
          "fontSize": 22,
          "color": "rgba(255,255,255,0.8)"
        }
      ]
    }
  ]
}

Browse the templates marketplace for more pre-built e-commerce templates you can drop into this workflow.

Multiple Aspect Ratios

Each platform needs different dimensions. Render three versions per product:

Platform Aspect Ratio Resolution Use Case
Instagram Reels / TikTok 9:16 1080x1920 Stories, Reels, TikTok
Instagram Feed / Facebook 1:1 1080x1080 Feed posts, Facebook
YouTube / Website 16:9 1920x1080 Product page embed, YouTube

In n8n, use a SplitInBatches node to loop through three resolution configs and fire three render requests per product. Total render time: about 30-45 seconds for all three.

Adding AutoCaptions for Product Narration

If your product videos include AI-generated voice-over (describing the product features), you'll want burned-in captions. The AutoCaptions API handles this automatically.

After the initial video renders, pipe it through the AutoCaptions endpoint:

{
  "videoUrl": "https://renders.jsonvideo.com/abc123.mp4",
  "style": "snapchat",
  "position": "bottom",
  "fontSize": 32,
  "highlightColor": "#FFD700"
}

This adds word-by-word captions synced to the audio. Particularly useful for Instagram Reels where 85% of viewers watch without sound.

Uploading Videos Back to WooCommerce

Once the video renders, upload it back to the WooCommerce product gallery. This requires two API calls:

Step 1: Upload the media file

// POST /wp-json/wp/v2/media
const formData = new FormData();
formData.append('file', videoBuffer, {
  filename: `${product.slug}-video.mp4`,
  contentType: 'video/mp4'
});

Step 2: Attach to the product

// PUT /wp-json/wc/v3/products/{product_id}
{
  "images": [
    ...existingImages,
    { "id": uploadedMediaId }
  ]
}

Note: WooCommerce's images array actually supports video attachments despite the field name. The video will appear in the product gallery with a play button overlay if your theme supports it. Most modern WooCommerce themes (Storefront, Astra, Kadence) handle this correctly.

Batch Processing Your Existing Catalog

For stores with an existing catalog, you don't want to manually trigger 500 webhooks. Instead, build a separate n8n workflow that paginates through your product catalog:

// Fetch all products in batches of 50
let page = 1;
let allProducts = [];
let hasMore = true;

while (hasMore) {
  const response = await fetch(
    `${storeUrl}/wp-json/wc/v3/products?per_page=50&page=${page}`,
    { headers: { Authorization: `Basic ${btoa(ck + ':' + cs)}` } }
  );
  const products = await response.json();
  allProducts.push(...products);
  hasMore = products.length === 50;
  page++;
}

Feed each product into the video generation workflow. Use n8n's SplitInBatches node with a batch size of 5 and a 10-second delay between batches to avoid hitting rate limits.

For a 500-product catalog, expect the batch job to take 3-4 hours. Schedule it overnight.

Cost Analysis

Here's what auto-generating product videos costs at different scales:

Catalog Size Videos (3 formats each) Render Cost n8n Hosting Total Per Product
50 products 150 renders $7.50 $0 (self-hosted) $7.50 $0.15
200 products 600 renders $30.00 $0 (self-hosted) $30.00 $0.15
500 products 1,500 renders $75.00 $0 (self-hosted) $75.00 $0.15
2,000 products 6,000 renders $240.00 $0 (self-hosted) $240.00 $0.12

Compare that to manual production:

Method Per Product 500 Products
Freelance videographer $100 $50,000
Fiverr basic video $30 $15,000
DIY with Canva (30 min each) $0 + time 250 hours
Automated via JSON Video API $0.15 $75

The automated approach is 200-600x cheaper. And it runs without you.

Check subscription plans for volume pricing that brings the per-render cost down further at scale.

Monitoring and Error Handling

Production workflows need error handling. Add these to your n8n flow:

  1. Image validation: Check that the product has at least one image before attempting to render. Products without images should be logged and skipped.

  2. Render status polling: The render API returns a job ID. Poll every 5 seconds until the status is completed or failed. Set a timeout of 120 seconds.

  3. Retry logic: If a render fails (network issue, temporary API error), retry up to 3 times with exponential backoff.

  4. Slack/email alerts: Send a notification when a batch completes or when errors exceed a threshold.

{
  "name": "Error Handler",
  "type": "n8n-nodes-base.if",
  "parameters": {
    "conditions": {
      "string": [
        {
          "value1": "={{ $json.status }}",
          "operation": "equals",
          "value2": "failed"
        }
      ]
    }
  }
}

Advanced: Adding AI Voice-Over to Product Videos

Plain product videos with images and text work. But adding a 10-second AI-narrated description — "This handcrafted leather wallet features six card slots and RFID blocking" — lifts engagement significantly. E-commerce A/B tests consistently show narrated product videos outperform silent ones by 15-25% on click-through.

Add a voice generation step between template building and rendering. Use ElevenLabs or OpenAI TTS to convert the product's short description into speech, then include the audio URL as a layer in your JSON template:

{
  "type": "audio",
  "src": "{{voiceover_url}}",
  "volume": 0.9
}

This adds about $0.02-0.05 per video in TTS costs and 3-5 seconds of processing time. The return in engagement makes it worthwhile for your top-selling products. For the full API reference on audio layers, check the API documentation.

Next Steps

Start with Trigger 1 (new product → auto video). Once that's stable, add the other triggers one at a time. The batch processing workflow for your existing catalog should run last, after you've validated the template looks good on a few products.

The full n8n setup guide walks through installation and configuration. For custom templates beyond e-commerce, browse the template marketplace.

Every product video you don't create is a conversion you're leaving on the table. At $0.15 per product, there's no reason to leave any product page video-less.

Related Articles