Documentation
Everything the plugin does, what it costs and how to control it. No account needed to read any of this.
Install
Unstale needs WordPress 7.0 or newer and PHP 8.1 or newer. WordPress 7.0 is the floor because the plugin runs on the AI Client that ships with it. Unstale works with Gutenberg and the Classic editor, on posts, pages and public custom post types.
- In your WordPress admin, go to Plugins → Add New, search for Unstale and install it. You can also download the zip from wordpress.org and upload it.
- Activate the plugin. A new Unstale menu appears with three screens: Review queue, Settings and Log.
- Go to Settings → Connectors and connect an AI provider if you have not already. Unstale uses whatever you set up there and stores no key of its own. See API keys below.
- Open Unstale → Settings and pick a default model and a default refresh level. Balanced is the default and is available on the free plugin.
- Open any post list. The Unstale column shows the status and the last refresh, with a one-click action to queue a refresh.
- The job lands in the Review queue. Read the side-by-side diff, then approve or reject. Nothing is published before you approve.
Prefer the command line? Unstale ships a WP-CLI command and a REST namespace.
# Refresh one post at the Balanced level
wp unstale refresh 1234 --level=balanced
# Queue the whole archive
wp unstale refresh --all --level=balanced
The REST namespace is unstale/v1, with routes for jobs, run, approve and estimate. Every step runs through Action Scheduler with a budget under 90 seconds per API call, so a long article can never hit a PHP timeout: the job resumes where it stopped.
API keys
Unstale is strictly bring-your-own-key on every plan, free and Pro: you need a key from at least one AI provider, and that provider bills you directly, on your own account, with no markup and no credit system in between.
What changed in WordPress 7.0 is where the key lives. Providers and their credentials are now managed by WordPress itself, in Settings → Connectors, so Unstale stores no key of its own: it hands its prompts to the WordPress AI Client, which routes them to the provider you connected there. The plugin never sees, proxies or logs your key, and neither your key nor your content ever reaches an Unstale server.
Unstale → Settings shows which provider WordPress reports as connected, and lets you pick the default model. Connect more than one provider and you can switch model per run. Upgrading from a version of Unstale that stored its own keys deletes them automatically.
Anthropic default
Create a key at console.anthropic.com, then connect it in Settings → Connectors. It stays with WordPress; Unstale only reads that the provider is ready. Model ID: claude-sonnet-5 (Claude Sonnet 5).
Default model. Writing quality close to Opus, follows SEO instructions literally, 1M token context and 128k output. Best choice when the rewrite quality matters more than the bill.
OpenAI
Create a key at platform.openai.com, then connect it in Settings → Connectors. It stays with WordPress; Unstale only reads that the provider is ready. Model ID: gpt-5.6-terra (GPT-5.6 Terra).
Balanced quality and price in the GPT-5.6 family. While Terra is still in preview the catalogue marks it as such and the plugin falls back to gpt-5.5 ($5 / $30 per MTok), with the substitution stated in the UI and in the job log.
Create a key at aistudio.google.com, then connect it in Settings → Connectors. It stays with WordPress; Unstale only reads that the provider is ready. Model ID: gemini-3.5-flash (Gemini 3.5 Flash).
Fastest and cheapest of the three, multimodal, and the first 5,000 grounded searches each month are free. Good default for bulk refreshes on large archives.
Model IDs and rates are not hardcoded in the plugin. Unstale fetches a remote catalogue at https://unstale.ai/api/v1/models.json once a day, keeps it cached for 48 hours and falls back to the bundled copy if the fetch fails. When a provider ships a new model or changes a price, your estimates follow without a plugin update.
Refresh levels
One slider, four presets. Every level fixes errors, fact-checks figures against live web results, adds internal links and republishes safely; the higher levels progressively take more editorial liberty with your copy.
Minimal and Balanced ship in the free plugin. Strong and Maximal require Unstale Pro.
| Action | Minimal | Balanced | Strong | Maximal |
|---|---|---|---|---|
| Spelling and grammar fixes | Yes | Yes | Yes | Yes |
| Fact-check of figures, dates and prices (live web) | Yes | Yes | Yes | Yes |
| Internal linking (up to 10 links, one link per target page) | Yes | Yes | Yes | Yes |
| Em dashes removed | Yes | Yes | Yes | Yes |
| Date bump and SEO-safe republish | Yes | Yes | Yes | Yes |
| Original structure and tone | Kept | Kept | Adapted to persona | Rewritten |
| SEO and business optimisations, missing sections added | — | Yes | Yes | Yes |
| Meta title (50-60 chars) and description (145-160 chars) | — | Yes | Yes | Yes |
| Key takeaway boxes | — | Yes | Yes | Yes |
| JSON-LD (Article, plus FAQ or HowTo when relevant) | — | Yes | Yes | Yes |
| Key sentence per paragraph in bold, scannability pass | — | Yes | Yes | Yes |
| Tighter, more human copy written for the persona | — | — | Yes | Yes |
| Secondary queries all covered | — | — | Yes | Yes |
| TL;DR at the top | — | — | Yes | Yes |
| CTAs (in-text, visual, closing) to your products | — | — | Yes | Yes |
| Interactive quiz when relevant | — | — | Yes | Yes |
| Slide structure and first-person E-E-A-T signals | — | — | Yes | Foundation |
| Full rewrite from the best available sources | — | — | — | Yes |
Internal linking is best-effort: Unstale never forces a link. If it finds no relevant target, the refresh still succeeds with fewer links, or none.
What happens during a refresh
- Analysis — main keyword, language, and the products or services the article mentions.
- Research — live web search for the top results, search intent, expected format, secondary queries, persona and gaps against competitors. Skipped at Minimal, which keeps only the fact-check search.
- Fact-check — figures, prices, dates and feature claims verified against official sources.
- Rewrite — per the level you picked, section by section on long articles.
- Enrichment — metas, JSON-LD, takeaway boxes, TL;DR, CTAs and quiz, depending on the level.
- Internal linking — up to 10 links to your own published content, varied anchors, one link per target page.
- Cleanup — em dashes removed, key sentences bolded, HTML and blocks normalised.
- Review — the job waits in the queue with a side-by-side diff. Approve, edit or reject. Full-auto is opt-in, globally or per rule.
- Publish — URL, slug and revision history preserved, optional date bump, targeted cache purge (the URL, the home page and the feeds, never a full flush), and a complete log of steps, tokens, costs, searches and links.
Costs
Two separate bills, and only one of them is ours. The Unstale licence is a flat annual fee with no rewrite quota. The AI usage is billed to you by your provider at their published rates.
| Model ID | Provider | Input / MTok | Output / MTok | Web search |
|---|---|---|---|---|
claude-sonnet-5 |
Anthropic | $3.00 | $15.00 | $10 / 1k |
| Intro rate $2.00 / $10.00 until 2026-08-31 | ||||
gpt-5.6-terra |
OpenAI | $2.50 | $15.00 | $10 / 1k |
| Falls back to gpt-5.5 ($5.00 / $30.00) while in preview | ||||
gemini-3.5-flash |
$1.50 | $9.00 | $14 / 1k | |
| First 5,000 grounded searches per month are free | ||||
Provider rates as published on 2026-07-19. The plugin always estimates from the live catalogue, not from this table.
How the estimate is calculated
Unstale shows the estimate before the run, per article and per batch:
estimated cost = estimated tokens (article length x level)
x model rate
+ estimated searches
x search rate
Article length and the level set the token estimate; the level also sets how many web searches the pipeline expects to run. Minimal searches least, Maximal most. Once the job finishes, the log records the tokens and the cost actually spent, so you can compare the estimate against reality on your own archive rather than trusting a number on a marketing page.
Two levers if a bill runs higher than you want: switch the model (Gemini 3.5 Flash is roughly half the input rate of Claude Sonnet 5, and its first 5,000 grounded searches each month are free), or drop a level. Neither is a subscription change, because Unstale never meters rewrites.
FAQ
Do I need a paid plan to use AI rewrites?
No. The free plugin on wordpress.org performs real AI rewrites at the Minimal and Balanced levels using your own API key. Unstale Pro adds the Strong and Maximal levels, scheduled automation, bulk refresh and per-category rules. See the pricing page.
Where is my API key stored?
In WordPress, not in Unstale. You still bring your own key, but since WordPress 7.0 providers and their credentials are managed by the core, in Settings > Connectors. Unstale hands its prompts to the WordPress AI Client, which routes them to the provider you connected there, so the plugin never sees, stores or transmits your key. If you used an older version of Unstale, the keys it had stored are deleted automatically when you update.
Who pays for the AI usage?
You do, directly to Anthropic, OpenAI or Google on your own account. Unstale charges a licence fee only, so there are no credits, no rewrite quota and no markup on tokens.
Will a refresh break my URLs or my rankings?
No. Republishing keeps the post URL, the slug and the native WordPress revision history, so any refresh can be rolled back from the post editor. Nothing is published until you approve the diff, unless you explicitly enable full-auto mode.
Can I see the cost before a refresh runs?
Yes. Unstale shows an estimate before every run, per article and per batch, based on article length, the level you picked, the current rates for your model and the expected number of web searches. The job log then records the tokens and the actual cost.
What are the requirements?
WordPress 7.0 or newer and PHP 8.1 or newer. WordPress 7.0 is the floor because Unstale runs on the AI Client that ships with it. Unstale works with both Gutenberg and the Classic editor, on posts, pages and public custom post types.
The free plugin runs the full pipeline on your own key, up to the Balanced level. Install it, refresh one stale post and read the diff before deciding anything.