npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@algosoftltd/aso-mcp

v0.6.0

Published

App Store Optimization MCP server — keyword traffic and difficulty, rankings, and per-country competitor discovery from Apple's public App Store data. No account, no API key.

Readme

@algosoftltd/aso-mcp

An MCP server for App Store Optimization: keyword traffic and difficulty, search rankings, and per-country competitor discovery — built entirely on Apple's public App Store data.

No account. No API key. Nothing to configure.

npx @algosoftltd/aso-mcp

What it answers

"lecture note taker"   traffic 73/100   difficulty 69/100   your rank #35
   suggested from "lectu" at #5 of 10 · median 16,263 ratings in the top 10

"ai note taker"        traffic 95/100   difficulty 82/100   not in top 100
   suggested from "ai n" at #1 of 10 · median 21,390 ratings in the top 10

Setup

None. Add it to any MCP client:

{
  "mcpServers": {
    "aso": {
      "command": "npx",
      "args": ["-y", "@algosoftltd/aso-mcp"]
    }
  }
}

Tools

| Tool | Answers | | --- | --- | | keyword_scores | How much traffic a keyword carries, how hard it is, and where your app ranks | | suggest_keywords | Apple's own autocomplete for a prefix — what people actually type | | search_rankings | Which apps rank for a term, in order | | app_rank | Where one app sits for a list of terms | | find_competitors | Which apps keep appearing across your terms, in a given country | | competitor_keywords | Terms a rival is likely targeting, from its public name | | get_app | Public details for any app: ratings, genres, price, dates |

Every tool takes a country (89 supported). An unknown one is refused, never silently answered with US data — plausible-looking numbers from the wrong market are worse than an error.

Country matters more than people expect

The same two search terms, run in two storefronts:

| | United States | Germany | | --- | --- | --- | | 1 | Otter Transcribe Voice Notes — 72,463 ratings | Notability: Notizen, PDF, Docs — 66,812 | | 2 | Notability: AI Notes & Planner — 452,139 | Goodnotes: KI Notizen, PDF app — 350,180 | | 3 | Coconote - AI Note Taker — 16,263 | Otter Transcribe Voice Notes — 467 |

Otter is a giant in the US and a rounding error in Germany. Any single "competitor list" is really one market's list wearing a flag, which is why find_competitors is per-country by construction.

What the scores are, and are not

They are ordinal comparators, not search volumes.

A paid ASO tool sells you "12,400 searches a month", modelled from a proprietary panel. Nothing free can produce that number and this does not pretend to. What it produces instead:

  • Traffic — Apple only autocompletes what people actually search, and it orders suggestions by its own popularity model. So the server types your term one character at a time and finds the shortest prefix at which Apple already suggests it, and how high. A term surfacing from four characters at position one is searched far more than one needing eleven characters to appear at position nine.
  • Difficulty — how strong the apps already ranking are: median rating count on a log scale (the only free proxy for install base), how many put the term in their app name (deliberate targeting, which Apple weights heavily), and how many are free. Median rather than mean, so one giant at position one doesn't make a reachable field look impossible.
  • Opportunity — traffic ÷ difficulty, for sorting a candidate list. Always reported beside its two components, because a single blended number is the easiest thing in an ASO report to mistake for a measurement.

Every result carries the evidence behind its score — the prefix, the rank, the sample size, the median ratings. A number out of 100 with nothing behind it is unarguable; the same number with its working can be checked and disagreed with.

Use them to rank candidates and pack a keyword field. Do not use them to forecast installs.

Data sources, and how solid each is

| Source | Status | | --- | --- | | itunes.apple.com/search, /lookup | Apple's documented Search API. Stable, public, rate-limited near 20 calls/minute. | | App Store autocomplete | Undocumented. The only free source of what people type. Can change without notice. |

Because the second is undocumented, every path degrades rather than throwing — a keyword report missing its popularity column is worth reading; one that dies is not.

The autocomplete endpoint needs an X-Apple-Store-Front header. Without it, it answers 200 with an empty list — not an error — which is why this data appears unavailable to anyone who tries it once.

Rate limits

Apple allows roughly 20 searches a minute per IP. The server serializes every outbound call with a minimum gap and caches results for six hours, because a keyword set re-queries the same prefixes constantly ("lectu" is hit by every keyword starting with it). Scoring ten keywords costs roughly thirty requests, so it takes a minute or two — that is the budget, not a stall. Rate-limit rejections come back as code: "rate_limited" so a caller can tell "wait" from "broken".

Development

npm install
npm run build     # one self-contained ESM file in dist/
node dist/index.js

Licence

MIT — see LICENSE. Copyright © 2026 AlgoSoft Technologies Limited.