Automate Veo3 Ads with n8n โ No Code Step-by-Step Tutorial
Build a no-code n8n workflow that automatically generates and publishes Veo3 video ads without manual intervention.
Lesson Notes
What You'll Build
A complete Veo3 video ad pipeline in n8n: an AI agent writes a cinematic video prompt based on your brief, sends it to Kie.ai's Veo3 API, waits for generation, retrieves the finished video, and logs everything to Google Sheets. One click, one professional-looking ad.
What You Need
- n8n (cloud or Docker)
- Kie.ai account with API credits (Veo3 Fast: ~40โ55 cents/video)
- OpenAI API key (GPT-4.1 Mini for the AI agent)
- Google Sheet for logging and inspiration tracking
Veo3 Fast vs Veo3 Quality
Kie.ai offers two Veo3 modes. Veo3 Fast is ~40 cents for horizontal or ~55 cents for vertical (9:16). Veo3 Quality costs more but produces higher detail. For rapid iteration and testing, use Fast. Switch to Quality for final deliverables.
Workflow Step by Step
1. Set Direction Node (Edit Fields)
Create a Set node with four fields that define the ad:
brief(string) โ What the ad is for. E.g. "I want an ad for an internet service provider."prompt_inspiration(string/expression) โ A reference Veo3 prompt for style guidance, pulled from your Google Sheet's inspiration column.aspect_ratioโ9:16for vertical (TikTok/Reels) or16:9for horizontal.modelโv3-fastorv3-quality.
2. AI Agent Node
Connect an AI Agent node. Set the prompt to an expression that pulls in both your brief and prompt_inspiration:
Create a Veo3 ad prompt based on this brief: {{$json.brief}}
Take inspiration from this example prompt: {{$json.prompt_inspiration}}
Use the AGENT framework in your system message: Ask (what the task is), Guidance (visual style, tone), Examples (past prompts that worked), Notation (output format), Tools (what tools are available). This gives the AI consistent creative direction across every run.
Add a Structured Output parser expecting two fields: title and final_prompt.
Attach a Google Sheets tool so the agent can look up past ad titles before writing a new one โ this prevents it from repeating the same creative approach.
3. HTTP POST โ Kie.ai (Generate Video)
Create an HTTP Request node:
- Method: POST
- URL: From Kie.ai API docs (the v3 generation endpoint)
- Auth: Generic โ Header Auth โ
Authorization: Bearer YOUR_API_KEY - Body: Raw JSON with
prompt(drag from AI agent output),modelandaspect_ratio(drag from Set Direction). - Stringify the prompt field โ otherwise n8n sends it as an object instead of a string.
A 200 response with a taskId means the video is queued.
4. Wait Node (600 seconds)
Veo3 generation takes 6โ10 minutes. A 600-second wait covers most cases. For production, consider polling instead of a fixed wait.
5. HTTP GET โ Kie.ai (Retrieve Video)
Create another HTTP Request node:
- Method: GET
- URL: Kie.ai record info endpoint
- Auth: Same header auth
- Query Parameters:
taskId= drag from the POST response (exact case: capital I, lowercase d)
6. Google Sheets โ Log the Result
Append a row with: title, final prompt, production status (done), and the video output URL. This builds your ad library and gives the AI agent inspiration material for future runs.
Why This Beats Doing It Manually
The manual flow (log into Kie.ai, paste a prompt, wait, download, upload to a spreadsheet) takes 15โ20 minutes per ad. This workflow does all of that in the background. You can queue up 10 ad briefs in your Set Direction node, add a loop, and come back to 10 finished videos.
Scaling It Up
- Store briefs in Google Sheets and loop through pending rows
- Add a Blotato node at the end to post directly to social media
- Use different
aspect_ratiovalues per platform (9:16 for TikTok, 16:9 for YouTube) - Schedule the workflow to run nightly and process one ad per day automatically
Set your wait node to 600 seconds (10 minutes) for Veo3 Fast โ it usually finishes in 6โ8 minutes but queuing time varies. If you get a 500 error on the GET request, check that your query param is exactly <code>taskId</code> with a capital I and lowercase d.
Tools mentioned in this lesson: