SEO that shows up every Monday.

Not a chatbot you prompt — a scheduled colleague. A Claude Code agent that wakes up every Monday morning, measures your Google positions with DataForSEO, checks where you passed or lost ground to your biggest competitor, hunts for keyword gaps, writes a weekly report into your repo, and files build suggestions to Notion for you to approve. It does the grunt work; you keep the wheel.

The weekly loop

One routine, backing your whole team.

Every Monday it runs this loop on its own — measure, compare, propose — then hands the calls back to you. The agent does the grunt work; the SEO team stays in charge.

Agent · runs on its own You · the SEO team decides
Mon 07:00 It wakes up Scheduled, unattended
Measure Ranks your keywords Live Google positions via DataForSEO
Compare Checks the competitor Where you gained or lost ground
Find gaps Spots missing keywords In-demand terms you don’t cover yet
Report Writes it up & proposes Weekly report + Notion suggestions
Your call You approve A few clicks in Notion over coffee
Your call You ship it It opens a PR — nothing goes live till you merge
Then it does it all again next Monday
Measure Compare Propose You approve Measure Compare Propose You approve Measure Compare Propose You approve Measure Compare Propose You approve
How it works

Five steps, then it runs without you.

Work through these in order. Click a step on the left, or use the arrows at the bottom of each panel. The first three get it running; the last two are the part everyone gets wrong — the approval loop and the guardrails.

01
Connect DataForSEO
Live ranking data, pay-per-use
02
Write the routine
A brief the agent runs from
03
Schedule it
Every Monday, unattended
04
Approve in Notion
It proposes, you say yes
05
Know the guardrails
What it won't do alone
Step 01

Connect the DataForSEO MCP server

DataForSEO is the engine room — it's what gives the agent live Google SERP positions, search volume, keyword difficulty and competitor overlap. It's pay-per-use (a full weekly run is cents, not a SEMrush subscription), so you only pay for what the routine actually queries.

  1. Get API credentialsCreate a DataForSEO account and grab your API login + password from the dashboard. Top up a small balance — a weekly routine costs cents per run.
  2. Add the server to Claude CodeRun the command below, swapping in your credentials. This registers DataForSEO as an MCP connector Claude can call.
  3. Confirm it's liveRun claude mcp list and check that dataforseo shows as connected before moving on.
claude mcp add dataforseo --env DATAFORSEO_USERNAME=<login> --env DATAFORSEO_PASSWORD=<password> -- npx -y dataforseo-mcp-server

Exact package name and available modules are in DataForSEO's own MCP docs at github.com/dataforseo/mcp-server-typescript — check there if the command above changes. Prefer their hosted remote server? Add it with --transport http and the URL from their docs instead.

Step 02

Write the routine the agent runs from

The connector gives Claude the data. This file gives it the job. Drop a SEO_ROUTINE.md into your site repo — it's the agent's standing brief. Keep it specific: the site, the priority keywords, the one competitor that matters, and the exact five steps you want each week.

  1. Point it at your repoThe agent reads and writes your Astro (or any Git) site directly, so it can compare which pages exist against which should. Give it read/write access and a reports/ folder for the weekly write-ups.
  2. Define the five weekly jobsMeasure positions vs last week · check gains/losses vs the main competitor · find in-demand keywords you don't cover yet · compare pages that should exist against pages that do · write the report and commit it.
  3. Name your targetsList your 10–30 priority keywords and your single biggest competitor domain. Specific beats clever — the tighter the brief, the better the report.

There's a ready-to-edit SEO_ROUTINE.md template in the last section of this guide — copy it, fill in the four blanks, done.

Step 03

Schedule it for Monday morning

This is what turns a prompt into a colleague. Claude Code's scheduling runs the routine on a cron — no one has to be at the keyboard. Point the scheduled run at your SEO_ROUTINE.md and pick a time.

