This post explains how to automate blog post writing for your product in a way that improves SEO without giving up control. There are plenty of AI tools that can generate posts quickly, but most of them leave you with very little say over the details, which often leads to low-quality content. At a high level, writing a new blog post involves the following steps:

  • Finding a topic that is relevant to your product and has a good search volume.
  • Researching the topic online.
  • Writing the post.
  • Creating diagrams and a cover image.
  • Publishing the post to your website.

I’ll walk through a workflow that covers all of these steps using TeamCopilot.ai, but you can apply the same approach with any other coding agent.

Prerequisites

  • First, set up TeamCopilot.ai using the installation guide in our docs.
  • We will use gpt-5.4-mini for this workflow, but any model that is equal or better should also work.
  • You must have edit access to the website where you want to publish the blog posts. In this post, we assume you have a GitHub repo where you want to publish the blog posts and all related assets.
  • We also assume that you can place .md and .mdx files in the git repo and have them automatically converted into HTML files and published to your website.
  • There must be some documentation / example blog posts / AI skill file in your github project that can be used as a reference for the agent on where to place the new blog post and cover image.

Overall flow

The agent should follow these steps:

Rendering diagram

The advantage of using TeamCopilot for this workflow is that you retain control over every step. If you do not like part of the post or want to make the flow more complex, you can adjust it easily.

1) Setup useful skills and workflows

The workflow needs these helper tools:

  • Web search
  • Image generation
  • Humanizing text
  • SEO keyword volume lookup

Web search skill

For web search, use Tavily. First, sign up at https://www.tavily.com/ and get your API key. Then go to the "Browse skills" section on TeamCopilot, click create skill, name it tavily-web-search, and add the following content to the skill file:

Finally, add TAVILY_SECRET to your profile secrets.

Image generation workflow

We will use the image-2 mode from GPT for this. You will need to get an OpenAI key and add it to your profile secrets with the name OPENAI_API_KEY. This will be a Python workflow rather than a skill file. The agent that writes the blog will run the script with a prompt describing the image, and the script will call the OpenAI API and save the file locally.

You can create this workflow, named gpt-image-2-generator, by going to the "AI chat" section and telling the agent:

This script accepts a prompt and an optional reference image URL, then generates an image using the OpenAI API. The reference image can help steer the model toward specific elements. For example, if the blog is about a product or company, the agent can pass in the relevant logo so the generated image includes it somewhere.

Humanizing text

This workflow converts the blog draft into a more natural-sounding version. It looks for patterns that are common in AI-generated text and rewrites them without losing semantic meaning. You can read about how to set this up in this blog: How to Humanize AI Text Without Sounding Robotic.

Once again, create this workflow through the AI chat section and have the agent build it from the code in the blog link above. Name the workflow humanise-text.

SEO keyword volume lookup skill

Use dataforseo.com for keyword volume research. Sign up on the site to get your API key and add it to your profile secrets with the name DATA_FOR_SEO_KEY. Then create a new skill called dataforseo-keyword-api and add the following content to it:

2) Setup the github repo of your website

Open the AI chat tab and ask the agent to clone your GitHub repo into the workspace. If the repo is private, add your GitHub access token to profile secrets before starting a chat.

3) Create the blog-post-writing skill

In the skills tab, create a new skill called blog-post-writing and add the following content to it:

This skill contains instructions for different parts of the pipeline. Feel free to adapt any part of it to suit your workflow.

4) Setting up the agent cronjob

A cronjob is a scheduled task that runs at a specific time or interval. In TeamCopilot, you can schedule one from the "Cronjobs" tab. TeamCopilot uses a custom version of the Ralph loop. You can add todos explicitly, or implicitly through a prompt or skill file, and the agent is then prompted to complete each todo one by one until everything is done. The agent can also modify the TODO list during execution, which makes it a turning, complete system capable of running general-purpose workflows. Compared with a regular skill file, the TODO system gives stronger guarantees that the agent will follow the instructions in the right order.

Start by creating a new cronjob and adding the following prompt and todos to it:

Prompt

1Your task it to create a new blog post for <YOUR PROJECT NAME> project as per the "blog-post-writing" skill.
2- About this project: <YOUR PROJECT DESCRIPTION>
3- Project location on disk: <PATH TO THE CLONED GITHUB REPO>
4- Project website: <YOUR PROJECT WEBSITE>

Todo items

Add the following items to the todo list below the prompt:

1
List all current blogs in the project, using titles only.
2
Use the tavily-web-search skill to find the latest news or trending topics from the past week in the project’s industry, then list the relevant items with a two-line summary for each.
3
If no relevant news is found, explain how each news item could be linked to the project, with the goal of educating the reader and subtly promoting the product where possible. Rank the options from highest to lowest priority.
4
If there is still no relevant news, use dataforseo-keyword-api to research what related blog topics make sense.
5
Ask the user which topic they want to write about. Include the news heading, a two-line summary, the date, the article link, and how it connects to the project.
6
After the user picks a topic, do deep web research and read relevant existing articles.
7
Use dataforseo-keyword-api to determine the best title for the post.
8
Write the blog post in the project, but do not create the cover image yet. Include an extensive FAQ and link to existing posts where appropriate.
9
Run the blog through the humanise-text workflow, then replace the main content with the rewritten output.
10
Generate the cover image, update the style history, and use a reference logo if the post is about another product or company.
11
Move the generated image into the project, update the frontmatter, commit the changes, and push them to main.

5) Add a CTA to the blog post

Make sure that your blog post templates have a CTA button at the bottom of the post. It should be clearly visible and easy to click. Something like this:

Blog CTA example

6) Get Google to index your blog

Once your blog is published, the quickest way to get Google to index it is to submit the page URL on the Google search console and request indexing. This is a very important step, so ensure that you do this each time, and it can only be done manually as of today (Google has no API for this).

7) Results

With this cronjob, you can expect new blog posts that are distinct from previous ones, SEO optimized, read like they were written by a human, and paired with varied cover images. Because the process keeps a human in the loop, you also stay in control of the actual topics.

The total cost per blog should typically be around $0.20 to $0.50 if you use the GPT-5.4-mini model and the image-2 model for image generation.

You should monitor the performance of each blog post over time to see which ones are performing well, and include those learnings as part of the agent workflow.

Support the project

If this was useful, star TeamCopilot on GitHub.

TeamCopilot is a shared AI agent for teams with centralized context, permissions, and workflows.

Star on GitHub