Skip to main content
The SEO playbook sits on top of an SEO project (/dashboard/seo) and uses what Appeeky already knows about your app — its store listing, its competitors and their reviews — to decide which pages to build and what to put on them. It is four tools that feed each other: The fifth playbook piece — AI Visibility → Sources cited → Fixes → re-measure — lives under /v1/ai-visibility and is documented in AI Visibility.
All endpoints require an SEO project and are scoped to the authenticated user. Reads and “track” writes cost 0 credits. The routes that buy provider data or run an LLM (seed/preview, complaints/mine, briefs POST, templates/expand) cost 2 credits each. See Limits below.

Where the app context comes from

Every tool resolves the project’s app context the same way, in order of preference:
  1. My Apps — when the project is linked to a My Apps entry (userAppId), the app name, description, category, icon and its My Apps competitors are used. Competitors with a store id are the ones the complaint miner can review-mine.
  2. Store lookup — otherwise seo_projects.app_id is looked up on the App Store / Play Store.
  3. Project fields — name and product description as a last resort.
Competitor brand names for seeds and templates additionally include the SEO project’s own Competitors tab (seo_competitors): the label you gave, or a brand derived from the domain (app.sensortower.comsensortower).

Alternative / vs seeds

Preview candidates

Builds the candidate list and prices it with one metrics call. Nothing is tracked yet. Body: Patterns generated per competitor: {competitor} alternative, {competitor} alternatives, apps like {competitor}, {competitor} vs {app}, {app} vs {competitor}, {competitor} free alternative. Per category: best {category} apps, best {category} app, {category} app alternatives, free {category} apps. Plus {app} alternative.
Response (200 OK):
Candidates are sorted by volume. alreadyTracked is true when the keyword is already active in the project.

Track selected candidates

Tracked keywords get source: "template_seed" and the tag alt-vs. Returns { keywords, added } (201).

Complaint miner

1–2★ reviews are people describing, in their own words, the problem they’d Google. The miner pulls them for a set of apps, clusters them with an LLM into themes, and returns the queries to rank for.

Start a mine

At most 15 apps are mined per run (explicit apps first, then competitors, then own app). Names are resolved from the store up front so a queued mine already shows readable app names. Response (201 Created):
mode is queued when a background worker is configured (poll GET /v1/seo/complaints/:id until status is done or failed), inline otherwise (the response already contains the clusters). Errors: no_apps (400) when nothing could be selected, dispatch_failed (502) when the job could not be queued.

Read mines

A finished mine contains up to 10 clusters:
suggestedPageType is one of problem, alternative, vs, roundup, use_case.

Track queries from a mine

Pass at least one of the two. Keywords get source: "complaint" and the cluster theme as a tag. Metrics are fetched for the tracked queries in the same call.

Page briefs

A brief is everything a writer (or an LLM) needs to produce one page, generated from the keyword’s SERP context, your app description and the competitors it should mention honestly.

Generate

Response (201 Created)brief.brief has this shape:

List, read, update, delete

Marking a brief published with a publishedUrl is what lets the rank tracker attribute later movement to that page.

Programmatic templates

Presets

Returns the built-in variable presets (personas, platforms, integrations, modifiers, goals, languages), example templates, and autoVariables{app}, {category} and {competitor} filled from the project’s app context.

Expand

Resolution order per variable: explicit variables → chosen preset → any preset for that variable → auto variable. Missing values return missing_variables (400). Response (200 OK):
Rows are sorted by volume; zeroVolume rows are the pages you should not build.

Track expansions


Limits

Access

The whole SEO module requires a Startup or Agentic Scale web plan (or an explicit seo beta grant). Indie Dev and API-only plans get 403 on every /v1/seo/* route.

Credits

Credits are deducted from the general bucket for both API-key and dashboard (web) calls.

Provider spend

The real cost behind these calls is DataForSEO (keyword metrics) and the LLM (clustering, briefs). Every spend is recorded per project in the usage ledger and shows up as Spent today on the project’s Overview tab. Typical costs:
The project’s dailyProviderBudgetCents (default 200 = $2/day) pauses scheduled rank scans once exhausted. It does not currently block on-demand playbook calls — a seed preview, mine or brief still runs when the daily budget is spent. Credits are the only hard cap on these routes.

Hard caps

There is no per-plan cap on the number of mines, briefs or tracked SEO keywords beyond the credit balance and the caps above.