🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

GitHub + Google Sheets: consistent blog tags fast

Lisa Granqvist Partner Workflow Automation Expert

Your blog taxonomy probably started “good enough.” Then a second writer joined, post volume picked up, and suddenly you’ve got five versions of the same tag (and a category list that grows like weeds). That mess hurts findability, internal linking, and frankly your sanity when you audit content.

SEO specialists feel it when rankings stall for pages that should be clustering. Content editors feel it when every draft needs a metadata debate. And if you run a small marketing team, GitHub Sheets tagging automation turns “please fix your tags” into a repeatable system.

This workflow watches your GitHub blog posts, uses AI to suggest categories and tags, then logs everything in Google Sheets so you can review in one place. You’ll see what it does, what you need, and where the usual hiccups show up.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: GitHub + Google Sheets: consistent blog tags fast

The Problem: Blog tags drift, and it quietly costs you

Tagging sounds small until you’re maintaining a real library of posts in GitHub. One author writes “email-marketing,” another writes “email marketing,” someone else adds “newsletter,” and now your “topic cluster” is split across three nearly identical labels. The worst part is how invisible it is at first. You only notice months later when your category pages look thin, related posts don’t relate, and cleaning it up means opening dozens of Markdown files to tweak frontmatter by hand.

It adds up fast. Here’s where it breaks down.

  • Manual frontmatter edits across a repo are slow, especially when you’re jumping between GitHub, your editor, and whatever spreadsheet tracks content.
  • Two people can tag the same topic differently, which means your category pages get diluted and harder to rank.
  • Reviews become subjective because there is no shared baseline; the “right” tags depend on who last touched the post.
  • Duplicates slip in, so you re-analyze posts you already handled and waste time re-litigating the same metadata.

The Solution: AI tag suggestions from GitHub, reviewed in Sheets

This n8n workflow gives you a clean pipeline for metadata consistency. You kick it off from a simple form trigger, and it immediately pulls your existing tracking rows from Google Sheets so it knows what’s already been processed. At the same time, it lists all Markdown posts in your GitHub repo path (like src/content/blog/…) and compares repo files against what’s in the sheet. Only the new posts move forward. For each new file, the workflow fetches the full content, sends it to an AI Agent running an OpenAI chat model, and asks for category and tag suggestions in a structured JSON format. Finally, it appends a review-friendly row to Google Sheets with the filename, current metadata, and proposed updates.

The workflow starts with a manual run (useful during editorial review days). Then it does “dedupe and detect,” so only fresh posts are analyzed. After that, AI suggests consistent taxonomy, and Sheets becomes your review queue and audit log.

What You Get: Automation vs. Results

Example: What This Looks Like

Say your team publishes 10 new GitHub Markdown posts in a week. Manually, a quick metadata pass is often about 10 minutes per post (read, decide tags, update frontmatter, make sure you didn’t invent a new category), which is roughly 100 minutes plus interruptions. With this workflow, you run the form trigger in under a minute, wait for AI processing in the background (often around 10–20 minutes for a batch), and then review suggestions in one Google Sheet. The work becomes reviewing and approving, not hunting and rewriting.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • GitHub for storing your Markdown blog posts
  • Google Sheets to log suggestions and review changes
  • OpenAI API key (get it from your OpenAI dashboard)

Skill level: Intermediate. You’ll connect accounts, confirm your repo path, and map a few sheet columns.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

You trigger a run from a simple form. It’s manual by default, which is handy when you want to run it after a publishing sprint or before a weekly content review.

The workflow pulls “what we already processed.” Google Sheets acts like your memory, so the automation can avoid re-tagging old posts and keep your review log clean.

GitHub gets scanned, compared, and filtered. n8n lists all .md/.mdx files in your chosen repo path, merges that list with sheet records, then routes the flow: if there are no new posts, it stops with a confirmation message. Nice and quiet.

AI suggests taxonomy and Sheets becomes the review queue. For each new post, the workflow fetches the content from GitHub, runs it through an AI Agent (OpenAI chat model), parses structured JSON suggestions, then appends a row to Google Sheets with proposed categories and tags.

You can easily modify the GitHub repo path to match languages, sections, or a docs folder based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Form Trigger

Set up the form that initiates the workflow when a user submits a request to tag and categorize content.

  1. Add and open Form Submission Trigger.
  2. Set Form Title to Start process.
  3. Set Form Description to Start process of adding tags and categories.
  4. Note the execution flow: Form Submission Trigger outputs to both Fetch Sheet Rows and Retrieve Repo File List in parallel.

Step 2: Connect Google Sheets

Configure the sheet that stores existing article paths and the analysis output rows.

  1. Open Fetch Sheet Rows and set Document to [YOUR_ID] and Sheet to Sheet1.
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Fetch Sheet Rows.
  3. Open Append Analysis Rows and set Operation to append.
  4. Set Document to [YOUR_ID] and Sheet to Sheet1 in Append Analysis Rows.
  5. Map columns in Append Analysis Rows using these expressions:
    FileName{{ $('Fetch Post File').item.json.path }}
    Categories{{ JSON.stringify($json.output.old_categories) }}
    Proposed Categories{{ JSON.stringify($json.output.categories) }}
    Tags{{ JSON.stringify($json.output.old_tags) }}
    Proposed Tags{{ JSON.stringify($json.output.tags) }}
  6. Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Analysis Rows.

Step 3: Connect GitHub and Identify New Files