/schedule every Monday at 07:00, run the routine in SEO_ROUTINE.md
  1. Set the cadenceWeekly is the sweet spot for rankings — frequent enough to catch movement, slow enough that the data actually changed.
  2. Let it commitEach run saves the report to reports/ and commits it, so you get a clean week-over-week history in Git.
  3. Get pingedHave it drop a one-line summary to Slack or email when the report lands, so Monday starts with the headline, not the homework.
Step 04

The approval loop: it proposes, you decide

Here's the part that keeps a human in charge. The agent doesn't publish — it files suggestions to a Notion database and waits for your yes. Approve what you want; the next run builds only those, as a pull request.

  1. It files suggestionsEvery new page idea, on-page fix or keyword gap becomes a Notion row: Title · Type · Keyword · Volume · Rationale · Status = Proposed. For new pages it can attach a full draft (H1, meta, outline) so you see exactly what it wants to build.
  2. You approveOpen Notion, set Status = Approved on the rows worth doing (or Rejected on the rest). That's the whole review — a few clicks over coffee.
  3. It builds — as a PRThe next run picks up only the approved rows, builds the Astro pages on a branch, opens a pull request, and sets Status = Built. Nothing goes live until you merge.

Notion connects to Claude as an MCP connector — authorise it once via /mcp in Claude Code, then the routine can read and write your backlog database.

Step 05

What the agent will — and won't — do on its own

The routine is built with the same discipline we apply to client sites: analyse freely, change nothing without a human yes.

Never publishes itselfIt analyses and proposes. Live changes only ever happen through a pull request you merge.
Suggestions before buildsPage and content ideas land in Notion as proposals — nothing gets built until you set them to Approved.
Grounded in live dataRankings, volumes and competitor moves come from DataForSEO each run — not from memory or guesses.
Reads the live siteIt compares against what's actually built and ranking, so recommendations match reality, not an old crawl.
Everything is versionedReports and builds are committed to Git, so every week is auditable and reversible.
The human keeps the wheelThe agent does the grunt work every week. What ships is always your call.
The routine

Copy the brief. Fill four blanks. Schedule it.

This is the SEO_ROUTINE.md from Step 02 — drop it in your repo, replace the bracketed bits, and point your Monday schedule at it. Want us to set the whole thing up on your site instead? That's a call away.

Have us build it →
SEO_ROUTINE.md
Weekly SEO agent brief · v1
# Weekly SEO routine

SITE: [yourdomain.com]  (Astro repo, read/write)
MAIN COMPETITOR: [competitor.com]
PRIORITY KEYWORDS: [kw 1, kw 2, kw 3, ...]
MARKET: [country / language]

Every Monday, do this and nothing more:

1. Measure our Google positions for the priority
   keywords via DataForSEO. Compare to last week's
   report in /reports.
2. Check where we passed or lost ground vs MAIN
   COMPETITOR on those keywords.
3. Find in-demand keywords we don't cover yet.
   Add them to the Notion "SEO Backlog" database
   with Status = Proposed.
4. Compare pages that SHOULD exist (from keyword
   demand) against pages that DO exist in the repo.
   File the gaps to Notion as Proposed pages, each
   with a draft H1, meta and outline.
5. Write /reports/YYYY-MM-DD.md — "wins / losses /
   build next" — and commit it.

BUILD STEP (same run, after the above):
- Read Notion rows with Status = Approved only.
- Build those Astro pages on a new branch.
- Open a pull request. Set Status = Built.

GUARDRAILS:
- Never publish or merge. Never change live pages.
- Only build Approved rows. Everything else stays
  a proposal.
- Post a one-line summary to Slack when done.
Paste it into SEO_ROUTINE.md at your repo root, fill the four bracketed fields, then run the /schedule command from Step 03.

Send a short note about your brand, your markets, and your stack — we’ll come back with whether this fits and what version of the system makes sense. First call is a scoping conversation, not a pitch.

Kiri Media AB
Kungstensgatan 27
113 57 Stockholm
Sweden
Contact
sebastian@kirimedia.co +46 8 000 00 00
Explore
Meta Ads agency TikTok Ads agency Snapchat Ads agency Google Ads agency SEO agency AI marketing Guides