9
3 Comments

Here’s how to build an automated system that keeps your website up to date

Websites rarely break all at once. They just get messy, gradually.

Links stop working. Pages get outdated. CTAs stop making sense…

Here’s a simple system that keeps everything up to date for you.

How it works

Every week, this system will:

  • Scan your site
  • Find problems
  • Fix small ones
  • Log every issue and change
  • Flag larger issues for your review

You can do this in many ways. Here are the easiest options:

Option A (no-code, easiest)

  • Screaming Frog → scans your site
  • n8n → runs the workflow on a schedule
  • OpenAI (through n8n) → summarizes issues
  • Google Sheets → saves every issue and change
  • Jotform → approvals

Option B (more technical)

  • GitHub Actions → runs on a schedule
  • Custom script → scans your site
  • OpenAI → analyzes issues
  • GitHub Issues → review queue

We’ll go with Option A. Why this stack?

  • Because it is simple and it works.
  • Screaming Frog can schedule crawls and export crawl data, including to Google Sheets.
  • n8n can run on a schedule, connect to Google Sheets, and use OpenAI in the workflow.

Now, let's build it.

Step 1 — Create one sheet

In Google Sheets, create a new file named Website Maintenance.

Add 4 tabs inside the sheet.

Tab 1: Pages

Add these columns in row 1: URL | Page Type | Priority | Owner

Now, fill this tab with your important pages.

Start with:

  • Homepage
  • Pricing
  • Product pages
  • Top blog posts
  • Landing pages

Do not start with your whole site, unless it’s a small one.

Start with 20 to 50 pages. That is enough for version 1.

Tab 2: Issues

Add these column names: Scan Date | URL | Issue Type | Severity | AI Summary | Suggested Fix | Auto Fix | Status

Tab 3: Approvals

Add these column names: URL | Proposed Change | Risk Level | Approve | Notes | Approved By

Tab 4: Log

Add these column names: Date | URL | Change Made | Change Type | Approved By | Run ID

That’s your control center

Step 2 — Run Screaming Frog

Open Screaming Frog. Paste your domain. Click Start. Wait for it to finish.

Now check:

  • Response Codes → find broken pages (4xx, 5xx)
  • Page Titles → missing titles
  • H1 → missing or duplicate

If you can see these, you’re good.

Now schedule it:

  • Once per week
  • Monday morning

Step 3 — Export the crawl

After your first crawl:

  • Click Export
  • Save the file as CSV

You only need:

  • URL
  • Status code
  • Title
  • H1

Save this file. This is what n8n will read.

Step 4 — Set up n8n

Open n8n. Click New Workflow

Add the first node → Schedule Trigger

Set: Monday, 8:00 AM

This should run after Screaming Frog.

Add the second node → Read Google Sheet (pages)

  • Add Google Sheets node
  • Connect your account
  • Choose your sheet
  • Choose tab pages
  • Operation → Get Rows

Test it. You should see your URLs.

Add the third node→ Read crawl file

  • Add a step to read the Screaming Frog CSV file.
  • Then use Extract From File to turn the CSV into rows n8n can use.
  • Read the file from a place n8n can access (like Google Drive or Google Sheets).

Now you have:

  • Your page list
  • Your crawl data

Add the fourth node → AI analysis (this is the core)

Add an OpenAI node

Use this prompt (or something similar):

Check this page.

Rules:

High = broken page or important page is wrong
Medium = outdated/weak CTA
Low = small issue, easy to fix 

Only return auto = yes if:fix is simple

fix does not change pricing, product, or core copy

Here are some examples of auto = yes:

Update year (2024 → 2026)
Fix known broken internal link
Small formatting fix

Here are examples of auto = no:

Rewrite CTA
Change homepage copy
Change pricing

Look for:

Broken page
Old year
Missing CTA

If the issue is LOW and you have the page content, also return updated content.

Return:

Issue
severity
fix
auto (yes/no)
updated_content

Important: Run this one page at a time.

Add the fifth node → Save results to Google Sheets

Add another Google Sheets node.

  • Choose tab → issues
  • Operation → Append Row

Map:

  • Date → today
  • URL → page
  • Issue → AI output
  • Severity → AI output
  • Fix → AI output
  • Auto → AI output

This is how the issues tab gets filled.

Add the sixth node → Decide

Add IF node

IF

Low and auto = yes

→ continue

ELSE

→ stop

Step 5 — Update the page

If it passes the IF:

Send updated_content back to your site.

This only works if your site supports it. For example:

  • WordPress → REST API
  • Webflow → API
  • headless CMS → API

Simple rule: If your CMS lets you update content by API, you can automate this step.

If not: Just save _updated\content to a sheet and paste manually.

Step 6 — Log changes

Right after a fix is applied:

Add:

  • Google Sheets node
  • Tab: Log
  • Operation: Append Row

Map fields this way:

  • Date → current timestamp
  • URL → page URL
  • Change → what was fixed
  • Type → auto
  • Approved By → leave it blank or “system”
  • Run ID → workflow run ID, if you want to track it

Important: This node should run only after a fix is applied.

Step 7 — Review the bigger issues

Open issues tab.

Filter for medium and high.

If you’re solo, look through it once a week.

If you have a team or others are involved, send each issue to a form (Jotform works really well):

  • Approve / Reject / Note

Now, nothing gets lost.

on April 15, 2026
  1. 1

    Solid system — the separation between auto-fix and human-review is the right call. Most automation projects fail because they try to automate too much too early and end up breaking things that mattered.
    One thing worth adding to the IF node logic: a confidence threshold on the AI output. OpenAI can return auto = yes with high confidence on a year update and auto = yes with low confidence on a CTA rewrite — but your node treats them the same. Adding a confidence score to the prompt and only auto-applying fixes above say 90% confidence catches the edge cases where the AI is technically right but uncertain.
    Also for anyone without API access to their CMS — there's a simpler middle ground between "fully automated" and "paste manually." Have n8n draft the fix and send it as a one-click approval email. Jotform handles this but so does a simple Gmail + Google Forms setup. You still approve it but the friction is one click not copy-paste-navigate-update.
    Good writeup. The Log tab is the part most people skip and then regret six months later.

  2. 1

    Super useful. This is one of those systems that feels simple but solves a very real problem

  3. 1

    outdated website is second to an email typo — cringe! thanks again

Trending on Indie Hackers
I shipped a productivity SaaS in 30 days as a solo dev — here's what AI actually changed (and what it didn't) User Avatar 300 comments I built a tool that shows what a contract could cost you before signing User Avatar 109 comments The coordination tax: six years watching a one-day feature take four months User Avatar 72 comments My users are making my product better without knowing it. Here's how I designed that. User Avatar 58 comments I Found Blue Ocean in the Most Crowded Market on the Internet User Avatar 39 comments I changed AIagent2 from dashboard-first to chat-first. Does this feel clearer? User Avatar 21 comments