Monthly website content audit
On the first of each month, Jimothy checks every page on your list responds, then Claude Code reads each one against your current facts: pricing, plan names, integrations, customer counts. It flags anything out of date, broken outbound links and weak titles or descriptions, and posts a fix list ordered by how much each page matters.
- Check pages respond Shell
- Audit content Claude Code · Sonnet
- Post to Slack Shell
What each step does
Check pages respond
ShellRequests each page and records its HTTP status.
Audit content
Claude Code · SonnetReads every page against your current facts and checks outbound links, titles and descriptions.
Post to Slack
ShellPosts the fix list to Slack.
From copy to first run
- Copy the pipeline JSON with the button above.
- In Jimothy, open Pipelines → New pipeline, paste it under “Or import a pipeline JSON” and click Import.
- Fill in the variables below under Pipeline settings → Variables.
- Triggers → Add trigger → Schedule, cron 0 8 1 * * (08:00 on the 1st of each month).
What to fill in
The prompts and commands read these as {{vars.<name>}}. The examples are placeholders: replace them with your own.
| Variable | What to put in it | Example |
|---|---|---|
pages | The pages to audit, one URL per line, most important first. | https://acme.example/ https://acme.example/pricing https://acme.example/integrations |
facts | What’s true today: prices, plan names, integrations, numbers you quote. Pages are checked against it. | Plans: Starter $39/user/month, Team $79/user/month, Enterprise custom. Integrations: Net… |
slackWebhookUrl | A Slack incoming webhook for the channel that gets the fix list. | — |
Show the pipeline JSON
{
"jimothyPipeline": 1,
"name": "Monthly website content audit",
"description": "Checks key pages for broken links, outdated claims and weak titles, and posts a prioritised fix list.",
"icon": "sparkles",
"color": "#be185d",
"repo": {
"mode": "scratch"
},
"concurrency": 1,
"variables": {
"pages": "https://acme.example/\nhttps://acme.example/pricing\nhttps://acme.example/integrations",
"facts": "Plans: Starter $39/user/month, Team $79/user/month, Enterprise custom. Integrations: NetSuite, QuickBooks, Xero, Sage Intacct. 1,400 customers. SOC 2 Type II.",
"slackWebhookUrl": ""
},
"steps": [
{
"id": "status",
"name": "Check pages respond",
"type": "shell",
"description": "Requests each page and records its HTTP status.",
"timeoutMinutes": 5,
"command": "printf '%s\\n' {{vars.pages}} | while read -r u; do [ -n \"$u\" ] && printf '%s %s\\n' \"$(curl -s -o /dev/null -L -m 20 -w '%{http_code}' \"$u\")\" \"$u\"; done"
},
{
"id": "audit",
"name": "Audit content",
"type": "agent",
"description": "Reads every page against your current facts and checks outbound links, titles and descriptions.",
"harnessId": "claude-code",
"model": "sonnet",
"dependsOn": [
"status"
],
"timeoutMinutes": 40,
"prompt": "Audit these pages (HTTP status first):\n{{steps.status.output}}\n\nWhat is true today:\n{{vars.facts}}\n\nFor each page that responded: read it, and check\n- claims, prices, plan names, numbers and integrations against the facts above;\n- dates and \"new\" or \"coming soon\" language that is now stale;\n- outbound links (request each one; list any that fail);\n- the title tag and meta description (missing, duplicated, over 60 or 160 characters, or vague).\n\nYour final answer is a Slack message (*bold*, - bullets): pages that didn't respond first, then fixes ordered by page importance (the list order) and severity. Each fix names the page, quotes the current text and says what it should say. Skip pages with nothing to fix. If nothing needs fixing anywhere, say so in one line."
},
{
"id": "post",
"name": "Post to Slack",
"type": "shell",
"description": "Posts the fix list to Slack.",
"dependsOn": [
"audit"
],
"timeoutMinutes": 2,
"command": "printf '{\"text\":%s}' {{steps.audit.output | json}} | curl -fsS -X POST -H 'Content-Type: application/json' --data @- {{vars.slackWebhookUrl}}"
}
]
}More for marketing, and beyond
Blog post from a brief
Turns a one-paragraph brief into three researched angles. You pick one, it’s written and edited, and the approved draft lands in your CMS.
MarketingWeekly competitor watch
Checks your competitors’ sites, pricing and changelogs every Monday and posts only what changed since last week.
MarketingSocial posts from a launch
Reads a blog post, release or landing page and drafts posts for LinkedIn, X and your newsletter. You pick the ones to schedule.