Living document · last tended 3 weeks ago · revision 02 seeded 20 May 2026
Field notes / autonomous-marketing-agent

Running an autonomous marketing agent

I built an autonomous marketing agent twice. First with Anthropic's Managed Agents API, then rebuilt it in n8n. The interesting lesson wasn't about the AI, it was about the plumbing.

budding ~6 min read

I’ve been playing around with making an AI agent work as a product marketer for my side projects. SEO maintenance, competitive monitoring, blog content, coming up with a few good marketing ideas every week. I’ve built it twice now.

The first version used Anthropic’s Managed Agents API, which gives you a persistent Claude session running in the cloud. It has bash, it can read and write files, it can call APIs. I gave it access to the AssetJay repo via a GitHub PAT, traffic data via Lodd’s MCP server, and a Slack channel for all communication. A Saturday cron job woke it up weekly.

The cycle is: sense (pull traffic from Lodd, check which AI crawlers are hitting the site, check whether the product shows up in ChatGPT and Perplexity responses, crawl competitor pages for pricing changes), maintain (crawl every page, check meta tags, JSON-LD, heading hierarchy, auto-fix what’s obvious, flag the rest), and ideate (three marketing ideas grounded in the data, with effort estimates). I pick which to pursue, if any.

It also had a create step for writing blog posts, but I ended up dropping it. The writing was passable if your product voice is nondescript, but it needed enough editing that the time saved was marginal.

The cycle itself worked well. The plumbing around it was painful.

Slack MCP didn’t work. The OAuth credential in Anthropic’s vault kept failing, so I switched to the Slack Web API via curl. The first full run cost $4.23, and $3.30 of that was the agent polling Slack every 60 seconds waiting for my replies. I built a Trigger.dev bridge that only pokes the agent when I actually respond, which helped, but the whole thing felt held together with string.

It hallucinated a competitor mention at one point. Reported that a review site “explicitly named AssetJay weaknesses” with specific criticisms about pricing and navigation. The criticisms were real, but they were about a different product with a similar name. The system prompt now requires exact quotes and source URLs for any competitor claim.

And it was way too verbose. The first weekly report listed every passing SEO check with methodology explanations before results. I had to tell it “if everything passes, just say ‘all clear.’ Lead with findings, not process.”

So I rebuilt the whole thing in n8n.

Same sense-maintain-ideate cycle, but as a visual workflow instead of a cloud-hosted agent session. Two entry points feed a single AI agent node: a weekly schedule trigger, and a Slack mention handler so I can ask it questions any time. The agent connects to Lodd via MCP (42 analytics tools), Tavily for web search, Supadata for scraping, and direct API calls to OpenAI and Perplexity to check whether the product actually appears in their responses. V1 guessed at citations by web searching and hoping to find mentions. V2 hits the actual APIs, which is a big improvement.

Most of the plumbing problems just went away. For instance, Slack integration is native in n8n. There’s no polling cost because the workflow only runs when triggered. The Trigger.dev bridge is gone. MCP tools just work. And it’s easy to duplicate the workflow for a second product, which is how it should have been from the start.

The maintain and sense layers are the real value. Weekly SEO sweeps and competitive monitoring that just happen without me thinking about it.

The ideation layer is surprisingly good. Because it has real traffic data and competitive context, the ideas are connected to reality. Not just “write a comparison post” but “write a Sortly comparison because that’s the query where you don’t show up and they just raised their pricing.”

What I didn’t expect is how little of the effort was about the AI. Getting the right data into the right context, routing messages without burning money on polling, making the workflow reliable enough to run unattended every week. The plumbing was 80% of the effort both times. The agent itself was the easy part.

I wrote up the n8n version as a template if you want to build one.


This note is a living document and will keep changing. It's not an article. It's a notebook page I'm letting you read over my shoulder. If you spot something I'm wrong about, or if you've worked through the same thing differently, reply to henrik@holenventures.com.