Introduction
Creating patient education videos in healthcare is time-consuming. Your clinical team writes scripts, someone records voiceovers, videos need captions, and distribution takes coordination across multiple platforms. Most organisations handle this manually, which means bottlenecks and inconsistency.
This workflow solves that problem. We'll connect ElevenLabs for AI voiceovers and Hour One for video generation into an automated pipeline. A new script comes in, a professional video emerges on the other end, ready for patients. No switching between tabs, no manual file transfers, no waiting for availability.
The approach works best for organisations producing 5+ education videos monthly. If you're making dozens, the time savings compound quickly. We'll show you how to build this with n8n or Zapier, covering real API endpoints and exactly what data passes between each step.
The Automated Workflow
System Overview
The workflow follows this sequence:
- A script arrives via email or form submission
- ElevenLabs generates a professional voiceover MP3
- Hour One receives the audio and creates a video with a presenter
- The finished video is saved to cloud storage and logged in a spreadsheet
- A confirmation email goes to your team
This runs completely unattended. No manual steps between submission and completion.
Choosing Your Orchestration Tool
n8n is the better choice here. Zapier works, but ElevenLabs webhooks and Hour One's asynchronous job handling require polling and conditional logic that n8n handles more elegantly. You'll write less glue code and have clearer visibility into failures.
If you're already deep in Zapier's ecosystem, it's still viable, but expect to use 20-30% more tasks to achieve the same result.
Claude Code isn't suitable for this workflow since it lacks scheduled execution and doesn't integrate directly with these APIs.
Step 1: Capturing the Script
Set up a webhook or form integration to capture incoming scripts. Most teams use either email or a web form.
If you're using email, create a dedicated inbox like scripts@yourorg.medical. Point your n8n webhook at this inbox via Zapier's "Email by Zapier" action or native email integration.
If you're using a form (better for consistency), use Typeform or Google Forms. n8n has native connectors for both.
The data you need to capture:
- Script text (the actual voiceover content)
- Patient education topic (for metadata)
- Preferred voice (male, female, accent)
- Presenter preference for Hour One (optional)
- Recipient email for delivery notification
Here's what a minimal form webhook payload looks like:
{
"script_text": "Welcome to our cardiac health programme. Today we'll discuss blood pressure management...",
"topic": "Hypertension Basics",
"voice_preference": "female",
"accent": "British",
"presenter_style": "professional",
"recipient_email": "team@healthorg.co.uk"
}
Step 2: Generating the Voiceover with ElevenLabs
ElevenLabs' text-to-speech API is straightforward. You send text and voice settings, receive an MP3 URL.
In n8n, use the HTTP Request node. Here's the configuration:
Method: POST
URL: https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
Headers:
Content-Type: application/json
xi-api-key: YOUR_ELEVENLABS_API_KEY
Body (JSON):
{
"text": "{{ $json.script_text }}",
"model_id": "eleven_monolingual_v1",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.75
}
}
Get your voice IDs from the ElevenLabs dashboard. For British voices, use EXAVITQu4emQHXDF03XO for a female presenter or 21m00Tcm4TlvDq8ikWAM for male. These are stable IDs that don't change.
The response includes an audio URL. Store this in a variable for the next step. n8n automatically handles the response, so add this expression to capture the audio:
{{ $json.audio_url }}
If ElevenLabs rate-limits you (300 requests per minute on starter plans), the request fails. Add a retry policy: set the HTTP node to retry 3 times with exponential backoff (1 second, then 2, then 4).
Step 3: Creating the Video with Hour One
Hour One's API requires a two-step process: submit a job, then poll for completion.
First, create the video job:
Method: POST
URL: https://api.hourone.com/api/videos
Headers:
Authorization: Bearer YOUR_HOUR_ONE_API_KEY
Content-Type: application/json
Body (JSON):
{
"title": "{{ $json.topic }}",
"avatar_id": "amanda_business",
"script": "{{ $json.script_text }}",
"voice_url": "{{ $json.elevenlabs_audio_url }}",
"background": "office",
"language": "en-GB"
}
The avatar IDs available are documented in Hour One's dashboard. amanda_business works well for healthcare content; james_formal is another option. The voice_url should be the MP3 URL from ElevenLabs.
Hour One returns a job ID immediately:
{
"id": "video_abc123def456",
"status": "processing",
"estimated_time_remaining": 120
}
You cannot proceed until the video is ready, so add a polling loop. In n8n, use a "Wait" node set to check every 30 seconds, then an HTTP GET to:
GET https://api.hourone.com/api/videos/{video_id}
Headers:
Authorization: Bearer YOUR_HOUR_ONE_API_KEY
The response shows status as processing, completed, or failed. Once status is completed, extract the video URL:
{{ $json.video_url }}
Most videos process within 3–5 minutes. Set a maximum wait time of 15 minutes; if processing takes longer, send an alert email to your team and mark the job for manual review.
Step 4: Saving the Video and Logging
Once the video URL is ready, download it and save to cloud storage. Most healthcare organisations use either Google Drive or AWS S3 for compliance reasons.
For Google Drive, use the n8n "Google Drive" node:
Action: Upload File
Folder ID: {{ $json.drive_folder_id }}
File Name: {{ $json.topic }}_{{ $now.toFormat('yyyy-MM-dd') }}.mp4
File Content: (the binary video data from Hour One)
Get the folder ID by opening Google Drive, navigating to your education videos folder, and copying the ID from the URL.
Simultaneously, log the completion to a Google Sheet for tracking:
Action: Append Row
Sheet Name: Patient Education Videos
Values:
Column A (Topic): {{ $json.topic }}
Column B (Date): {{ $now.toFormat('yyyy-MM-dd HH:mm') }}
Column C (Drive Link): {{ $json.drive_file_url }}
Column D (Status): Completed
Column E (Voice): {{ $json.voice_preference }}
This gives your team a central record without manual data entry.
Step 5: Sending Notifications
Final step: notify the person who submitted the script.
Use the "Send Email" node in n8n:
To: {{ $json.recipient_email }}
Subject: Your patient education video is ready: {{ $json.topic }}
Body (HTML):
Hi there,
Your video is complete and ready for use.
Title: {{ $json.topic }}
Video Link: {{ $json.drive_file_url }}
Voice: {{ $json.voice_preference }}
Created: {{ $now.toFormat('yyyy-MM-dd') }}
You can download it from the link above or access it in the shared drive folder.
The video is optimised for patient viewing on tablets and smartphones.
Best regards,
Your Education Pipeline
Include the Google Drive link so they can access it immediately.
Complete n8n Workflow Structure
Your n8n canvas should look like this:
- Webhook (script submission)
- ElevenLabs HTTP request (generate voiceover)
- Hour One POST (create video job)
- Wait node (30 second intervals)
- Hour One GET (check job status)
- Conditional: if status = "completed", proceed; else retry
- Google Drive upload
- Google Sheets append
- Send Email notification
- Error handling node (catches failures and alerts your team)
For error handling, add a separate path that triggers if any step fails. This should send an email to your admin with the error details and the original script, so someone can manually investigate.
Error Email Body:
Script: {{ $json.script_text }}
Error: {{ $error.message }}
Step Failed: {{ $executionData.executionName }}
Timestamp: {{ $now.toFormat('yyyy-MM-dd HH:mm:ss') }}
The Manual Alternative
If you prefer more control over the output, you can pause before video generation and require human approval.
Add a conditional node after ElevenLabs finishes. If voiceover generation is successful, send a review email to your clinical lead with the MP3 attached. They click "Approve" or "Request Changes." Only approved voiceovers move to Hour One.
This adds 2–4 hours to the timeline but catches issues before video rendering (which costs time and API credits).
Use n8n's "Wait for Webhook" node to pause the workflow until approval comes in. Set a 24 hour timeout; if the reviewer doesn't respond, send a reminder.
This hybrid approach is useful during the first month while your team calibrates voice tone and video style preferences.
Pro Tips
1. Cache ElevenLabs Voice Samples
Don't call ElevenLabs every time for the same voice. Download voice samples once and store them locally, or use ElevenLabs' voice cloning feature to create a branded voice. This reduces API costs by roughly 40% for teams with consistent presenter styles.
2. Monitor Hour One Queue Times
Hour One's processing time varies based on server load. During peak hours (9am–5pm UK time), video processing can stretch to 8–10 minutes. Schedule script submissions for off-peak times (early morning, evenings, weekends) if you need faster turnarounds.
3. Handle Missing Audio Gracefully
If ElevenLabs fails, the Hour One API will reject the request. Add a validation step after ElevenLabs that checks the audio URL actually resolves (HTTP 200 response). If it doesn't, retry the ElevenLabs request or notify your team immediately rather than letting it fail downstream.
4. Track API Costs in Real Time
Both ElevenLabs and Hour One charge per request. A 5 minute video typically costs £0.15 for ElevenLabs plus £0.25 for Hour One. Create a Google Sheet that logs every video creation and calculates cumulative monthly spend. Set an alert if you hit 80% of your budget threshold.
5. Batch Similar Scripts
If you're processing multiple scripts for the same topic (e.g., one video in English, one with a Welsh voiceover), queue them together. ElevenLabs and Hour One both offer batch processing discounts. Submit them within 1 hour of each other to simplify billing.
6. Use Hour One Templates
Hour One offers pre-designed templates for healthcare (consultation, waiting room, post-discharge). These render 30% faster than custom designs. Standardising on one template per video type (e.g., "Medication Education" always uses Template A) improves consistency and reduces processing time.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| ElevenLabs | Pay-as-you-go | £0.15–£0.30 per video | Billed per character; ~2,000 words = £0.15 |
| Hour One | Starter (50 videos/month) | £49 | Includes cloud storage and avatar library |
| n8n | Cloud Pro (1,000 executions/month) | £30 | Covers up to 1,000 workflow runs; overage £0.0008 per run |
| Google Drive Storage | 100 GB | £1.99 | Shared across your organisation; 10–20 videos use ~15 GB |
| Google Workspace (email) | Business Standard | £10–£14 per user | Includes Gmail, Drive, Sheets (likely already have this) |
| Total (10 videos/month) | — | ~£95–£110 | Assumes existing Google Workspace and n8n account |
| Total (50 videos/month) | — | ~£120–£140 | Hour One Starter plan covers 50; add £49 for next tier |
If you exceed Hour One's included videos, the next tier (Professional, 200 videos/month) costs £149. At that scale, your cost per video drops to roughly £0.40.
The cost per video is competitive compared to hiring a contractor (£50–£150 per video) or maintaining in-house production capacity. The workflow pays for itself after 10–15 videos.