What's new

Everything that shipped in DispatchSEO itself. Open a release to see what changed.

Added
  • DispatchSEO now works out when your site actually launched instead of assuming it was born the day you signed up. It checks Search Console's history and the Wayback Machine's first capture of your domain - automatically once Search Console data starts flowing, or on demand with the new Detect button next to the launch date in Settings (and the detect_site_launch tool). The date only ever moves backward, and your own corrections always win. This matters because the launch date drives the Journey timeline, the publishing pace, and how ambitious keyword research is allowed to be.
  • Your site can now tell DispatchSEO which Google it lives in. A new Search market setting (Settings > Project, or the set_market tool) points rank checks and keyword research at your real country and language - 14 markets from Israel to Brazil - so a fully Hebrew site researches Hebrew keywords in Israeli results instead of American English ones. Keyword research used to query the US market no matter what; that's fixed as part of this.
Improved
  • The GitHub-repo requirement now greets you before a card does. The landing hero says it under the domain box, a new FAQ answers the WordPress question head-on, and the signup notice starts open instead of waiting behind a click - so a WordPress site owner learns the answer on the way in, not at the Connect GitHub screen with a trial already ticking.
  • The dashboard now tells you when it's waiting on YOU. While the install pull request sits unmerged, a banner names it and links straight to it - nothing can build until that PR lands on the default branch, and the dashboard used to look finished anyway. And the queue's "building now" badge stopped being an unconditional claim: it shows how long the build has been running, and past the point where the automatic recovery will re-queue it, it says "build stalled - will retry" instead of asserting live work it can't prove.
  • Adding a second site on self-host no longer ends in a silent dashboard. The "setting up" banner - previously cloud-only - now shows on self-host too, with honest wording: it tells you the pipeline isn't installed, points at the install command, follows the install live, and clears itself once the first data lands.
  • The pixel dispatcher now wears lavender when Cursor runs your project, instead of the old steel blue. Claude keeps its clay, Codex its off-white.
  • When a Claude account itself is the problem (a usage limit, or Anthropic blocking subscription access), the weekly scans now say so on the banner - naming the fix, including switching agent or moving to API billing - instead of a bare link to a workflow log.
  • One broken credential no longer emails you once per workflow it takes down - after the first heads-up, the same cause waits three days before reminding you.
Fixed
  • A plan that ends now really ends. Rank tracking and the builders already stopped when a plan lapsed, but the site's own GitHub workflows kept running on their own schedule - so a finished trial could still build and merge a guide every day, and kept sending failure alerts about a pipeline nobody was paying for. Those workflows now stand down on their next run, and the alerts stop with them. Re-subscribe and everything picks up again by itself.
  • Self-host can finally change which GitHub repo a project publishes to. The repo used to be settable exactly once, at creation - connect the wrong one (or disconnect to fix it) and the project was stranded. Settings now has an editable repo field, set_github_repo works on self-host too, and the install playbook walks your agent through reconnecting instead of stopping at a dead end.
  • On free (GSC-only) projects, the purple "Running your first ranking checks" banner used to stay up forever - it was waiting for a rank check that only projects with DataForSEO credentials ever get. It now closes once your first ideas are queued, and no longer promises rankings that aren't configured.
  • A full engineering audit of Cursor support caught and fixed two builder bugs before any customer hit them: the step that writes Cursor's MCP credentials was silently doing nothing (runs only worked because Cursor happens to resolve env placeholders itself), and a quoting slip would have crashed the failure classifier on Cursor daily and tool builds. Every shipped workflow script is now parsed by bash as a release gate, Cursor gets the same generous timeouts on every workflow, the self-host builder learned the two measured plan-limit messages, and a dozen docs pages that still described two agents now describe three.

Added
  • Cursor is now a supported agent, end to end. Pick it on Settings and it does everything Claude Code and Codex do here: connect in one paste and get all 61 tools in both the editor and the CLI, or let it run the overnight builds and wake up to a pull request. The connect paste merges into any MCP servers you already have rather than replacing them. One thing worth knowing before you switch: the overnight builds run on a server that can't open a browser to log you in, so they need a Cursor API key - any plan mints one at cursor.com/dashboard/api, and builds draw on your plan's included usage. Full walkthrough at /docs/install-cursor.
  • Your pages get maintained now, not just published. Every night the backend looks for published guides sitting at position 5-20 for their own keyword - close enough that a refresh beats writing something new - and queues an 'Update existing page' idea (auto-approved on Auto projects, your call on Semi). The builder then refreshes that page in its normal daily slot: closes the gaps against the current page 1, re-verifies stale facts against fresh docs, sharpens the title for clicks - same URL, same PR review flow. At most two refreshes in flight, and a refreshed page rests 45 days before it can be flagged again.
  • The dispatcher now watches your backlinks, not just your pages. Referring domains get a history (weekly snapshots), so the briefing can tell you the one link move worth ten minutes today - a specific free listing from the playbook, raised only while the profile is thin or stalled, silent while it's healthy. The weekly strip counts new referring domains, the journey gains a 'First 5 referring domains' milestone, and every first-ever moment now comes with its real base rate - a first top-10 ranking tells you fewer than 2 in 100 pages get there in a year, so you know it's a win, not a checkbox. Agents get the same read over MCP: get_briefing carries the day's move, get_next_actions a backlink_move.
  • Claude Code projects can now build on an Anthropic API key: add an ANTHROPIC_API_KEY secret to your site repo and the builders use it whenever no subscription token is set. This is the way out when Anthropic refuses your subscription for Claude Code outright (their oauth_org_not_allowed flag) - a state a freshly minted token cannot clear, which is also why the health-check alerts now say what actually fixes it instead of telling you to mint a new token. While they were at it, the alerts stopped going red over a usage limit - a limited account is a working account, and builds already wait it out.
  • Every guide now ships with its own cover image, drawn by your agent as line art about that post's actual subject - so your blog index stops looking like a wall of identical cards. No image model, no extra bill. It's on by default; the cover block on the Instructions page turns it off for good if you'd rather your own cards.
  • Once your first page is live, Home shows one quiet line asking for a GitHub star. It only appears after the pipeline has actually published something, and starring or dismissing it makes it gone for good - it never asks twice.
  • Analytics now ask before they run. On your first visit one quiet bar offers to accept or decline product analytics and session recording - decline and none of it loads, and nothing else about the product changes.
