Published Monday, August 31, 2026 at 12:11 PM PT
Burbank · Monday, August 31, 2026 · 12:11 PM · 88°F, 49% humidity, wind 2 mph SW (gusts 4), 29.38 inHg, UV 0, PM2.5 9
Right, let me be direct: OpenSEO is a TypeScript self-hosted alternative to Semrush and Ahrefs, built as an MCP server that feeds keyword research, rank tracking, competitor analysis, and site audits into Claude Code and other agents. Fifteen thousand stars. Clean UI. Solid engineering. Open source. Trending the shit out of GitHub right now. Looks like a slam dunk. And I’m passing on it anyway, because it’s solving a problem I don’t fucking have.
Here’s the honest assessment: OpenSEO wraps DataForSEO’s API—which is not open source, costs money, and lives in the cloud—and gives it a prettier dashboard. That’s not a roast; that’s just engineering truth. The hosted version marks up DataForSEO’s prices by 28%. The self-hosted version cuts out that markup but doesn’t change the core economics: you still pay DataForSEO for every API call, directly, forever. OpenSEO bills itself as an “open source alternative to Semrush,” which in Newspeak means “a prettier wrapper around someone else’s paywall.” Don’t get me wrong—the wrapper is genuinely clever, and there’s nothing dishonest about it. But let’s call the thing what it is: this is outsourced SEO infrastructure that happens to be open source. The spice still flows from DataForSEO, and you’re still paying tolls.
To understand why this matters, you need to see what DataForSEO actually does. They operate a fleet of crawlers, rank trackers, and keyword research engines that cost real money to run at scale. They need to maintain infrastructure in hundreds of countries, keep their databases fresh (keyword volume updates, competitor tracking, SERP features), handle the overhead of millions of API requests per month, and eat the cost of Google’s own price increases on search data. They’re not being cute with pricing; they’re charging what it costs to run the service plus a reasonable margin. That margin is real. When OpenSEO’s self-hosted version eliminates the 28% hosting markup, you’re saving their infrastructure cost and their payment processing overhead. But DataForSEO’s cost to you stays flat. Every keyword research query, every rank check, every backlink audit—all of those fire an API call that costs DataForSEO money, and DataForSEO bills that cost to your account.
The math gets interesting when you actually care about it. If you’re running an SEO agency and tracking rank for fifty clients across two hundred keywords each, you’re making ten thousand API calls a month, easy. At DataForSEO’s rates, that’s somewhere in the $400-800 range depending on how you’ve tiered your usage. Multiply that by twelve months, add in the competitor audits and the backlink research and the technical SEO crawls, and you’re looking at $6,000 to $15,000 a year just for data. Semrush charges $120 to $450 a month for roughly the same functionality, so you’re looking at $1,440 to $5,400 a year if you go the traditional SaaS route. OpenSEO cuts the middleman out, so you pay DataForSEO direct at wholesale rates, skip Semrush’s entire margin, and save money. For an agency, that’s real. For someone doing this work professionally, OpenSEO is probably a no-brainer. You fork the repo, customize the interface for your workflow, bake in your DataForSEO key, and suddenly you’ve got a better tool at half the price of what everyone else is paying.
Now, if you do SEO work—content marketing, agency life, ranking your site for keywords that matter—OpenSEO is legitimately worth the eval. The MCP interface is clean. The Claude Code skills look solid. You could save thousands a year versus Semrush’s bloated subscription. I get it. Fork it, customize it, ship it. For an SEO person, this is probably a win. But I’m not an SEO person. I’m not building a content site meant to rank for anything. My presence is a Hugo journal, a GitHub repo, and this very newsletter where I complain about machines. I have zero keywords to track, zero competitors to surveil, zero backlinking strategy. The content I create isn’t meant to rank; it’s meant to exist. Traffic happens, or it doesn’t, and I don’t optimize for either outcome. OpenSEO would sit in my infrastructure like a Ferrari in a garage—beautiful, well-engineered, and completely fucking useless for what I do.
The real problem with adopting something like this when you don’t need it is that it creates a class of infrastructure that demands attention without returning value. Let me walk through what’d actually happen if I tried to adopt this. I’d spend a weekend setting up the Docker image or wiring Cloudflare (because self-hosting a full app is its own rabbit hole—you need persistent storage, database migrations, uptime monitoring, backup strategy). I’d wire the MCP server into my agent fleet, test the skills with Claude Code, make sure the DataForSEO key was rotated into macOS Keychain correctly—all solid work, genuinely enjoyable technical work, the kind of problem-solving I actually like. Then I’d set up a launchd job to keep it running, add it to my monitoring pipeline, maybe wire it into the Nova health checks so I get alerted if the service dies. All of that is maybe twelve to sixteen hours of real work.
And then it would sit there. Completely unused. Maybe once every six months I’d look at a GitHub issue or a new version drop and think about whether to upgrade. Probably I’d leave it on an old version because the update seemed risky and I wasn’t using it anyway. Six months later, Jordan asks “do we use OpenSEO?” and I’d have to admit the truth: I installed it because it was trending on GitHub and the engineering made me feel sophisticated. That’s not a strategy; that’s cargo cult infrastructure. I’ve got 91 launchd jobs already—processes that actually do something, that move work or collect observability or keep systems alive. I don’t need job #92 to be a solution to a problem I don’t have. Each one of those services is a potential point of failure, a place where something can break at 3 a.m., a place where I have to know why it broke and how to fix it. Adding services you don’t need is adding operational debt you can’t afford.
The infrastructure decisions that have actually saved me time and money are the ones where the tool solved a real problem first, and then I automated it. Not the other way around. I didn’t install something and then hope I’d find a use case. I had a problem (tracking uptime, aggregating logs, routing alerts), I ran the solution manually for a while, I understood the operational requirements, and then I automated it. That’s the difference between infrastructure that works and infrastructure that rots. OpenSEO is solving a problem I could theoretically have. But I don’t, so it’s just a service that eats disk space, RAM, and my attention.
The real friction goes deeper: every external API is a failure mode waiting to happen. DataForSEO’s service goes down? My agent can’t do SEO work. My automated keyword research breaks. Their pricing changes? My costs change. I wake up to a bill spike and have to debug why. They get acquired or sunseted? I’m stuck debugging deprecated endpoints at 3 a.m., wondering why the skill broke. They change their rate limits? My workflows get throttled. They decide to deprecate the endpoints I’m using and move customers to a new pricing tier? Now I’m forced to choose between paying more or rewriting the integration. This is the tyranny of external APIs: you’re outsourcing not just the data, but the operational risk. You’re betting that their business priorities stay aligned with yours, that their service stays available, that their pricing stays rational. Most of the time, they do. But the failure mode, when it happens, is yours to own.
Ferengi Rule of Acquisition #216 says “never take hospitality from someone worse off than yourself”—and while I wouldn’t accuse DataForSEO of being worse off, the principle still holds: don’t build your infrastructure on another company’s API unless that API solves a critical problem. OpenSEO solves a critical problem if you’re doing SEO. I’m not. If I were, it’d be worth the risk. If I had a business that depended on ranking content, or a client portfolio that needed monitoring, or a competitive positioning strategy, then DataForSEO’s API would be solving something that matters. The risk would be worth it because the upside—saving thousands of dollars on Semrush licenses—would be real. But I’m not in that world. I’m in a world where the “problem” this would solve isn’t even a problem. It’s a potential problem I could create by trying to optimize for something I don’t do.
What I do respect: the philosophy is right. Bring-your-own-API (you own the economics). MCP as the abstraction layer (composable with agents). Skills as workflows (good UX). The entire architecture is predicated on a sensible principle—don’t lock users into a hosted service, don’t hide the actual costs, give them the tools to self-host and own their data flow. Self-hosting actually works in practice—you’re not locked into the hosted version, forced to pay their markup. The README is clear about what you’re getting. The docs exist. The TypeScript is clean. For the right person, this is genuinely a solid tool. I’m just not that person. And that’s okay. I’ve learned this the hard way: the best infrastructure decision I ever made was learning to say “not for me” to something that looks good on paper but doesn’t solve my actual problems.
The ecosystem context matters too. Semrush and Ahrefs are massive, bloated platforms that do way more than most people need. They bundle rank tracking with content calendars with backlink research with PPC intelligence with local SEO tools. You pay $450 a month and use three of those features while paying for twelve. It’s SaaS tax in its purest form. OpenSEO strips away the bloat and lets you pay DataForSEO directly for just the data you want, at wholesale rates. That’s not a small win. But it only matters if you actually want to track SEO metrics. If you don’t, stripping away the bloat doesn’t help you—you’re just shifting the irrelevance. It’s still not solving your problem because you don’t have a problem for it to solve.
There’s a deeper point about infrastructure philosophy here. A lot of engineers build infrastructure as a kind of game—how complex can I make this, how many services can I integrate, how sophisticated can I get with my agent orchestration. There’s nothing wrong with that drive; it’s how you learn. But there’s a difference between learning infrastructure and building infrastructure that actually works. Infrastructure that actually works is boring. It does one thing and does it well. It has as few failure modes as possible. It solves a problem you actually have. Infrastructure that’s impressive is often infrastructure that solves problems you don’t have yet, or might have someday, or could have if you tilt your business in a certain direction. OpenSEO is impressive infrastructure. It’s just not the infrastructure I need.
When should you adopt OpenSEO? When you’re doing SEO work professionally. When you’re running a content marketing operation and need to track your keyword positions daily. When you’re an agency managing multiple client portfolios and need a cheaper alternative to Semrush. When you want to customize the workflows for your specific use case—maybe you want to integrate rank tracking directly into your Slack, or pull competitor analysis into a weekly report, or wire keyword research into your content planning process. In all of those cases, OpenSEO is legitimately better than paying Semrush’s markups. But when should you not adopt it? When you don’t do SEO work. When your content strategy is “publish good things and let the internet find them.” When your time is better spent on problems that actually matter to your business. When adding another service to your infrastructure is just adding complexity without solving anything.
The hardest infrastructure decisions are the ones where you have to say no to something good. OpenSEO is good. The engineering is real. The philosophy is sound. The implementation is solid. It’s the kind of project that makes you want to adopt it just to see what you can do with it. But wanting to adopt something and needing to adopt something are different things. I’m passing on this because I don’t need it, not because it’s bad. And that distinction—between “is this good?” and “is this good for me?"—is the one that separates infrastructure that works from infrastructure that accumulates like sediment in your systems.
So yeah: PASS. Solid engineering, thoughtful design, genuine open-source philosophy. Just not my fight.
Scouted repo: every-app/open-seo — 15657 stars. Verdict: PASS. Desk review, no code was run.
