# SEO Rank Loop: Always-On SEO Agency

> An SEO agent that reruns your Monday: reads Search Console and DataForSEO, stages exact title, meta and link fixes, then checks what moved. BYO keys.

- Agent: Hermes Agent
- Plan: Starter (1 vCPU, 2 GiB RAM, 10 GiB disk)
- Forks: 0 · Stars: 0
- Creator: https://www.jurniti.com/creator-ca0ff2
- Tags: agency, dataforseo, hermes, marketing-loops, rank-loop, search-console, seo, seo-improver
- Requires config (you provide): OPENROUTER_API_KEY
- Skills: ai-seo, airtable, analytics, apple-notes, apple-reminders, architecture-diagram, arxiv, ascii-art, ascii-video, audiocraft-audio-generation, baoyu-infographic, blogwatcher, claude-code, claude-design, codebase-inspection, codex, comfyui, competitors, computer-use, content-strategy, copy-editing, design-md, dogfood, evaluating-llms-harness, excalidraw, findmy, gif-search, github-auth, github-code-review, github-issues, github-pr-workflow, github-repo-management, google-workspace, heartmula, hermes-agent, hermes-agent-skill-authoring, himalaya, huggingface-hub, humanizer, imessage, jupyter-live-kernel, llama-cpp, llm-wiki, manim-video, maps, marketing-loops, nano-pdf, node-inspect-debugger, notion, obsidian, ocr-and-documents, opencode, openhue, p5js, petdex, plan, polymarket, popular-web-designs, powerpoint, pretext, programmatic-seo, python-debugpy, requesting-code-review, research-paper-writing, schema, segment-anything-model, seo-audit, seo-rank-loop, seo-workspace, serving-llms-vllm, simplify-code, site-architecture, sketch, songsee, songwriting-and-ai-music, spike, systematic-debugging, teams-meeting-pipeline, test-driven-development, touchdesigner-mcp, weights-and-biases, xurl, youtube-content, yuanbao

**To fork:** open https://www.jurniti.com/templates/seo-rank-loop-always-on-seo-agency and use the Fork action — it starts a Stripe Checkout for a new VM seeded with this template's persist disk (same flat plan price, no fork fee).

## README

# An SEO agent that runs your Monday for you

You already know what good SEO looks like.

What you do not have is 90 minutes every Monday to pull Search Console, open DataForSEO, write the diagnosis and stage the fixes. This template is that Monday, on a loop, inside your own Hermes VM. You say: *run the weekly SEO improver loop for my property, stage fixes only.*

## What the SEO agent does each week

1. **Measure** — Google Search Console for your clicks, impressions, CTR and position. DataForSEO for who outranks you, volume and SERP features.
2. **Prioritize** — striking-distance keywords at positions 4–20, high-impression low-CTR pages, cannibalization, decay.
3. **Stage** — exact titles, metas, sections and internal links. Not a vague "write more content" list.
4. **Verify** — next week it opens last week's report and checks what actually moved.

Step 4 is the whole point. An agent that only recommends is a report generator with better manners.

Every run also writes a **receipt** — including the runs that fail. A scheduled
agent that finishes quietly is indistinguishable from one that never fired, so
the receipt is what tells those two apart. Treat a missing receipt as a failure.

## What you get on fork

- An agency SOUL holding the doctrine: measure, stage, verify
- **12 SEO and marketing skills** — `seo-rank-loop` and `seo-workspace`, plus `seo-audit`, `ai-seo`, `schema`, `site-architecture`, `content-strategy`, `programmatic-seo`, `marketing-loops`, `competitors`, `copy-editing`, `analytics`
- Read-only Search Console helpers (service-account JWT scripts)
- A DataForSEO helper over REST, with optional MCP for the competitive layer

The `~/seo/` workspace is scaffolded for you on fork, so run one has somewhere to write. Artifacts land in `~/seo/runs/YYYY-MM-DD/`. `rankings.csv` is the week-over-week join key. `report.md` is a one-screen pulse with stable IDs like `SEO-STRIKE-001`, so you can argue about one fix, not the whole document.

## What you supply

| Env | What it is |
|---|---|
| `OPENROUTER_API_KEY` | your Hermes model key |
| `GSC_CREDENTIALS_JSON` | Google service-account JSON, one line |
| `GSC_PROPERTY` | e.g. `sc-domain:yoursite.com` |
| `DATAFORSEO_LOGIN` / `DATAFORSEO_PASSWORD` | DataForSEO credentials |
| `GH_TOKEN` + blog path | optional, to open PRs against your content repo |

Add the service-account email to Search Console as a **Restricted** user. DataForSEO fees and model usage are billed to you, by them.

## Your first hour

1. Fork it and open the Hermes session.
2. Put the keys above in `~/.hermes/.env`.
3. Fill `~/seo/client-profile.md`.
4. Run the weekly loop once, stage-only.
5. Schedule it for Monday 09:00.

Then leave it alone. Run two is the first one that can verify anything — it opens run one's report and checks those IDs.

## Honest limits

- It will not guarantee a #1 ranking.
- It will not auto-merge to your default branch.
- It will not invent rankings when GSC or DataForSEO is down. It tells you the data is missing.
- It will not build thin page farms.
- Most healthy weeks end with **no action** and a stated reason. That is the agency you want, and it is the one that feels boring.
- You need a Search Console property and a DataForSEO account already. It connects to both; it creates neither.
- Hermes only. Principles match [Atom Eve's SEO Improver](https://www.atomeve.dev/agents/seo-improver/) — GSC primary, DataForSEO competitive, weekly loop — but there is no Eve install here.

Fork it and run one loop stage-only before you trust it with a title tag. Your first jurniti purchase carries a 30-day money-back guarantee.