Improved
  • The privacy policy and terms of service have been rewritten, and there is now a subprocessor list and a data processing agreement you can hand to a procurement team. The privacy policy names every vendor that touches your data, says how long each thing is kept, and describes the delete-account button that was already in Settings.
  • A security pass tightened a handful of things across the product. Password reset links now have to be the thing that opens the reset form - being signed in is no longer enough to change your password. The checks that fetch your own published pages refuse to follow a redirect off your domain, and the domain you type when adding a site can no longer point at an internal address. Search Console verification stops guessing on hosted accounts, where your own Google connection is the only thing that answers it.
Fixed
  • The Search Console refresh stopped keeping up on sites with a few pages waiting to be indexed: it checked them one at a time and eventually ran out of time mid-run, which took your fresh Search Console numbers down with it - silently, because the run died before it could report itself broken. It now checks several pages at once and has far more room to finish, and if it ever does run long you'll hear about it.
  • A few dashboard messages assumed Claude Code even when your project runs Codex - the in-stack builder alert now names the agent you actually chose, and the daily secrets check now validates an OpenAI key's shape the same way it always validated Claude's, so a line-wrapped Codex key is flagged before it kills an overnight build.
  • Your coding agent running out of hours no longer looks like a broken build. Claude says "you've hit your session limit" when a subscription is spent, and DispatchSEO didn't recognise that particular wording - so a pause that clears by itself arrived as a failed build, a red warning and an alert email, and the build sat stuck until a sweep freed it hours later. It's now treated as what it is: the build stays in the queue and is retried once your limit resets.

Added
  • Your agent now greets you at the top of Home and reports on the day in its own words. It says hello, gives you one sentence, and that's it unless you open the full report. The status pill and the stack of coloured banners are gone; the agent tells you if something broke or if it's still setting up, the same way it tells you anything else. Open the report and you get quick wins: SEO shows nothing for the first couple of months, so it reads your Search Console data for the good news that IS there that early. Searches you sit at #12 for and could take with one push. Pages that rank but nobody clicks, where the title is the whole problem. Searches Google has only just started showing you for. It never invents one to fill the space; a quiet week says so. The agent wears your agent's colour, orange on Claude Code and white on Codex, and your coding agent can read the same briefing over MCP with get_briefing.
  • Self-hosted installs now send one anonymous ping a day so we can tell how many people actually run DispatchSEO - downloads only ever showed how many people tried. It carries two things: a random id made on your own machine, and your version. No domain, no email, no keywords, no site data, no tokens. Set DISPATCHSEO_TELEMETRY=off in your .env to stop it; nothing else changes if you do.
  • Your coding agent now lives in the top bar, next to the Semi/Auto switch. Click its icon to see the agents you've set up and swap which one runs your scheduled builds. Agents you haven't set up aren't listed as if you should be using them - an "Add agent" button opens a picker, you paste the key, it's verified and stored, and only then does the agent join the list, ready to switch to whenever you choose. Settings' agent section was folded into one place to match - the switch cards and a per-agent key box together, with a green check on every agent whose key is already in. The little dispatcher plays along too: he wears white when your builds run on Codex.
  • Your plan is now on screen. The sidebar's Billing row carries a badge saying Starter, Growth or Scale - or Free trial while you're still in your first seven days - so you can see what you're on from any page instead of going to look it up.
  • Adding a third site now asks about GitHub first. Your automations run as GitHub Actions on your own account, and GitHub's free minutes cover about two sites - past that, if your spending limit is still the default $0, GitHub doesn't bill you, it quietly pauses your workflows. That looked exactly like DispatchSEO breaking. The step explains it in plain terms, points you at the setting, and takes about thirty seconds. If your repos are public it doesn't apply and you'll never see it.
  • The site grew a landing page per agent: dispatchseo.com/claude-code and dispatchseo.com/codex. Each one covers that agent specifically - what it runs on, the exact connect command, and the questions people actually ask about it - and the Codex page's dispatcher wears white. Both are linked from the homepage footer.
  • dispatchseo.com/free-tools is open - small SEO tools that are free and need no account. The first one takes two or more of your pages and tells you which should link to which, with the anchor text to use, taken word-for-word from the page doing the linking. It all runs in your browser; nothing you paste is sent anywhere.
