SEO blog content pipeline with keyword research and optimisation
- Published
Building an SEO-optimised blog at scale is tedious. You research keywords, write content, then optimise it manually. That's three separate tools, three separate workflows, and several hours spent copy-pasting between tabs each week.
What if your blog pipeline ran on autopilot? You supply a topic, and the system conducts keyword research, generates a first draft, then optimises it for search engines without you touching anything in between. No manual handoffs, no email notifications asking you to "check the spreadsheet", no waiting for writers or SEO specialists to finish their portion before moving to the next step.
This workflow combines Quick Creator, Squirrly SEO AI, and TrollyAI into a single, self-executing pipeline. It's practical, it's intermediate-level (you'll need to understand basic API concepts), and it saves roughly 6-8 hours per week on a typical content operation.
The Automated Workflow
This pipeline works in three distinct phases: research, creation, and optimisation. We'll use n8n as the orchestration layer because it has robust HTTP node support, built-in error handling, and a clean visual interface for debugging.
Phase 1:
Keyword Research with Squirrly SEO AI
The workflow starts when you provide a topic seed keyword. Squirrly's API returns search volume, difficulty score, and related keywords worth targeting. This data then flows into the content generation step, so your writer knows what terms to naturally weave in.
API Endpoint:
POST https://api.squirrly.co/v3/keyword/research
Request payload:
{
"keyword": "sustainable packaging for ecommerce",
"country": "GB",
"language": "en"
}
Response example:
{
"keyword": "sustainable packaging for ecommerce",
"search_volume": 1200,
"difficulty": 42,
"cpc": 0.75,
"related_keywords": [
{
"keyword": "eco-friendly packaging solutions",
"search_volume": 850,
"difficulty": 38
},
{
"keyword": "biodegradable shipping boxes",
"search_volume": 620,
"difficulty": 45
}
]
}
In n8n, create an HTTP Request node and configure it like this:
- Method: POST
- URL: https://api.squirrly.co/v3/keyword/research
- Headers: Add
Authorization: Bearer YOUR_SQUIRRLY_API_KEY - Body: Use the JSON above, but replace the keyword with a variable pulled from your trigger (e.g., {{ $json.topic }})
Store the response in a variable called keywordData. You'll reference this in the next phase.
Phase 2:
Content Generation with Quick Creator
Quick Creator takes your keyword data and generates a blog post outline and draft. The system knows to emphasise your target keyword and secondary keywords from the Squirrly response.
API Endpoint:
POST https://api.quickcreator.ai/v1/content/generate
Request payload:
{
"topic": "sustainable packaging for ecommerce",
"keywords": [
"sustainable packaging for ecommerce",
"eco-friendly packaging solutions",
"biodegradable shipping boxes"
],
"content_type": "blog_post",
"tone": "informative",
"target_length": 1800,
"include_outline": true
}
Response example:
{
"id": "content_12345",
"outline": [
"Introduction to sustainable packaging",
"Why brands are switching to eco-friendly materials",
"Types of biodegradable packaging",
"Cost comparison: sustainable vs conventional",
"How to implement sustainable packaging",
"Case studies and results"
],
"draft": "Sustainable packaging has become... [full draft text]",
"keyword_density": {
"sustainable packaging for ecommerce": 2.1,
"eco-friendly packaging solutions": 1.8,
"biodegradable shipping boxes": 1.2
}
}
In n8n, add another HTTP Request node after the Squirrly step:
- Method: POST
- URL: https://api.quickcreator.ai/v1/content/generate
- Headers: Add
Authorization: Bearer YOUR_QUICK_CREATOR_API_KEY - Body: Map the keyword array from your Squirrly response using expression mode:
{
"topic": "{{ keywordData.keyword }}",
"keywords": "{{ keywordData.related_keywords.map(k => k.keyword).prepend(keywordData.keyword) }}",
"content_type": "blog_post",
"tone": "informative",
"target_length": 1800,
"include_outline": true
}
Store this response as contentData.
Phase 3:
SEO Optimisation with TrollyAI
TrollyAI refines the draft for readability, meta description, and search intent alignment. This is where you add title tags, internal linking suggestions, and readability improvements without changing the core message.
API Endpoint:
POST https://api.trollyai.com/v1/optimize/seo
Request payload:
{
"content": "[Full blog post draft from Quick Creator]",
"target_keyword": "sustainable packaging for ecommerce",
"secondary_keywords": [
"eco-friendly packaging solutions",
"biodegradable shipping boxes"
],
"content_type": "blog",
"analysis_depth": "full"
}
Response example:
{
"optimised_content": "[Full optimised blog post]",
"title_suggestions": [
"Sustainable Packaging for Ecommerce: A Complete Guide to Eco-Friendly Solutions",
"How to Implement Biodegradable Packaging Without Breaking Your Budget"
],
"meta_description": "Discover sustainable packaging solutions for ecommerce businesses. Compare costs, explore biodegradable options, and read [real](/tools/real) case studies.",
"readability_score": 78,
"keyword_optimisation": {
"primary_keyword_placement": "good",
"secondary_keyword_distribution": "optimal",
"internal_linking_opportunities": 5
},
"estimated_serp_position": 12
}
In n8n, add a final HTTP Request node:
- Method: POST
- URL: https://api.trollyai.com/v1/optimize/seo
- Headers: Add
Authorization: Bearer YOUR_TROLLYAI_API_KEY - Body:
{
"content": "{{ contentData.draft }}",
"target_keyword": "{{ keywordData.keyword }}",
"secondary_keywords": "{{ keywordData.related_keywords.map(k => k.keyword) }}",
"content_type": "blog",
"analysis_depth": "full"
}
Store this as optimisedContent.
Final Step:
Store and Publish
Add a node to save your optimised content. This could be:
- A Google Sheets append row (ideal for review before publishing)
- A direct call to your CMS API (WordPress, Contentful, etc.)
- A Slack message notification so your team knows content is ready
For Google Sheets, use n8n's built-in Google Sheets node:
- Operation: Append
- Spreadsheet: Your content pipeline sheet
- Sheet: "Blog Queue"
- Columns: Topic, Primary Keyword, Search Volume, Title, Meta Description, Optimised Content, Estimated SERP Position, Timestamp
Complete n8n Workflow JSON
Here's a minimal workflow definition you can import directly into n8n:
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"url": "https://api.squirrly.co/v3/keyword/research",
"authentication": "headerAuth",
"headerParametersUI": {
"parameter": [
{
"name": "Authorization",
"value": "Bearer {{ $env.SQUIRRLY_API_KEY }}"
}
]
},
"bodyParametersJson": {
"keyword": "{{ $json.topic }}",
"country": "GB",
"language": "en"
}
},
"name": "Squirrly Keyword Research",
"type": "n8n-nodes-base.httpRequest",
"position": [250, 300]
},
{
"parameters": {
"httpMethod": "POST",
"url": "https://api.quickcreator.ai/v1/content/generate",
"authentication": "headerAuth",
"bodyParametersJson": {
"topic": "{{ nodes['Squirrly Keyword Research'].json.keyword }}",
"keywords": "{{ nodes['Squirrly Keyword Research'].json.related_keywords.map(k => k.keyword).prepend(nodes['Squirrly Keyword Research'].json.keyword) }}",
"content_type": "blog_post",
"tone": "informative",
"target_length": 1800,
"include_outline": true
}
},
"name": "Quick Creator Draft",
"type": "n8n-nodes-base.httpRequest",
"position": [550, 300]
},
{
"parameters": {
"httpMethod": "POST",
"url": "https://api.trollyai.com/v1/optimize/seo",
"authentication": "headerAuth",
"bodyParametersJson": {
"content": "{{ nodes['Quick Creator Draft'].json.draft }}",
"target_keyword": "{{ nodes['Squirrly Keyword Research'].json.keyword }}",
"secondary_keywords": "{{ nodes['Squirrly Keyword Research'].json.related_keywords.map(k => k.keyword) }}",
"content_type": "blog",
"analysis_depth": "full"
}
},
"name": "TrollyAI Optimisation",
"type": "n8n-nodes-base.httpRequest",
"position": [850, 300]
}
],
"connections": {
"Squirrly Keyword Research": {
"main": [
[
{
"node": "Quick Creator Draft",
"type": "main",
"index": 0
}
]
]
},
"Quick Creator Draft": {
"main": [
[
{
"node": "TrollyAI Optimisation",
"type": "main",
"index": 0
}
]
]
}
}
}
The Manual Alternative
If you prefer more control over each stage, you can run these tools separately and review output before proceeding. This takes longer but gives you the option to tweak keyword selection, rewrite sections, or adjust tone between steps.
Use Zapier's multi-step workflows with approval steps. After Squirrly returns keywords, an approval task emails your SEO lead. Once approved, the workflow continues to Quick Creator. After the draft generates, another approval step lets your content editor review and suggest changes before TrollyAI optimises it.
This approach trades speed for control, but it's useful when you're testing the workflow or when content touches sensitive topics that need human judgment.
Pro Tips
1. Handle API rate limits gracefully. Both Quick Creator and TrollyAI have rate limits (typically 100 requests per hour). Add a delay node between workflows if you're running multiple topics. In n8n, use the "Wait" node and set it to pause 45 seconds between executions. Store any failed requests in a catch node and retry them the next day.
2. Watch your token usage on LLM-based tools. Quick Creator and TrollyAI charge by tokens processed. A 1800-word article typically costs 3000-4000 tokens. If you're generating 20 articles per week, budget accordingly. Test with smaller target lengths (1200 words) first to understand your cost per article.
3. Validate keyword difficulty scores before publishing. Squirrly's difficulty metric (0-100) tells you how hard it is to rank. If you're a new site, target keywords under 40 difficulty. Set up a conditional branch in n8n: if difficulty > 50, flag the keyword for manual review instead of auto-generating content.
4. Log everything to a database. Store each workflow execution in a table (MongoDB, PostgreSQL, or Google Sheets) with timestamps, inputs, outputs, and cost per run. This helps you identify which topics perform best, spot API failures early, and optimise your spend over time.
5. Use Claude Code for post-processing. If you have access to Claude, add a final node that calls Claude's API to proofread the optimised content for British English spelling and style consistency. Claude catches errors that automated tools miss, especially around phrasing and tone.
Cost Breakdown
| Tool | Plan Needed | Monthly Cost | Notes |
|---|---|---|---|
| Squirrly SEO AI | Professional | £79 | Includes 5000 keyword searches per month |
| Quick Creator | Growth | £199 | Includes 100 content generations per month; extras cost £0.15 per 1000 tokens |
| TrollyAI | Premium | £149 | Includes 200 optimisations per month; extras cost £0.10 per 1000 tokens |
| n8n | Cloud Pro | £25 | Executions are metered; 10M monthly executions included |
| Google Sheets API | Free | £0 | Already covered by n8n |
Total baseline cost: £452 per month. If you generate 80 blog articles per month (two per business day), your cost per article is approximately £5.65 including all tools and overages. Manual content operations typically cost £50-200 per article when accounting for writer time, SEO review, and editing.
This workflow becomes cost-effective after your second month of operation. By month three, you're saving thousands in labour costs while maintaining consistent publishing velocity.
Set up this workflow this week, and you'll have your first batch of optimised articles ready by Monday. The initial configuration takes 2-3 hours, but the payoff is immediate: a fully automated pipeline that outputs publication-ready content without human intervention between steps....... For more on this, see SEO Content Creation Without the Grind: AI Tools for Fast....
More Recipes
Automated Podcast Production Workflow
Automated Podcast Production Workflow: From Raw Audio to Published Episode
Build an Automated YouTube Channel with AI
Build an Automated YouTube Channel with AI
Medical device regulatory documentation from technical specifications
Medtech companies spend significant resources translating technical specs into regulatory-compliant documentation.