What does the key enable?
Five features, all bring your own key.
Each feature is a single completion per run. The creative analysis runs in the background after you start it, so leaving the page does not cancel it. It is reused while the icon, the screenshots, the competitor icons and
AI_MODEL are unchanged, so analyzing an unchanged listing again costs nothing, and a finished analysis records today’s audit score. The nightly score snapshot reads the stored observations and never calls the model.
How many AI calls can a workspace make?
Every AI call spends one call from a monthly allowance that the whole workspace shares. The allowance of each plan is listed on Pricing. It renews at 00:00 UTC on the 1st of every month, and unused calls do not carry over.
Two clicks on the same button while the first is still working spend one call. A creative analysis that retries in the background is still one call.
The settings page shows the calls used this month and the renewal date, and every AI button shows how many are left. When none are left the buttons are disabled until the 1st, and the API answers
429 with an aiAllowance object; see Errors.
Upgrading applies the larger allowance at once and keeps what was already used. Moving to a smaller plan keeps the usage too, so a workspace already past the smaller allowance waits for the 1st.
Self hosted
A self hosted instance has no allowance unless you setAI_CALLS_PER_MONTH, which applies to every workspace on the instance. Set it if registration is open, because each account that registers gets a workspace of its own and spends your provider key. See Configuration.
What happens without a key?
The product is fully usable. Precisely four things differ.
Every other audit check still scores. The creative checks are listed as unanswered rather than guessed, and the audit weights each factor by how much of it was measured, so they neither raise nor lower the score. See Run an ASO audit.
Configure it
All four live in
apps/api/.env. Restart the API after changing them.
Use an OpenAI compatible provider
SetOPENAI_BASE_URL to the address of any API that speaks OpenAI’s chat completions protocol, such as OpenRouter, a gateway like LiteLLM, or a model server on your own machine. Everything else stays the same: the key goes in OPENAI_API_KEY, the model in AI_MODEL exactly as the provider names it, and every call spends the same allowance. Restart the API after changing them.
http:// or https:// and must not contain a user name, a password or a # fragment. The API refuses to start otherwise and names the variable. Use https for any provider outside your own machine, because the key and every prompt travel in the request.
The same variable reaches OpenAI’s own regional hosts. https://eu.api.openai.com/v1 keeps processing in the European Union for a key from an EU project, and asobeast still treats it as OpenAI.
What the provider has to support
How common providers fit
These notes follow each provider’s own documentation. Check it for the model you pick, because support often varies by model rather than by provider.
Anthropic’s OpenAI compatibility endpoint for Claude (
https://api.anthropic.com/v1/) ignores response_format, so Claude never sees the schema and its answers often fail the check. Anthropic also describes that endpoint as a way to test models, not a production path. DeepSeek’s API offers JSON mode but not a JSON schema, so its answers often fail the schema check. The Gemini OpenAI compatibility layer documents images only as embedded data, so the creative analysis does not run there.
Reaching a model on the Docker host
Inside the Compose stackslocalhost is the API container itself, not your machine. Docker Desktop on macOS and Windows resolves host.docker.internal to the host. On Linux, add the name in a docker-compose.override.yml next to docker-compose.yml:
OLLAMA_HOST=0.0.0.0.
What the interface says
The audit’s note beside Analyze creative, Analyze again and Try again says the image links go to OpenAI when the address is OpenAI’s, and to “the AI provider this instance is configured with” otherwise, so nobody reading it learns your provider’s address. Error messages follow the same rule.What is AI never allowed to do?
It may only summarize an action that already exists. It can never create, rank, re order or suppress one, and the explanation prompt is told it may not change the recommendation. The stored summary is labelled as an AI summary of deterministic evidence, so a reader can always tell which part of the card is computed and which part is prose. See Work the Action Center. A review reply draft is a suggestion the composer holds until you copy it, and the kept reply records that it came from the model. Metadata drafts are constrained the same way. Every draft is linted again on the server and clamped to the store field limit, and asobeast has no write path to the stores, so a draft ends at a copy button rather than being published.What data leaves your deployment?
The creative analysis sends the least data that answers its checks.
The provider downloads the images from the store CDNs itself; asobeast never proxies image bytes. Competitor icon URLs are public store assets.
The action explanation prompt receives the app’s store, country and title, the rule, the priority, the impact and the evidence object, and nothing else.
The metadata draft prompt receives the store, the listing’s current metadata, up to 25 tracked keywords of the home market with their scores and coverage, competitor titles and your instructions. A draft for an additional language also sends the language and the codes of your markets that read it.
The review translation prompt receives the target language and the title and text of the one review being translated, and nothing else.
The review reply prompt receives the store, the app name, the one review being answered (its score, title, text, version, date, author and the developer reply Google Play shows), the listing’s current version and release notes, the app’s reply guidelines, up to three of the app’s most recent Google Play replies as examples of your voice, the tone and your instruction line. Never another review and never other workspaces’ data.
Troubleshooting
- The AI endpoints answer 409. No key is configured, or the API was not restarted after setting it.
- The audit button is missing but the key is set. Confirm the key reached the API container.
docker compose configshows the resolved environment. - The model rejects the request.
AI_MODELmust accept images and structured outputs. A text only model fails the creative analysis while drafts still work. - The API refuses to start and names OPENAI_BASE_URL. The address is not an http or https URL, or it contains a user name, a password or a
#fragment. Put the key inOPENAI_API_KEYinstead. - Every call reports that the provider does not offer the model.
AI_MODELstill holds an OpenAI model name, orOPENAI_BASE_URLis missing the API path, such as the/v1at its end. Set the model to the name your provider uses and the address to the one its documentation gives. - A call reports that the provider does not offer the model for this request. The provider’s own reason is in the parentheses. “No endpoints found that support image URLs” comes from the creative analysis, the one feature that sends images, and means the model takes images only as embedded data; pick one that downloads image links.
- Could not reach the AI provider. The API container cannot open the address. From the Compose stacks,
localhostis the container; see Reaching a model on the Docker host.
OPENAI_BASE_URL naming a provider other than OpenAI, each message says “the AI provider” where it says “OpenAI” here, and “The OpenAI key” reads “The API key”. When such a provider does not offer the model, the message asks to check both AI_MODEL and OPENAI_BASE_URL, and carries the provider’s reason in parentheses when it gives one. Only transient failures are retried, once.
Related
Run an ASO audit
What the AI pass adds and what it leaves alone.
Optimize listing metadata
Where drafts appear.