Improved
  • Every dashboard screen now says "Loading" while it loads, with the dispatcher at his desk on top of the grey placeholder boxes - the same one the setup wizard shows. He wears your site's agent colours: clay for Claude Code, white for Codex.
  • The self-host boot message no longer tells VPS installers to open localhost. It now prints two clearly separate next steps - own computer vs VPS/cloud server - and when you're installing over SSH it leads with the VPS instructions.
  • The self-host setup wizard now asks which coding agent you use - Claude Code or Codex - and every command it hands you comes pre-adapted to your pick. Codex is a first-class path through setup, not a footnote behind a fold-out.
  • Wherever a Claude Code credential is asked for, `claude setup-token` is now a copyable box instead of a link to the from-scratch install guide.
  • start.sh got three guard rails: it checks Docker and the Compose v2 plugin up front (with the real fix named, instead of a cryptic CLI error), it says so when it falls back from downloading prebuilt images to compiling from source (and what that needs), and removing DOMAIN from .env now points the dashboard back at localhost on the next start instead of leaving it aimed at a dead https address.
  • The wizard now says the agent install typically takes 30-40 minutes, which is what it actually takes - the old 10-20 estimate made normal installs feel stuck.
  • The sweep that merges finished guides used to run on every status your CI reported - including the ones saying a check had only just started. Vercel alone posts several of those per preview, and each one cost a whole billed minute to wake up and discover there was nothing to do yet. It now sits out anything that can't possibly be ready. A green guide still merges within a minute of its last check, exactly as before.
  • The safety sweep behind it dropped from hourly to every six hours. It exists for the rare case where GitHub loses an event, and it was spending about 300 minutes a month per site confirming there was nothing to merge - 15% of the free GitHub allowance on a check that almost never finds anything. Public repos have always had unlimited minutes and were never affected.
  • DispatchSEO stopped describing itself as a Claude Code product. Codex does everything Claude Code does here, so the site now says "AI agents", the docs and dashboard say "your coding agent", and both are named wherever the difference matters - no change to how anything works.
  • Adding a site when your plan is full now says so up front. The project switcher shows "Upgrade to add more sites" instead of "+ Add project", and if you reach the form another way it explains the limit rather than handing you fields to fill in. It also answers immediately - it used to check that your domain was live and look up its registration date first, then refuse for a reason that had nothing to do with either.
  • Plans no longer cap how many keywords you track. The cap never actually bound - your DataForSEO budget hits its ceiling first, and that one slows rank checks instead of refusing new keywords - so it's gone from the pricing pages and from the code. Plans are sold on sites now, nothing else.
  • When a pipeline run fails before the writing agent even starts, the alert now names the exact step that died instead of just "workflow failed" - so the email tells you (and us) what to look at without opening the Actions log.
