# Software Adoption Explorer > Open-source usage signals: weekly downloads, growth and version adoption for npm, PyPI, crates. Fetches public download statistics for an npm, PyPI or crates.io package, aggregates them into weekly totals with 4-week growth and long-run change, shows which versions are actually downloaded (npm last week, crates.io last 90 days) and adds dependent counts from deps.dev. Paste saved API JSON to analyse offline. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://softwareadoptionexplorer.usefulweb.site/ (interactive tool at https://softwareadoptionexplorer.usefulweb.site/tool) - JSON API: POST https://softwareadoptionexplorer.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://softwareadoptionexplorer.usefulweb.site/api/v1/tool) - OpenAPI: https://softwareadoptionexplorer.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://softwareadoptionexplorer.usefulweb.site/mcp - tool `software_adoption_explorer` ## Inputs - ecosystem (select): Registry - package (text): Package name - includeDependents (boolean): Look up dependents on deps.dev - pastedDownloads (textarea): Pasted download JSON (offline) - npm /downloads/range/…, pypistats /overall or crates.io /crates//downloads. - pastedVersions (textarea): Pasted version JSON (optional) - npm /versions//last-week, or crates.io /crates/ (maps version ids to numbers). ## Method - npm: GET https://api.npmjs.org/downloads/range/last-year/ (daily downloads) and /versions//last-week (downloads per version over the last 7 days). - PyPI: GET https://pypistats.org/api/packages//overall?mirrors=false (daily downloads without mirrors, ~180 days) and /recent. pypistats has no per-version endpoint, so version adoption is not available for PyPI. - crates.io: GET https://crates.io/api/v1/crates/ (metadata, version ids, all-time downloads) and /crates//downloads (last 90 days per version plus "extra" downloads of older versions); the platform fetcher sends an identifying User-Agent, which crates.io requires. - Daily values are summed into Monday-start weeks; weeks with fewer than 7 days of data are marked partial and excluded from growth. Growth = last 4 complete weeks vs the 4 before; long-run change = last 4 vs first 4 complete weeks. - Version shares = downloads of a version ÷ all version downloads in the same window; majors group 1.x, 2.x … (0.y releases are grouped per minor). "Highest stable" is the largest non-prerelease semver. - Dependents: deps.dev v3 package lookup → default version → v3alpha …:dependents, i.e. packages in the same ecosystem whose resolved dependency graph contains exactly that version (direct + indirect). Older versions' dependents are not included. - Downloads include CI systems, mirrors and bots; they are a usage signal, not a user count.