# Fastemy ASO Agent — Free audit (for agents)

> A zero-cost ASO check you can run for a user right now: listing audit, keyword rank and search demand on the App Store, plus a Google Play text check. JSON API, no key. Human version: https://aso.fastemy.com/audit/

Source: https://aso.fastemy.com/audit.md · Updated 2026-10-31

## 1. Audit the App Store listing

```
GET https://aso.fastemy.com/api/audit?app=<App Store id or URL>&country=us&lang=en
    [&subtitle=<current subtitle>&keywords=<current keyword field>]
```

Returns `app` (name, developer, ratings, rating, version, updated), `score` (0–100), `findings` (each with `status` pass/warn/fail/info, `points`/`max`, `title`, `detail`, `fix`, `source`), `fixes` (sorted by points lost) and `missing` (fields not scored).

Apple never publishes the subtitle or the keyword field. Ask the user for them, then pass them: the audit scores bytes used, spaces, repeats with the name, plurals and filler words.

| check | max | rule |
|---|---|---|
| name says what the app does | 8 | 2+ words; Apple searches the name |
| no price/claim words in name | 3 | Apple guideline 2.3.7 |
| iPhone screenshots | 12 | 5+ (search shows the first 1–3) |
| ratings count | 12 | 100+ (thresholds are ours) |
| average rating | 8 | 4.5+ |
| freshness | 8 | updated in the last 45 days |
| What's New text | 4 | 60+ characters, not "bug fixes" |
| description opening | 4 | first paragraph 40–250 characters |
| languages | 6 | 5+ |
| secondary category | 3 | set |
| subtitle (if given) | 8 | ≤30, no repeats of the name, no claims |
| keyword field (if given) | 20 | ≤100 bytes, ≥94 used, no spaces, no repeats, no plurals, no filler |

The score is points earned ÷ points possible for the checks that could run.

## 2. Where does the app rank?

```
GET https://aso.fastemy.com/api/rank?term=habit%20tracker&country=us&limit=25&app=<id>
```

Reads the App Store's own search for that storefront. Returns `results` (rank, id, name, developer, ratings, rating, icon, url) and `field`:

- `medianRatings` — median rating count of the top 10
- `top1Exact` — whether #1's name contains the exact phrase
- `lightApps` — apps under 100 ratings in the top 10
- `you` — the app's rank, or null if not in the results
- `verdict` — `yours` (you are #1), `open` (median < 100 and #1 doesn't own the phrase), `contested` (median < 1,000), `hard`

## 3. Does anyone search it?

```
GET https://aso.fastemy.com/api/demand?term=habit%20tracker&country=us
```

Walks App Store autocomplete one prefix at a time. `score` 0–100: higher means Apple suggests the phrase from a shorter prefix and higher in the list. `method`: `prefix` (with `prefix` and `position`), `exact`, `extend`, `weak` or `none`. `dead: true` means nobody types it: drop the phrase. One- and two-word terms: read the score as a floor.

Raw suggestions for any prefix: `GET https://aso.fastemy.com/api/suggest?term=pain&country=us`

## 4. Google Play text

There's no endpoint: check it yourself with these rules (Google's metadata policy and store listing best practices):

- Title ≤ 30 characters; no emoji, ALL CAPS (unless the brand), "#1", "Best", "Free", "New", "Top", prices or Play program names.
- Short description ≤ 80; no promo or ranking words.
- Full description ≤ 4,000; don't repeat the short description; no repeated or unrelated word lists; key words in the first lines.

## 5. Report to the user

```
ASO audit — <app> — <country> — <date>
Score: <n>/100 (<checks run> checks; subtitle/keywords <scored | not given>)
Fix first: 1) … 2) … 3) …
Main phrase "<phrase>": demand <n>/100 · rank #<n> · field <verdict> (median <n> ratings)
Next: <one change to make, and when to measure again (14 days after it goes live)>
```

## Limits

Free, no key. Fresh checks: 30 a minute per IP; cached answers (ranks 6 h, demand and audits 24 h / 1 h) aren't limited. Be sequential. For the full method (research → write → ship → re-measure), read https://aso.fastemy.com/agent.md