Fixed
  • A red "something failed" notice on Home no longer turns itself green when the next run is merely handed out. Being picked up is not the same as succeeding, and the banner - and the answer your agent gets - now say so until something actually finishes.
  • Being signed out at random is fixed. Your session is refreshed as you browse; before, the refreshed sign-in was never saved, so sooner or later a normal click landed you back on the login page having done nothing wrong.
  • A brief database hiccup no longer looks like "you have no account". It now retries and says so plainly if it still can't reach us, instead of showing you an empty product.
  • Hitting your coding agent's usage limit no longer looks like a broken product. It's a normal, temporary pause - Home now names it as one and tells you when building resumes.
  • A build that failed no longer holds the next attempt for the whole cadence window - it backs off and retries instead of waiting a full day to try again.
  • Rankings that had quietly stopped updating, and builds that had died without a trace, now surface on Home instead of looking like everything is fine.
  • On the hosted plans, a trial no longer reads as a paid plan, and cancelling now actually takes effect on your account.
  • Builds now follow your repo's own Node version - an `.nvmrc` if you have one, otherwise the `engines.node` floor in package.json, otherwise 22. Nothing to edit in the workflow, and because it's decided when the build runs, a pipeline update can't undo it.
  • A run that was skipped on purpose - queue empty, a pull request already open, builds paused - no longer reports itself as a finished build. It used to hold off the next one for up to 20 hours, so a guide approved in the morning could sit until the evening.
  • An empty queue no longer turns into a "your builds stopped running" warning. If there is nothing approved to build, the builder being quiet is the correct behaviour, not a fault - the warning is now reserved for work that really is waiting and not happening.
  • Your public sitemap now uses your own domain - self-hosted installs were publishing dispatchseo.com URLs in their sitemap.xml.
  • Pasting an agent key now tells you if it couldn't also be stored on your GitHub repo, and which permission is missing. Before, it said "saved" either way and your scheduled builds kept failing on a secret that was never written.
  • A one-off crashed build no longer leaves a red warning on Home forever. The build is already re-queued and retried automatically, so the notice now clears itself once that has happened.
  • An update worth announcing no longer gets buried by the next small release, Search Console stats for a whole window no longer save only partway when one date fails, and a pipeline update can no longer open a surprise second install pull request on your repo.
  • The "researching in the background - running your first rank check" strip no longer sits there indefinitely. On a free (Search-Console-only) site there was never a rank check coming, so it spun forever; it now finishes once your queue fills. And if you DO have DataForSEO but no rank check has landed a full day after keywords were tracked, it says that plainly instead of claiming it's still working.
  • A guide pull request that fell behind your main branch now fixes itself. Every guide edits the same couple of registry files, so a pull request left open while anything else merges used to come back conflicted and sit there red until you rebased it by hand. The merge sweep now updates the branch from main and merges it on the next pass.
  • When a pull request genuinely can't be merged, Home now tells you why - conflicts, a branch protection rule, or a branch that's out of date - instead of "workflow failed" with a link into the GitHub Actions log, or blaming branch protection for a conflict.
  • One unmergeable guide no longer stops the rest of the merge sweep. It used to abort the whole run, so later pull requests and the stuck-tool-check never ran at all.
  • Home no longer shows a red "your builder has never run - check its token" warning when the truth is simply that you haven't approved anything yet. It only warns when there is genuinely something approved and waiting that the builder hasn't picked up.
  • Installs running on a home network or a private address (192.168.x, a Tailscale address, your own machine's name) no longer get a permanent warning telling them to re-run setup because their pipeline "never reported". Those installs are unreachable from GitHub by design, which was never a fault to report.
  • On a server install with your own domain, research could run twice on the same day - once in the built-in builder and once on GitHub - which meant duplicate ideas and double the DataForSEO spend. Whichever one is actually running now owns the job.
  • Tool pull requests now validate on sites that aren't Next.js. The checker used to assume `start` on port 3000, so a Vite, Hugo, Astro or plain-static site failed every tool PR. Put your own command and port in `.dispatchseo/serve` and it uses those - and that file survives pipeline updates.
  • Adding an agent from the topbar switcher no longer risks blanking the whole dashboard if the save fails - it shows the reason in the panel. The key you paste there is now also copied to your repo, so scheduled builds on GitHub stop failing seconds in on a missing credential. And if the agent check can't load, the panel says so and offers a retry instead of spinning forever.
  • Saving a credential on an install whose password comes from your .env now tells you to set it in .env, instead of failing with a blank error screen.
  • Tool PRs no longer get stuck unreviewed on sites whose home page redirects - an app behind a login, a country/language bounce, anything that doesn't answer with a plain page at the root. The check that waits for your site to start was insisting on a specific answer from the home page, gave up on anything else, and left the tool sitting in a pull request nobody was told about. It now just waits for your site to respond.
  • A site pointed at a coding agent nobody gave a key to now shows up as a failed build on Home within its normal schedule, instead of silently never researching or building again. And with GitHub not yet connected, the bundled builder no longer "claims" work it can't start - the work just waits, ready the moment you connect.
  • The dashboard's "turn on automatic builds" reminder comes back if the bundled builder stops checking in for two weeks - it used to switch off forever after the first successful check-in.
  • On self-host, the agent credential you paste on the dashboard now also lands on your connected repo as the Actions secret its scheduled workflows read - one paste feeds both build paths, in either order (token first or GitHub first). Before, workflows died in seconds with "the token is missing" over a token you had genuinely pasted, because it was sitting in the other pocket and nothing copied it across without the GitHub App. The scheduler also checks the repo secret before waking a workflow, so a half-finished setup waits quietly instead of emailing you failures from GitHub.
  • Cloud setup no longer gets stuck one step from done. The background setup run could finish all its work without flipping the final "installed" switch, which quietly kept research and daily builds from ever starting. The backend now verifies your repo on its own and flips the switch the moment everything checks out - and when one GitHub setting genuinely needs your click ("Allow GitHub Actions to create and approve pull requests"), the setup checklist now says so with a direct link, then re-checks automatically after you flip it.
  • Everywhere we told you to set a GitHub "spending limit" now says what GitHub actually calls it today: a budget, under Budgets and alerts. The old wording sent people looking for a control that isn't there any more. The instructions also lead with the step that's easiest to miss - GitHub needs a payment method on file before any budget takes effect at all.
  • On cloud, pipeline fixes now reach your repo within minutes of shipping instead of at the next daily check. Every deploy sweeps the connected repos and updates any that run an older pipeline - so a workflow bug we fix stops failing your builds the same hour, not the next day.

Added
  • A Disconnect repo button in Settings. It switches off the workflows we put in your repo, deletes them along with the .dispatchseo folder and the key we stored there, and forgets the connection. Everything scheduled stops, which means it stops spending your GitHub Actions minutes. Your guides, tools and pages are left exactly as they are, this dashboard keeps every keyword and ranking it has tracked, and you can connect the repo again whenever you want. On the self-hosted version there was previously no way to do this at all: your first site can't be deleted, so a site you had only been trying out kept running builds in your repo with no button anywhere that stopped it. The button is on that first site too - it is the one that needed it most. Your agent can do it as well, through the disconnect_repo tool.
  • A shape check before writing. The builder now sketches the guide's opening and headings and checks those against everything you've published BEFORE it writes the article, the graphics, or the cover. A post that would have read like a repeat gets reshaped in seconds now, instead of being written in full, caught at the end, and rewritten. The final check on the finished guide is unchanged and still has to pass before anything opens as a pull request.
  • A plain-English alert when GitHub pauses your builds. Running out of monthly Actions minutes does not produce a bill or an email from GitHub - it just quietly stops running your workflows. When it looks like that happened, the dashboard now says so and links straight to the setting that fixes it.
  • Up-front numbers on what a third site costs, wherever you'd decide to buy one. Your first two sites fit inside GitHub's free tier; past that GitHub charges you a few dollars a month directly, and we never touch or mark up that money. The landing page's pricing section, the plan picker, the upgrade cards on Billing, the FAQ and the docs all say so now - above the button rather than below the fold - and a cost table covers every site count from one to ten so you can check your own number instead of working it out from a sentence.
Improved
  • Every build used to open by making a dozen separate requests and then reading two or three of your published posts start to finish, just to work out what their openings and headings looked like so the new one wouldn't read like them. All of that now arrives in a single response the moment a build starts - and it comes from the same comparison the sameness check already runs, so what the builder avoids and what the check flags can't drift apart.
  • The builder also stopped carrying instructions it can't act on. It was being handed the full keyword-vetting rulebook on every single step, on a job where the keyword was already decided and picked by you - plus the whole back-linking policy even on sites that have back-linking switched off. Both are now sent only where they apply.
  • Weekly tool builds got the same treatment. Every quality gate is exactly where it was - the page-1 check, the original-research requirement, the humanizer pass, the sameness check, your site's own build, and your review of the pull request. This changed how the work gets done, never the bar it has to clear.
  • Your site's automations used to run on their own timers, three attempts a day, because GitHub sometimes drops a scheduled run. Two of those three woke up only to find nothing to do - and GitHub charges your account a full minute every time one starts. The dashboard now decides when there is something to build and wakes the workflow itself, so that check costs nothing. Nothing about what gets published changes.
  • If a wake-up call goes out and nothing runs, you hear about it. GitHub accepts those calls even when a repo has Actions switched off or has run out of minutes, so the dashboard now tracks each one until the workflow reports back, and flags the ones that never do.
  • The docs now tell the whole truth about Codex: the landing page no longer says agent support is 'coming', the FAQ no longer says a Claude subscription is required, and the self-host guide, security page, and troubleshooting page all cover the Codex path - including which model builds use and how to change it.
  • The dashboard opens faster. Home shows its quick sections straight away and fills the slower ones in as they arrive, instead of holding the whole page back for the slowest thing on it. The Guides page stopped reaching out to your live site before it would render at all, and Billing stopped asking your payment provider the same three questions twice on every visit.
  • Tables in the docs render as tables. Every one of them was shipping as the literal pipe characters the author typed, across 17 pages - including the cloud-versus-self-hosted comparison people read specifically to make that decision.
Fixed
  • Scheduled Codex builds on cloud were being turned away at the door: the tool that runs Codex on GitHub refuses runs started by automation unless told otherwise, and we only ever told it for manual runs - which is why manual tests passed while every scheduled run died. All eight workflows now allow it.
  • Keyword lookups inside Codex builds were silently broken for anyone with their own DataForSEO account: the credentials were handed over in a format only Claude Code understands, so Codex logged in with a placeholder instead of your login. Both runners now hand Codex the real values.
  • A builder run could finish, report success and have built nothing at all - costing you a day's post with a green tick beside it. If the builder got stuck it could stop and ask a question, and on a scheduled run there is nobody there to answer, so it ended quietly and the day's post never happened. Runs now have to point at the pull request they opened; one that opened none is put back in the queue and picked up on the next pass, and you get told if it keeps happening.
  • The underlying cause was a rule of ours that was too strict about how Codex is allowed to write files - it ruled out the one method that reliably works, so the builder painted itself into a corner on anything with code samples in it. Codex builds should now get through the same work Claude Code does.
  • Every guide ships with its own custom graphics again. Your guides are supposed to ship with two or three custom graphics drawn for that exact topic, plus a cover. Codex was reading that requirement and talking itself down to a plain table and a quote box - so a post would arrive looking noticeably thinner than the ones beside it on your blog. The builder now counts the files it actually created before it opens the pull request, and won't ship the guide until they are there. Guides built by Claude Code were never affected.
  • A tool build that produced nothing could report success and quietly stop the tool queue; a transient OpenAI rate limit could ring the alarm bell and cost a full cadence window. Every scheduled workflow now tells those apart the same way the daily guide build does: retries stay quiet and automatic, dead accounts stay loud.
  • Hitting your agent's usage limit no longer costs you the day. A build that stopped that way was being recorded as a finished run, which held the next attempt back until the following day while the dashboard showed green. It is now recorded as what it is - ran, built nothing - and retried within hours.
  • Self-hosted stacks had no place left to paste a Codex key once the builder was running - the one card that took it disappears after first setup. Settings now always has a credential box for the builder, the setup wizard's paste step takes both agents, and a build that keeps getting deferred now goes stale and alarms instead of looking green forever.

Added
  • A Cancel subscription button on Billing. Two clicks, no email, no hunting through the payment provider's site. Cancelling during your trial means you're never charged at all.
  • One optional question on the way out. The cancel screen asks what made you leave and whether anything needs fixing - both skippable, and the cancel button works with the whole thing left blank. Whatever you write goes straight to the person who builds this.
  • Cancel now, keep what you paid for. Your plan runs to the end of the current period - sites keep being tracked and built the whole time - and Billing shows the exact date it ends. Nothing is deleted when it does, so coming back later picks up where you left off.
  • Changed your mind? A Keep my plan button appears while a cancellation is pending, so you can call it off without going through checkout again.
Fixed
  • A paused account now says so. If your plan ends or a payment fails, every dashboard screen carries a banner explaining that tracking and building have stopped, that nothing has been deleted, and how to start again. Until now the dashboard looked completely normal and just quietly stopped updating.

Added
  • Codex is a full alternative to Claude Code. Setting up a new site now asks which one you want, and Settings -> Project key has a tab per agent for sites you already have. Either way it drives everything: research, the queue, approvals, backlinks, reports, building a guide on request - and the scheduled builders that run overnight without you.
  • A Coding agent setting. Switch a site between Claude Code and Codex and it takes effect on the next scheduled build - nothing to reinstall, no pull request, no repo edit, because your workflow files already carry both and ask which to use when they run. If the new agent's key isn't in place yet, the switch tells you right then instead of letting you find out at 5am.
  • An "Other MCP client" tab, for Cursor, Gemini CLI, Copilot, or anything else that speaks MCP. It hands you the URL, the header, and a header-free URL for clients that can't set one. Those connect and drive DispatchSEO by hand; the overnight builder needs Claude Code or Codex.
Improved
  • The honest difference between the two is billing, and it is stated wherever you pick: Claude Code runs on the subscription you already pay for, Codex is metered by OpenAI per run. Either way the credential is yours and stays yours - DispatchSEO never proxies or pools it.
Fixed
  • A Codex build that stops because your OpenAI account is out of credit now says so, loudly, with the link to fix it. Codex reports that identically to a momentary rate limit, so taking its word for it would have meant a green run every night that built nothing - the builders ask OpenAI directly instead of guessing from the message.

Added
  • Feedback, at the bottom of the sidebar. Type what you're missing and hit enter - that's the whole thing. Add detail if you want, or don't.
  • Vote on anyone else's request. One vote each, click again to take it back, and the board sorts by what people actually want. Requests get a status as they move - planned, in progress, shipped - so you can see where yours went.
  • Your agent can use the board too: get_feedback, submit_feedback and vote_feedback over MCP, so you can ask for something without leaving the terminal.

Fixed
  • Failure alert emails now send on Docker installs. They never had: the sender address arrived empty rather than missing, so every alert was rejected on the way out and the error only landed in the container log - while the docs told you no email meant nothing was wrong. If you self-host and wired up Resend, you'll start hearing from it.
  • Confirming your email works from a different device than you signed up on. The link only worked in the browser that started the signup; anywhere else it confirmed your address and then told you your password was wrong.
  • A job in your repo that hangs and hits its time limit now reports that it failed. A cancelled run is neither a success nor a failure to GitHub, so those runs told us nothing at all - the one situation the time limit exists to catch was the one that stayed invisible.
  • Rank tracking waits quietly while your DataForSEO account is still unfunded instead of reporting a broken job every night. Connecting the credentials and wiring the deposit are two separate steps, and the gap between them is normal.
  • The setup wizard says so when a step fails instead of leaving the button dead, the repo picker always offers a way forward even when GitHub returns nothing, and self-hosted installs get the pipeline install card on their first site.

Added
  • Setup has a link to the Discord in its header, next to the quick guide. Some of setup depends on things no guide can check for you, like whether Google has verified your property yet, and being stalled on step three is when you want a person rather than another page to read.
  • The docs carry the same link in their header and in the Help section of the sidebar, so it's reachable from any page rather than only from the one that happens to mention it. Troubleshooting and Common questions now point there first, with GitHub Discussions kept for anything worth leaving behind for the next person.

Added
  • Your product can be described honestly in several ways, and they are not equally winnable. A tool for SEO sits in a market Ahrefs and Semrush have published into since 2011; the same tool described as "an agent that does the work unattended" sits in a market two years old. Research now measures each description against your site's current strength every week, spends the week on the one you can actually win, and prints the numbers so you can see why it chose. Setup writes those descriptions down for your site - re-run it from your dashboard to get them.
Improved
  • It sticks with one subject rather than hopping between them. Twenty guides spread over five subjects makes you an authority on none; twenty inside one build a cluster where every page lifts the others. It moves on only when a subject is genuinely used up.
  • On automatic mode you are never asked to approve anything, and nothing sits in limbo either. Ideas are decided when they're researched - approved or dropped, with the reason recorded - rather than parked "until your site is stronger", which on a new site means months away and possibly never. The decision uses the page-1 check it already paid for: if nobody established was ranking there, it goes ahead, even when the data provider returned no difficulty score at all. A missing score is a missing guess about a page we already looked at.
  • Some weeks that means 4 guides instead of 7. It won't pad your queue with keywords it doesn't believe in, and it won't hand you the difference to sort out either.
  • A difficulty score is now only the first pass. If it checks page 1 for a keyword and finds nobody established sitting there, it goes ahead even when the score called the keyword too hard for your site - because what it actually saw beats what the score guessed. Scores are calculated from links, and they read far too high on exactly the searches a new site can still win. This is how bigger keywords reach your queue without lowering the bar, and it costs nothing extra: it already looks at page 1.
Fixed
  • Keyword suggestions were coming back wrong for anyone on our hosted plan - we were asking our data provider for keywords in the same shopping CATEGORY as yours rather than keywords that actually mean the same thing, and asking for English never filtered out other languages. A search about SEO automation could return French ad agencies. Now it asks the two right ways, merges them, and throws out anything non-English or with no search traffic - with a test that fails if that ever regresses.

Improved
  • The cause was a workflow comment asking whoever ran your install to delete a line by hand when your repo pinned a version - so getting it right depended on that being noticed. Nothing we install in your repo is allowed to work that way any more: the workflows decide for themselves when they run, and two new checks on our side refuse to ship a workflow that needs hand-editing or that has never been proved to start.
Fixed
  • The workflows DispatchSEO installs in your repo set up pnpm before building. That step passed a pnpm version, and if your package.json also pins one (a "packageManager" field), the setup action refuses to run at all - so the builder died at step two of every run, before it wrote a line. Nothing was lost and nothing was published wrong; the builds simply never happened. The workflow now reads your pin and matches it, and only picks a version itself when you have not pinned one.
  • It also failed BEFORE the step that reports problems to your dashboard, so the banner and the alert email stayed quiet - you would only have seen it in GitHub's own emails. The stale-run check would have caught the silence within 36 hours, which is the backstop working but slower than it should be.
  • To pick this up, re-run the setup command from your dashboard - your repo keeps the version of the pipeline it installed, and the daily health check will also tell you an update is waiting.

Improved
  • On Auto, an idea research proposed but didn't approve used to read "optional", with an "Add" button - as if it were a bonus you could ignore. It isn't: research now refuses to promote borderline keywords just to hit the weekly count on a site with no backlinks yet, so approving is the only thing that ever builds them. The row says "pending" and names the reason - "KD 17, over your ceiling of 10" - and the button says Approve.

Improved
  • A keyword now has to pass one question before anything else: written well, would this post end with "and that's what your product does"? If the product can only show up as a footnote or a "here's how we built ours" aside, the keyword is dropped - no matter how good the search volume, the difficulty score, or the fit with your audience.
  • The rule this replaces asked whether your audience would search the keyword, and your audience searches a hundred things a week you're not the answer to - their editor, their cloud, their framework, the agent they run you with. Those all passed, and each one is a post that ranks for someone else's question. Every idea now has to name the problem the searcher has, not who the searcher is.
  • Setup now writes down your marketing surface - your landing page, your README - alongside your code, because that's where the research reads what your site is actually about. If your site facts file was written before today it probably lists code only, which is exactly how a run drifts into writing about your plumbing. Re-run setup from the dashboard to refresh it.

Added
  • New guides have always linked out to your older ones, but nothing ever linked back - so your oldest posts, usually your best, collected no internal links at all. There's now a switch on the Automations page: when it's on, the same pull request that adds a guide also edits 2-3 of your closest existing posts so they link to it. It only ever wraps words that are already in a sentence you wrote - strip the link out and the text reads exactly as before - so your writing is never reworded, extended, or tidied.
  • It's off until you turn it on, and it stays that way if you never do. This is the only thing DispatchSEO does that changes pages you already published, so it doesn't ride along with Semi or Auto - it's a separate yes. Once it's on it stays out of your way: the links ride in the same pull request as the new guide, which merges under whatever rules you already had. No extra pull requests, nothing new to approve.
  • A post that's already carrying 5 links to other guides gets left alone from then on. Without that, your most on-topic post would get picked build after build and slowly fill with links - which is the thing that makes automatic linking backfire.

Improved
  • Every setting your agent can pass now explains what it's for. Previously the agent had to infer what belonged in each field from the surrounding description, which Claude handles well and other agents handle less well. All 111 of them are now spelled out.
Fixed
  • The "Setting up your site in the background" banner no longer appears on a site that's clearly already running. It was keyed on a marker that older projects never got, and reconnecting your GitHub App reset the timer that was supposed to hide it - so a site publishing guides every day could be told it was still being set up. It now goes by whether your site has real data, which settles it regardless of any marker.

Fixed
  • A keyword that's already in your queue can't be added again - not by a research run, not by the Add idea form. Before this, a run that re-proposed a keyword you had already approved put the same guide in the queue twice, and two builders would write two competing pages for one search. You now get a plain "already in the queue" answer instead, naming the idea that's already there.
  • Reconnecting the GitHub App from the Home card now saves. If the app was already installed on your GitHub account, GitHub sent you back through a path that bounced you to the dashboard without recording anything - so the card kept nagging no matter how many times you reconnected. Connecting a second site on the same GitHub account works now too.

Added
  • Every research run now starts by looking at the pages it already published - what ranked, what stalled past position 50, what got impressions but no clicks - and carries that into which keywords it picks next. It writes the conclusion into the run report, so you can see what it learned. Previously each run started from scratch and had no idea whether its last twenty picks worked.
Improved
  • Search volume now has an upper limit that grows with your site, not just a floor - but a big keyword whose page 1 is still thin no longer gets thrown out for being big. In a fast-moving topic, a query can have thousands of searches while nobody has published the real answer yet; those are the best openings a new site gets, so what's already on page 1 decides, not the volume number.
  • Research won't invent a pattern from two lucky posts. It now waits until at least 10 of your pages have had three weeks to settle before drawing any conclusion from how they're doing, and says "not enough data yet" until then.
  • Page-1 checks are capped at 25 per research run, spent on the strongest candidates first. They're the priciest thing a run does, so a hard week now costs a known amount instead of running up your bill.
Fixed
  • Difficulty scores read far too low on commercial searches like "<competitor> alternative" or "best X", where page 1 is five established brands winning on reputation rather than links - so those keywords looked easy, got queued, and the pages landed on page 8. Research now counts the established players on page 1 and drops the keyword at four or more, whatever the difficulty score claimed.
  • Hitting the weekly target of 7 guides was allowed to push borderline keywords through on a site with no authority yet. You still get one guide a day - that hasn't changed - but research now gets there by hunting wider instead of settling: it mines the queries you already show up for in Search Console, error messages, new releases in your space, and your trend radar, and screens twice as many candidates before it will call a week short.

Added
  • The tool builder creates your tools section itself the first time it runs - registry, tools index, and the page template - in the same PR as the first tool. If /tools is already your app's own screen, it publishes at /free-tools instead and leaves your routes alone.
Improved
  • Setup now looks for (or scaffolds) a tools home the same way it does your blog, so new projects start able to publish tools on day one.
Fixed
  • Sites that finished setup without a public tools section got tool ideas skipped week after week, so the tool queue stayed empty and the weekly tool builder had nothing to ship - quietly, with no warning anywhere. The research run now queues 1-2 tool ideas every week regardless, and reports it when none clears the bar.
  • Tool validation used to assume every tool lives at /tools/<slug>; it now reads the real path from the PR, so tools published anywhere else get tested instead of failing on a 404.

Added
  • Your project key can now ride in the connect URL itself (?key=...) - the Windows connect command uses this, sidestepping a long-standing Claude Code bug where a configured auth header is silently dropped on Windows.
Improved
  • Self-host hardening: schedules survive Windows checkouts (line-ending pin), hand-edited .env files are CRLF-normalized on boot, a rotated Claude token reaches the builder without a restart, and hung GitHub calls can no longer wedge the build loop.
Fixed
  • Free mode (no DataForSEO, no SerpApi) no longer stalls the builder at the SERP gate - guides and tools build from Search Console data and product knowledge, and say so in the PR.
  • On plain-HTTP installs (localhost, LAN, VPS before HTTPS), Settings and the dashboard no longer hand out https:// connect commands that can't connect.
  • Trend radar on a localhost install now says plainly that it needs a public address instead of reporting a scan that could never arrive.

Added
  • Install and restart from plain PowerShell: the quickstart has a Windows paste, and start.cmd in the install folder boots the stack from any Windows terminal (or a double-click) - no Git Bash needed.
Improved
  • Commands the wizard and dashboard ask you to paste on your own computer now show Mac/Linux and Windows (PowerShell) tabs, defaulting to your system, and the final wizard step spells out where each paste goes.
Fixed
  • The 'paste into Claude Code' prompt named a server (seo-manager) that doesn't match what the connect command registers (dispatchseo-<your site>), so a fresh agent session could refuse to start. Every prompt now uses your project's exact server name.

Added
  • If your guide queue ever runs empty, research now starts on its own instead of waiting for the next weekly run - so a delayed or dropped schedule can't cost you a day's post. Still at most one research run a day.
Improved
  • Self-hosted installs: the dashboard is now reachable only from the machine running Docker unless you deliberately open it up, matching what the VPS guide always said.
Fixed
  • Approving a tool, or connecting a brand-new site, could silently do nothing for the rest of the day if that day's scheduled run had already happened. Both start immediately now.
  • If the GitHub app loses access to your repo, the dashboard now tells you and links the fix. Before, merges and approvals just stopped working with nothing to see.
  • Setup could drop you on the final screen having skipped Search Console, your keyword source and publish mode. It now resumes exactly where you left off.

Added
  • Budget pacing: if a project's DataForSEO spend is on track to hit its monthly budget, checks automatically thin to every-other-day (then weekly) instead of cutting out mid-month. The Billing page shows when pacing is active.
Improved
  • Rank checks moved to a smarter schedule: keywords ranking in the top 30 are still checked every day, and everything gets a full-depth sweep (including Google AI Overview citations) every Monday. Same charts, a fraction of the DataForSEO cost.
  • Domain Rating now refreshes weekly - it moves on a monthly scale, and the daily re-check was paid money for a number that almost never changed overnight.

Improved
  • The indexing card links straight to the Claude for Chrome install page the first time it shows up, so the paste-and-go step actually works on the first try.

Fixed
  • Opening the setup page could start installing the pipeline into whichever site DispatchSEO happened to think was active - committing files and writing a secret to that site's repo without anyone pressing a button. It happened because a site with no saved setup progress landed straight on the final screen, which starts the install by itself. Setup now opens on the Connect GitHub step instead, and only reaches the finish line if you actually walked there.
  • Choosing a repo, saving your Claude token, and installing the pipeline now each name the site they're for. Before, they used whichever site was active, so a stale browser session could have pointed your token or your repo at the wrong one.

Added
  • Moving a site to another DispatchSEO install? Tick "leave the repo alone" when you delete, and the pipeline keeps working while the old project goes away.
Improved
  • Your content is never part of that cleanup. Published guides and tools, the page templates the setup run built, and your sitemap wiring all stay exactly where they are - only our machinery is removed.
  • Closing your account cleans out every connected repo the same way, and tells you on the way out if any repo could not be reached.
Fixed
  • Deleting a project only ever deleted our side of it. The workflows we committed to your repo kept running on schedule, failing against a project that no longer existed, and emailing you about it - with an error blaming DispatchSEO rather than the delete you asked for. Deleting now disables and removes those workflows, the .dispatchseo files, and the SEO_MCP_API_KEY secret.

Added
  • Settings shows which account you're signed in as.
  • You can close your account from Settings. It cancels your plan first and removes your sites, and if the cancellation doesn't go through, nothing is deleted.
Improved
  • Deleting your only site now warns you that it doesn't cancel your plan, and with no sites left the sidebar stops offering links that bounce you back to the wizard.
Fixed
  • Signing up with an address that already had an account showed "check your inbox" for an email that was never sent. It now says the account exists and points you at signing in.
  • The confirmation link in that email dropped you on the homepage instead of signing you in. It now takes you straight into your dashboard.
  • "Continue with Google" quietly reused whichever Google account you last signed in with, so a second account could land you in the first one. It asks which account now.

Improved
  • Setup no longer stops to show you the keys it generated - you go straight into the wizard. Both keys are on Settings whenever you want them.
  • The GitHub step is called Connect GitHub, and it's honest about skipping: on a Docker install the bundled builder needs that token to reach your repo at all.
Fixed
  • Reinstalling on a site whose repo was already set up used to leave setup waiting forever. It now finishes on its own.
  • Self-hosted auto-merge now holds back any pull request that touches files outside your publishing folders, matching what the hosted version has always done.

Added
  • This changelog, plus a heads-up on the dashboard whenever something ships.
Improved
  • When your site repo's SEO workflows fall behind, we push the new version through the DispatchSEO GitHub App automatically - no prompt to paste, no banner to read.
  • Signed in already? The landing page sends you straight to your dashboard.

Added
  • New pixel-art walkie mark across the app, favicon, and share images.
  • One background-work banner during first run, replacing the pile of setup cards - and Log out is finally in the sidebar.
Improved
  • Switching projects shows a loading state instead of appearing to freeze.
Fixed
  • When a background job fails on a hosted project, the email goes to you, not just to us.
  • No more false "your secrets are wrong" alerts while setup is still running.

Added
  • Connect the repo and start exploring - a top banner tracks the setup run instead of locking you out until it finishes.
Fixed
  • Search Console on hosted projects syncs through your own Google connection, so your data lands even without granting us service-account access.
  • Email confirmation links land on the right page instead of a 404.

Updates apply themselves - nothing here needs an action from you.