Amol Budhwant a19baed678
feat(rank-tracking): allow explicit language selection (#46)
* feat(rank-tracking): allow explicit language selection

* fix(rank-tracking): remove duplicate country picker and fix LocationSelect handler

The modal rendered two country pickers: a stale native <select> with a
broken empty onChange and the new LocationSelect combobox. The LocationSelect
handler also treated its numeric argument as a DOM event (Number(e.target.value)
-> NaN). Remove the dead <select> and pass the location code through directly.

* feat(rank-tracking): offer the full DataForSEO SERP language list

The language picker only listed the ~43 languages that happened to be a
country's default, so users could not track e.g. Hindi, Chinese (Simplified),
Tamil, or Urdu. Expand LANGUAGE_OPTIONS to the full set of languages the
DataForSEO SERP (Google) API accepts (sourced live from
/v3/serp/google/languages), dropping the deprecated 'iw' Hebrew duplicate and
the redundant 'no' (Norway uses 'nb', which both SERP and Labs accept). Mismatched
location+language pairs are accepted by SERP and invalid codes fail at zero cost,
so the wider list adds no charged-but-failed risk.

Also drop the now-unused LOCATION_OPTIONS re-export from the client shim.

* docs(rank-tracking): cite DataForSEO source for the language list

Note where LANGUAGE_OPTIONS comes from (/v3/serp/google/languages) and how it
relates to the country list (the Labs locations_and_languages endpoint), plus
the intentional deviations from the raw endpoint.

* chore(knip): treat scripts/** as entry points

The standalone CLI/dev scripts under scripts/ are invoked via package.json
scripts (tsx/node), not imported, so knip flagged all six as unused files.
Add scripts/** to knip entry so ci:check passes. (Pre-existing on main;
bundled here to keep the branch's ci:check green.)

* feat(rank-tracking): filter language picker to the country's supported languages

Showing all 128 languages for every country was noise. Restrict the picker to
the languages DataForSEO actually supports for the selected country via a new
getLanguageOptions() helper, backed by a per-country map from the Labs
locations_and_languages endpoint. Most countries expose only their default
language; the ~20 genuinely multilingual ones (US en/es, Canada en/fr,
Switzerland de/fr/it, India en/hi, etc.) list their real set. googleAdsOnly
countries have no per-country language data, so they show their default only.
The Language select is disabled when a country offers a single language.

LANGUAGE_OPTIONS becomes the internal master list (no longer exported).

---------

Co-authored-by: Ben Senescu <44480372+bensenescu@users.noreply.github.com>
Co-authored-by: Ben Senescu <bensenescu@gmail.com>
2026-06-28 18:04:49 -04:00
2026-06-04 13:50:26 -04:00
2026-06-24 15:22:17 -04:00
2026-02-27 14:09:33 -05:00
2026-04-08 14:09:01 -04:00
2026-06-24 15:22:17 -04:00
2026-06-28 16:38:09 -04:00
2026-06-24 13:24:11 -04:00
2026-06-12 14:29:49 -04:00
2026-04-14 20:29:38 -04:00
2026-06-24 13:24:11 -04:00
2026-02-27 14:09:33 -05:00
2026-02-27 14:09:33 -05:00
2026-02-27 14:14:23 -05:00
2026-06-26 15:20:17 -04:00
2026-03-11 23:23:47 -04:00

OpenSEO

Open source alternative to Semrush and Ahrefs

OpenSEO is an SEO tool for the people. If tools like Semrush or Ahrefs are too expensive or bloated, OpenSEO is a pay-as-you-go alternative that you actually control.

All-in-one SEO tool for you and your AI agent.

Connect with any agent like Claude Code, OpenClaw or Hermes. We have pre-built skills, but you can build your own to tailor OpenSEO to your needs.

Image

Table of Contents

Hosted Version

If you're not interested in self hosting, or just want to support the project, we also have a hosted version:

openseo.so

Why use OpenSEO?

  • Best in class MCP and AI Skills.
  • Modern, simple UI.
    • Focused workflows instead of a bloated, complex SEO suite.
  • No subscriptions.
    • Bring your own DataForSEO API key and pay only for what you use.
  • Fork and vibe code your own custom tool.

Main SEO Workflows

  • Keyword research
  • Rank tracking
  • Competitor Insights
  • Backlinks
  • Site Audits
  • AI Visibility

Community

Join Discord to chat: Discord

Follow along for updates:

OpenSEO MCP

OpenSEO exposes an MCP server so AI agents can use your SEO data directly.

Connect Claude Code, OpenClaw, Hermes or any other agent.

Setup

  • Set up the app
  • Click "AI & Agents" in the header
  • Follow the instructions to connect to your agent

OpenSEO Agent Skills

OpenSEO Agent Skills are reusable workflows for your agent

They guide your agent through SEO tasks and use the OpenSEO MCP so your agent makes better recommendations.

Available Skills

  • seo-project-setup
  • seo-coach
  • keyword-research
  • keyword-clustering
  • competitive-landscape
  • competitor-analysis
  • link-prospecting

Installation Guide

Read our docs for how to install the skills:

https://openseo.so/docs/skills/setup

Roadmap

Top priorities:

  • Improved and Scheduled Site Audits
  • Custom Reports for Clients
  • Local SEO
  • In App AI Agent

Our top priority is always refining the current product and making existing features better based on user feedback.

If something important is missing, please join the Discord or email me at ben@openseo.so and request it.

Pricing / Costs

OpenSEO is totally free to use. It works by using DataForSEO's APIs, which is a paid third-party service unaffiliated with OpenSEO.

There are two separate things:

  1. OpenSEO app cost: $0, you host it yourself.
  2. DataForSEO API: pay-as-you-go based on usage.

For cost estimates, see DataForSEO API Cost Reference.

DataForSEO API Key Setup

OpenSEO uses DataForSEO to fetch SEO data. You need an API key to connect OpenSEO to the service.

  1. Go to DataForSEO API Access.
  2. Click "Send by email" to get set your credentials.
  3. Copy the longer crendentials labelled "Base64" credentials.
  4. Set this as DATAFORSEO_API_KEY in your environment file:
  • Docker self-hosting: .env
  • Cloudflare: Set it in the workers UI
  • Local development: .env.local

Google Search Console

Search Console is optional and works in self-hosted deployments using your own Google OAuth client. It takes ~10 minutes of one-time setup — see docs/SELF_HOSTING_GOOGLE_SEARCH_CONSOLE.md.

Self-hosting

OpenSEO supports two self-hosting paths:

  • Docker for personal use and testing (Recommended for local use).
  • Cloudflare for internet-facing self-hosting across multiple devices or for your team.

Docker

Docker is recommended for getting started. It's super easy to get up and running once you install Docker.

Cloudflare

If you love OpenSEO and want to use it across multiple devices or with your team, you can host it on Cloudflare which we'll be a SaaS-like experience. Also, this will have automatic database backups and other nice convenience features. It's just a bit more effort to get started if you're unfamiliar with Cloudflare.

Docker Self Hosting

Warning

By default, the Docker version is intended for local use only. It runs in single-user mode with no authentication. For internet-facing self-hosting, use Cloudflare (free plan compatible). Or read docs/SELF_HOSTING_DOCKER.md before exposing to the internet.

Prerequisites:

Quickstart:

  1. cp .env.example .env
  2. Set DATAFORSEO_API_KEY in .env
  3. docker compose up -d
  4. Open http://localhost:<PORT> (default 3001)

To update to the newest published image, pull first and then restart:

docker compose pull
docker compose up -d

For more info, see docs/SELF_HOSTING_DOCKER.md.

Cloudflare Self-Hosting

Deploy the Worker

Clicking this button opens a page to deploy OpenSEO in your Cloudflare account. If you do not have an account yet, it will take you to account creation first (OpenSEO works great on the free plan).

Reference these docs while deploying since the Cloudflare UI doesn't indicate what steps you need to take: docs/SELF_HOSTING_CLOUDFLARE.md.

Deploy to Cloudflare

Local Development

See docs/LOCAL_DEVELOPMENT.md.

Contributing

Contributions are very welcome.

  • Open an issue for bugs, UX friction, or feature requests.
  • Open a PR if you want to implement a feature directly.
  • Community-driven improvements are prioritized, and high-quality PRs are encouraged.

If you want to contribute but are unsure where to start, open an issue and describe what you want to build.

SEO API Cost Reference

Use this section to estimate DataForSEO spend per request type. OpenSEO itself remains free; these are API usage costs only.

As of February 26, 2026, DataForSEOs public docs/pricing pages say:

  • New accounts include $1 free credit to test the API.
  • The minimum top-up/payment is $50.

That means you can try OpenSEO for free with the starter credit, then decide if/when to top up.

Planning examples

  • Track 100 keywords weekly at depth 50: ~$1.20/month
  • 100 keyword research requests at the default 150 results: $3.50
  • 100 keyword research requests at 500 results each: $7.00
  • 100 domain overviews (200 ranked keywords each): $4.01
  • 100 backlinks domain searches at current defaults before opening extra tabs: about $6.34
  • 100 backlinks page searches at current defaults before opening extra tabs: about $4.30
  • 100 fully explored backlinks domain searches: about $10.94
  • 100 fully explored backlinks page searches: about $8.61

Pricing sources

Description
No description provided
Readme MIT 24 MiB
Languages
TypeScript 95.9%
MDX 2.4%
CSS 0.8%
JavaScript 0.5%
HTML 0.2%
Other 0.2%