You publish a blog post on Monday. By Tuesday, you've manually rewritten it as an email newsletter. Wednesday is spent chopping it into six social media posts. Thursday, you're staring at a script, trying to turn paragraphs into something a video presenter can actually say. By Friday, you're exhausted and the content is only halfway distributed. This is the content creator's tax: the assumption that distribution requires manual work. A blog post is not a blog post. It's raw material. The same ideas should live in your email, on LinkedIn, on YouTube, in a podcast, everywhere your audience gathers. But nobody has time to rewrite the same message six different ways. There's a better path. You can wire your publishing workflow so that one piece of content automatically branches into multiple formats, each optimised for its channel, without you touching it again. A blog post goes in; email copy, social clips, and a narrated video come out. This post shows you how to build it.
The Automated Workflow
We'll use n8n as our orchestrator because it handles file downloads, triggers multiple parallel workflows, and integrates well with all three tools we need. The flow looks like this: when you publish a blog post, n8n grabs the content, sends it to Copy.ai for format conversion, feeds the outputs to ElevenLabs for voice generation, and finally produces a video from Hour One using the narrated text. Start by setting up a webhook trigger in n8n that fires when you publish. Most blogging platforms (WordPress, Ghost, Substack, Medium) have webhook support. If yours doesn't, you can check an RSS feed on a schedule instead.
POST /webhook/blog-published
Content-Type: application/json { "blog_id": "post-12345", "title": "How to Build Better Habits", "body_html": "<p>Your content here...</p>", "published_at": "2026-03-15T09:00:00Z", "author": "Jane Doe"
}
Once the webhook fires, your n8n workflow should immediately fetch the full blog post content. If your platform truncates content in the webhook payload, use an HTTP node to request the full post from your blog's API.
Step 1: Extract and Clean Content
Before you send anything downstream, parse the HTML and extract just the plain text. Strip out navigation menus, sidebars, and metadata. You want the core article only.
GET https://your-blog.com/api/posts/12345
Authorization: Bearer YOUR_API_KEY
Assign the cleaned body text to a variable you'll reference throughout the workflow. Call it {{ blog_content }}.
Step 2: Generate Multiple Content Formats
Now send that content to Copy.ai. You'll make three separate API calls in parallel, one for each output format: email newsletter, social media captions, and video script. This parallelisation saves time because all three requests happen simultaneously rather than waiting for each one to finish before starting the next. Create three "HTTP Request" nodes in n8n, all connected to the same upstream node. Each makes a different API call to Copy.ai with a different prompt.
POST https://api.copy.ai/v1/generate
Content-Type: application/json
Authorization: Bearer YOUR_COPYAI_API_KEY { "prompt": "Convert this blog post into a professional email newsletter (300-400 words) that summarises the key takeaways. Include a clear call-to-action at the end.\n\nBlog content:\n{{ blog_content }}", "temperature": 0.7, "max_tokens": 600
}
For the social media version:
POST https://api.copy.ai/v1/generate
Content-Type: application/json
Authorization: Bearer YOUR_COPYAI_API_KEY { "prompt": "Create 6 standalone social media posts (100-150 words each) from this blog content. Each post should work independently on LinkedIn, Twitter, or Instagram. Format as a numbered list.\n\nBlog content:\n{{ blog_content }}", "temperature": 0.8, "max_tokens": 1200
}
And for the video script:
POST https://api.copy.ai/v1/generate
Content-Type: application/json
Authorization: Bearer YOUR_COPYAI_API_KEY { "prompt": "Convert this blog post into a video script (400-500 words) for a 2-3 minute YouTube explainer. Write as if speaking directly to the audience. Include a hook in the first 2 sentences, 3-4 main points, and a closing call-to-action.\n\nBlog content:\n{{ blog_content }}", "temperature": 0.7, "max_tokens": 900
}
Each of these calls returns generated text in the response. Parse each response and store the results separately.
Step 3: Send Email Copy to Your Email Service
The email output from Copy.ai goes straight into your email tool via webhook or API. If you use Substack, Mailchimp, or ConvertKit, they all have API endpoints for creating draft campaigns.
POST https://api.mailchimp.com/3.0/campaigns
Authorization: Basic YOUR_MAILCHIMP_API_KEY
Content-Type: application/json { "type": "regular", "recipients": { "list_id": "YOUR_LIST_ID" }, "settings": { "subject_line": "{{ blog_title }} - Key Insights", "from_name": "Your Name", "reply_to": "you@example.com", "title": "Campaign Draft: {{ blog_title }}" }, "content": { "html": "{{ email_copy_from_copyai }}" }
}
This creates a draft in your email account. You review it once, check that links are correct, and hit send. No copying and pasting.
Step 4: Generate Voice and Video
The video script needs a voice. Send it to ElevenLabs to generate an MP3, then pass both the script and audio to Hour One to produce a video.
POST https://api.elevenlabs.io/v1/text-to-speech
xi-api-key: YOUR_ELEVENLABS_API_KEY
Content-Type: application/json { "text": "{{ video_script_from_copyai }}", "model_id": "eleven_monolingual_v1", "voice_settings": { "stability": 0.5, "similarity_boost": 0.75 }
}
This returns audio as a binary stream. Download it and store the file URL temporarily (n8n can store files for 24 hours). Now feed the script and audio URL to Hour One:
POST https://api.hourone.ai/api/jobs
Authorization: Bearer YOUR_HOURONE_API_KEY
Content-Type: application/json { "scenario_uuid": "YOUR_PRESENTER_ID", "title": "{{ blog_title }} - Video Version", "script": "{{ video_script_from_copyai }}", "audio_url": "{{ elevenlabs_audio_url }}"
}
Hour One queues the job and returns a job ID. The video typically renders in 5-15 minutes. You can either wait for completion in your workflow (which ties up resources) or use a webhook callback to notify you when it's done.
Step 5: Store Outputs and Notify You
Once all three content pieces are ready, save them somewhere accessible. Use n8n's file storage or connect to Google Drive, Dropbox, or AWS S3.
POST https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart
Authorization: Bearer YOUR_GOOGLE_DRIVE_TOKEN
Content-Type: multipart/related { "metadata": { "name": "{{ blog_title }} - Content Pack", "mimeType": "application/vnd.google-apps.folder" }, "files": [ { "name": "newsletter.txt", "content": "{{ email_copy }}" }, { "name": "social_posts.txt", "content": "{{ social_posts }}" }, { "name": "video_script.txt", "content": "{{ video_script }}" } ]
}
Finally, send yourself a summary notification via email or Slack:
POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL
Content-Type: application/json { "text": "Content repurposing complete for '{{ blog_title }}'", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "*Newsletter Draft*: Ready in Mailchimp\n*6 Social Posts*: Saved to Drive\n*Video*: Processing on Hour One (typically 5-15 mins)" } } ]
}
The entire workflow runs in the background. By the time you finish your morning coffee, all three formats are either ready or in progress.
The Manual Alternative
If you prefer tighter control over voice, tone, or key messaging, you can pause the workflow at each stage for human review. Configure n8n to send you the Copy.ai outputs before they get passed downstream. You edit them, then click a button to resume the workflow. This adds manual steps back in, but it's still faster than starting from scratch. Alternatively, use Copy.ai and ElevenLabs as standalone tools without orchestration. Generate the email, social posts, and script yourself, then manually upload the script and audio to Hour One. You lose the automation benefit but keep the AI assistance for content generation.
Pro Tips Rate Limits and Costs:
Copy.ai charges per API call, not per word. A single blog post might trigger six API calls (three formats, sometimes with follow-up refinement requests). At their current pricing, that's roughly £0.50 per blog post. ElevenLabs charges per character of text synthesised, usually £0.03-0.05 per 1,000 characters. A 500-word video script costs about £0.02. Keep these costs low by reusing generated content where possible; don't regenerate the same script multiple times. Error Handling: API calls fail. Copy.ai times out. ElevenLabs hits rate limits. Build retry logic into your n8n workflow. Set each HTTP node to retry twice with exponential backoff before failing the entire workflow. When it fails, log the error to a spreadsheet so you know which posts need manual attention. Content Quality: AI-generated content is usable but often generic. Test the first few outputs manually. If the email reads like a robot, tweak the Copy.ai prompt to include your brand voice. If the video script sounds choppy, break it into shorter sentences before sending to ElevenLabs. Scheduled Publishing: Don't publish everything immediately. Use n8n's scheduling feature to stagger your social posts across the week. This spreads your reach and keeps your audience engaged rather than dumping six posts in one day. Tracking and Attribution: Add UTM parameters to all links in the email and social posts so you can track which channel drives the most traffic. Copy.ai can include these automatically if you add them to your prompt: "Include UTM parameters (utm_source=email, utm_medium=newsletter, utm_campaign={{ blog_title }}) on all links."
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| n8n Cloud | Pro | £20 | Includes 100,000 tasks per month; ample for most workflows |
| Copy.ai | API usage | £0.50-5.00 | Pay per call; roughly £0.50 per blog post with three formats |
| ElevenLabs | Pro | £11 | 100,000 characters per month; sufficient for voice on 10-15 videos |
| Hour One | Standard | £48-99 | 30-50 video minutes per month depending on plan |
| Total | £79-135 | Breaks even after 15-20 repurposed blog posts |