Pull file paths from your repository, compare them with sheet entries, and route based on new items.

  1. Open Retrieve Repo File List and set Resource to file, Operation to list, and File Path to src/content/blog/pl/.
  2. Credential Required: Connect your githubApi credentials in Retrieve Repo File List.
  3. Open Fetch Post File and set Operation to get with File Path set to {{ $json.path }}.
  4. Credential Required: Connect your githubApi credentials in Fetch Post File.
  5. Verify Extract Unique Filenames uses the provided JavaScript to deduplicate sheet paths.
  6. Confirm Aggregate Sheet Paths renames aggregated output to googlesheetsPaths and Aggregate Repo Paths renames to githubPaths.
  7. In Detect New Repo Files, keep the JavaScript that returns only repo files not present in the sheet.
  8. In Route Empty vs Filled, ensure the two outputs use conditions with {{ $json }} to split empty vs non-empty results.

⚠️ Common Pitfall: If Detect New Repo Files returns no items, Route Empty vs Filled will send execution to Empty Repo Notice. Ensure your Google Sheet FileName values match the GitHub file paths exactly.

Step 4: Set Up the AI Tagging Pipeline

Configure the AI agent to generate tags/categories and parse its structured output.

  1. Open Tagging AI Assistant and set Text to {{ $json.path }}.
  2. Keep Prompt Type set to define and Has Output Parser enabled.
  3. Open Structured JSON Parser and keep the schema example as provided to enforce structured JSON output.
  4. Open OpenAI Chat Engine and set Model to gpt-4.1-mini with Response Format as json_object.
  5. Credential Required: Connect your openAiApi credentials in OpenAI Chat Engine.
  6. Open Context Memory Buffer and set Session Key to simple_memory with Context Window Length of 2.
  7. Ensure Structured JSON Parser and Context Memory Buffer are connected as AI sub-nodes to Tagging AI Assistant (credentials belong to OpenAI Chat Engine, not the sub-nodes).

Tip: If the AI output fails to parse, tighten the schema in Structured JSON Parser and confirm the system message in Tagging AI Assistant instructs JSON output.

Step 5: Configure Batching and Completion Notices

Process new files in batches and send completion messages depending on results.

  1. Open Batch Through Posts and keep default batch settings (adjust if you need smaller batches).
  2. Verify the flow from Fetch Post FileBatch Through PostsTagging AI Assistant and Processing Complete.
  3. Open Empty Repo Notice and set Completion Title to List is empty and Completion Message to List of articles is empty (there is no new articles/pages in repository).
  4. Open Processing Complete and set Completion Title to Proces finished and Completion Message to Categories and tags added.

Step 6: Test and Activate Your Workflow

Run a manual test to confirm the workflow pulls new files, tags content, and appends analysis rows.

  1. Click Execute Workflow and submit the Form Submission Trigger form.
  2. Confirm that Form Submission Trigger runs Fetch Sheet Rows and Retrieve Repo File List in parallel.
  3. If new files exist, verify Fetch Post File fetches content and Append Analysis Rows writes rows to the sheet.
  4. Confirm successful completion by seeing Processing Complete or Empty Repo Notice return the expected completion message.
  5. When tests pass, toggle the workflow Active to enable production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • GitHub credentials can expire or lack repo scope permissions. If things break, check your n8n credential settings and the repo access token scopes first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this GitHub Sheets tagging automation?

About 30–60 minutes if your GitHub repo and Google Sheet are ready.

Do I need coding skills to automate GitHub Sheets tagging?

No. You’ll mostly connect accounts and paste in your repo path.

Is n8n free to use for this GitHub Sheets tagging workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually a few cents per post depending on length.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this GitHub Sheets tagging workflow for multiple languages or folders?

Yes, but you’ll want to be deliberate. Update the “Retrieve Repo File List” configuration to point at each language folder (for example, src/content/blog/en/ and src/content/blog/pl/), then adjust your Google Sheet to track filenames per folder so deduping stays accurate. Many teams also tweak the AI Agent prompt to enforce a fixed category list and a maximum number of tags. If you want the workflow to write changes back to GitHub automatically, you can add a commit step after the Structured JSON Parser and only commit when a human-approved column in Sheets says “Approved.” That last part is optional, but it prevents accidental taxonomy chaos.

Why is my GitHub connection failing in this workflow?

Usually it’s an expired token or missing repo permissions. Regenerate your GitHub access token, make sure it can read the target repository, and then update the credential inside n8n. If it fails only on some files, double-check the repo path and file matching for .md/.mdx, because a small mismatch can make the fetch step look like an auth issue.

How many posts can this GitHub Sheets tagging automation handle?

Plenty for most small blogs. On n8n Cloud, the practical limit is your monthly executions and how big each batch is; self-hosting removes execution limits and shifts the constraint to your server and API rate limits. In real terms, teams commonly run batches of 20–100 posts without drama, then review the Sheet asynchronously.

Is this GitHub Sheets tagging automation better than using Zapier or Make?

Often, yes. This workflow benefits from n8n’s branching logic (like the “no new posts” route), batching, and structured AI parsing without forcing you into pricey task counts for every small step. Zapier or Make can work if you only need a simple “new file → send to AI → log to sheet,” but they get clunky when you add deduping against existing rows and multi-step routing. Also, keeping credentials and processing in one place is nice when you’re dealing with repo access. Talk to an automation expert if you want a quick recommendation for your setup.

Once this is running, tag consistency stops being a nagging, recurring project. You review suggestions in one Sheet, keep your GitHub content organized, and move on to work that actually ships.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal