{
    "schema_version": "1.0",
    "exported_at": "2026-08-16T12:30:02+00:00",
    "source": "https://invitationbuddy.com/workflows/seo-article-production-workflow",
    "workflow": {
        "name": "SEO Article Production Workflow",
        "slug": "seo-article-production-workflow",
        "version": "1.0.0",
        "tagline": "Rank-focused article production driven off a keyword calendar",
        "summary": "A scheduled pipeline that takes a keyword from your calendar, analyses the SERP, produces an optimised article and queues it for editorial review.",
        "description": "Production-line SEO content. Where the content marketing workflow starts from a topic, this one starts from a keyword row in a spreadsheet and runs on a schedule — which is what you need once you are publishing at volume.\n\nEvery run produces an article plus the SERP analysis showing why it is structured the way it is, so an editor can challenge the reasoning rather than just the prose.",
        "category": "SEO",
        "type": "Multi Tool",
        "difficulty": "intermediate",
        "automation_level": "semi_automated",
        "pricing": "paid",
        "language": "en",
        "trigger": {
            "type": "schedule",
            "detail": "Weekly content calendar"
        },
        "input_types": [
            "text",
            "csv",
            "url"
        ],
        "output_types": [
            "blog",
            "report"
        ],
        "author": null,
        "company": null,
        "last_updated": "2026-07-05"
    },
    "overview": {
        "purpose": "Production-line SEO content. Where the content marketing workflow starts from a topic, this one starts from a keyword row in a spreadsheet and runs on a schedule — which is what you need once you are publishing at volume.\n\nEvery run produces an article plus the SERP analysis showing why it is structured the way it is, so an editor can challenge the reasoning rather than just the prose.",
        "business_value": "Makes content output predictable and forecastable: a keyword calendar becomes a publishing schedule with a known cost per article.",
        "expected_outcome": "A queued, optimised draft per calendar row, each with its SERP analysis attached for the editor.",
        "problems_solved": [
            "Keyword research and content production live in separate tools and separate heads",
            "No audit trail for why an article was structured a given way",
            "Volume publishing degrades quality without a fixed process",
            "Refresh decisions are made on gut feel"
        ],
        "ideal_users": [
            "In-house SEO teams publishing weekly or more",
            "Content agencies with keyword-led retainers",
            "Publishers running topical clusters"
        ],
        "benefits": [
            "Runs on a schedule — output becomes a forecast, not a hope",
            "Every article carries the SERP reasoning behind its structure",
            "Cost per article is known before you commit",
            "Refresh candidates surface automatically"
        ],
        "limitations": [
            "Needs a paid SEO data source to be worth running",
            "Quality still gated by human review — this increases throughput, not autonomy",
            "Works poorly where the SERP rewards original research",
            "A core update can invalidate the structural assumptions overnight"
        ],
        "success_metrics": [
            "Articles published per week",
            "Median position at 90 days",
            "Cost per article including tool spend",
            "Percentage of drafts accepted without restructuring"
        ]
    },
    "metrics": {
        "estimated_minutes": 120,
        "estimated_cost": 4.1,
        "cost_currency": "USD",
        "estimated_tokens": 72000,
        "success_rate": 88,
        "automation_percent": 65,
        "human_review_percent": 35
    },
    "industries": [
        "SaaS",
        "E-commerce",
        "Media",
        "Marketing"
    ],
    "tags": [
        "High ROI",
        "Scheduled",
        "Human Review"
    ],
    "ai_skills": [
        "Text Generation",
        "Data Analysis",
        "Summarization"
    ],
    "tools": [
        {
            "name": "ChatGPT",
            "role": "primary",
            "required": true,
            "url": "https://invitationbuddy.com/ai-directory/chatgpt"
        },
        {
            "name": "Claude",
            "role": "supporting",
            "required": true,
            "url": "https://invitationbuddy.com/ai-directory/claude"
        }
    ],
    "models": [],
    "integrations": [
        {
            "name": "OpenAI",
            "kind": "ai_provider",
            "auth_type": "api_key",
            "required": true
        },
        {
            "name": "Google Sheets",
            "kind": "productivity",
            "auth_type": "oauth",
            "required": true
        },
        {
            "name": "WordPress",
            "kind": "marketing",
            "auth_type": "api_key",
            "required": false
        },
        {
            "name": "Zapier",
            "kind": "automation",
            "auth_type": "oauth",
            "required": false
        }
    ],
    "prerequisites": [
        {
            "kind": "api_key",
            "label": "LLM API key",
            "detail": "For the analysis and drafting steps.",
            "required": true
        },
        {
            "kind": "account",
            "label": "SEO data provider",
            "detail": "Semrush, Ahrefs or DataForSEO with API access.",
            "required": true
        },
        {
            "kind": "account",
            "label": "Google Sheets",
            "detail": "Holds the keyword calendar that triggers each run.",
            "required": true
        },
        {
            "kind": "account",
            "label": "Automation platform",
            "detail": "Zapier, Make or n8n to run the schedule.",
            "required": true
        }
    ],
    "steps": [
        {
            "number": 1,
            "title": "Pull the next keyword from the calendar",
            "description": "The scheduled trigger reads the next unprocessed row: keyword, target slug, intent and owner.",
            "tool": "Google Sheets",
            "input": "Keyword calendar row",
            "output": "Job payload",
            "expected_result": "A job with keyword, intent and owner attached.",
            "estimated_minutes": 2,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 2,
            "title": "SERP analysis",
            "description": "Fetch the current top ten and extract their structure, word count, entities covered and content format.",
            "tool": "Semrush",
            "input": "Primary keyword",
            "output": "SERP structure report",
            "expected_result": "A report showing what format and depth currently ranks.",
            "estimated_minutes": 12,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false,
            "warnings": [
                "If the top ten are dominated by a format you cannot produce, stop and reassign the keyword"
            ]
        },
        {
            "number": 3,
            "title": "Entity and gap extraction",
            "description": "Identify the entities every ranking page mentions, and the ones only some cover — the second list is the opportunity.",
            "model": "GPT-4o",
            "prompt": "From these top-ranking pages for \"{{keyword}}\", extract:\n\n1. Entities mentioned by ALL of them (mandatory coverage)\n2. Entities mentioned by SOME (differentiation opportunities)\n3. Entities mentioned by NONE that a domain expert would expect\n\nPages:\n{{page_contents}}\n\nReturn three lists. Be concrete — name the entity, not the theme.",
            "input": "SERP report",
            "output": "Entity coverage matrix",
            "estimated_minutes": 10,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 4,
            "title": "Structured outline",
            "description": "Build the outline to cover every mandatory entity and at least three differentiators.",
            "model": "Claude Sonnet",
            "input": "Entity matrix + intent",
            "output": "Outline with entity map",
            "expected_result": "An outline where each section maps to named entities.",
            "estimated_minutes": 8,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 5,
            "title": "Draft and optimise",
            "description": "Draft section by section, then run the optimisation pass for keyword placement and readability.",
            "model": "Claude Sonnet",
            "input": "Outline",
            "output": "Optimised draft",
            "estimated_minutes": 25,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 6,
            "title": "Editorial review",
            "description": "The assigned editor verifies claims, challenges the structure against the SERP analysis, and approves or returns it.",
            "input": "Draft + SERP analysis",
            "output": "Approved or returned",
            "estimated_minutes": 45,
            "difficulty": "intermediate",
            "automation": "manual",
            "manual_review": true,
            "warnings": [
                "Every factual claim needs a source check before publication"
            ]
        },
        {
            "number": 7,
            "title": "Queue for publication",
            "description": "Approved drafts land in the CMS as scheduled posts and the calendar row is marked done.",
            "tool": "WordPress",
            "input": "Approved draft",
            "output": "Scheduled post",
            "estimated_minutes": 3,
            "difficulty": "intermediate",
            "automation": "auto",
            "manual_review": false
        },
        {
            "number": 8,
            "title": "Performance review at 90 days",
            "description": "Compare actual position against the forecast and flag refresh candidates back into the calendar.",
            "tool": "Google Search Console",
            "input": "Published URLs",
            "output": "Refresh candidates",
            "expected_result": "Underperformers automatically re-enter the calendar.",
            "estimated_minutes": 15,
            "difficulty": "intermediate",
            "automation": "semi",
            "manual_review": false
        }
    ],
    "prompts": [
        {
            "title": "Entity and gap extraction",
            "kind": "user",
            "body": "From these top-ranking pages for \"{{keyword}}\", extract:\n\n1. Entities mentioned by ALL of them (mandatory coverage)\n2. Entities mentioned by SOME (differentiation opportunities)\n3. Entities mentioned by NONE that a domain expert would expect\n\nPages:\n{{page_contents}}\n\nReturn three lists. Be concrete — name the entity, not the theme.",
            "variables": [
                "keyword",
                "page_contents"
            ],
            "model_hint": "GPT-4o"
        }
    ],
    "use_cases": [
        {
            "title": "Topical cluster build-out",
            "description": "Publish a 20-article cluster on a schedule with consistent internal linking.",
            "industry": "SaaS",
            "outcome": "Cluster live in a quarter"
        },
        {
            "title": "Retainer delivery",
            "description": "Hit a contracted article count per month with predictable cost.",
            "industry": "Marketing",
            "outcome": "Retainer met without overtime"
        },
        {
            "title": "Programmatic category pages",
            "description": "Generate and optimise category descriptions at catalogue scale.",
            "industry": "E-commerce",
            "outcome": "Thin pages replaced"
        }
    ],
    "faq": [
        {
            "question": "How is this different from the Content Marketing workflow?",
            "answer": "That one starts from a topic and runs on demand. This starts from a keyword calendar and runs on a schedule — built for volume and forecastability rather than one-off pieces."
        },
        {
            "question": "What happens when Google ships a core update?",
            "answer": "Re-run step 2 on your main keywords. The SERP structure report is what tells you whether the format that used to rank still does."
        },
        {
            "question": "Can this run fully unattended?",
            "answer": "The production side can. Publication should not — the editorial review exists because a confident, wrong article published under your domain costs more than the time it saves."
        }
    ]
}