Compare packages by downloads
API · /npmstats-api
npm Download Stats API
How popular is that npm package? Get download counts and trends for any npm package straight from npm's public download API. Pull the total downloads over a period (last day, week, month, year or any custom YYYY-MM-DD:YYYY-MM-DD range), the full per-day download time series, the monthly totals over the last year to spot growth or decline, and compare several packages side by side ranked by downloads (up to 128 at once, scoped @org/name packages supported). Every call is live (no cache). 5 endpoints. Built for popularity dashboards, package-comparison pages, trend charts, dependency-health scoring and "which library won" analyses. Distinct from an npm registry-metadata lookup — this is the download time series. No upstream key, no cache.
API health
healthy- Uptime
- 100.00%
- Server probes · 24h
- Avg latency
- 487 ms
- Server probes · 24h
- Subscribers
- 3,035
- active
- Total calls
- 75
- last 7 days
Pricing
Pick a tier — billed monthly, cancel anytime.
Free
Free
- 1,950 calls / month
- 2 requests / second
- Hard cap (429 above quota, no overage)
- 1,950 calls/month
- 2 req/sec
- Downloads, range, compare, trends
- No credit card
Starter
€7.50 /month
- 43,000 calls / month
- 8 requests / second
- Hard cap (429 above quota, no overage)
- 43k calls/month
- 8 req/sec
- Package comparison
- Email support
Pro
€25.00 /month
- 225,000 calls / month
- 20 requests / second
- Hard cap (429 above quota, no overage)
- 225k calls/month
- 20 req/sec
- Popularity dashboards
- Priority support
Mega
€59.00 /month
- 1,100,000 calls / month
- 50 requests / second
- Hard cap (429 above quota, no overage)
- 1.1M calls/month
- 50 req/sec
- Analytics at scale
- Dedicated SLA
Built by
Related APIs
Other APIs with overlapping tags.
Semver API
A Semantic Versioning (SemVer 2.0.0) toolkit as an API. Parse a version string into its major, minor, patch, prerelease and build parts; compare two versions; test whether a version satisfies an npm-style range (^1.2.3, ~1.4, >=2 <3, 1.x); increment a version to the next major, minor, patch or prerelease; and filter a list of versions by a range to find which match and the highest and lowest satisfying. Powered by the canonical node-semver. Perfect for dependency and release tooling, CI gates, update checkers, compatibility rules and package dashboards. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 6 endpoints. Distinct from package-registry lookups and vulnerability databases.
api.oanor.com/semver-api
Bundle Size API
How big is that npm package? Get the minified and gzipped bundle size of any npm package — plus its dependency count, the size contributed by each dependency, peer dependencies, whether it ships an ES module and whether it is side-effect-free — in a single call. Pin a version ([email protected]) or get the latest, and pull the bundle size across a package's recent versions to spot regressions over time. Powered by the public Bundlephobia service; results are live (no cache). 3 endpoints. Built for frontend performance budgets, bundle-size CI checks, "cost of adding this dependency" tooling, and dependency dashboards. Distinct from a plain npm registry lookup (metadata) or a dependency-graph service — this measures actual shipped bytes. No upstream key, no cache.
api.oanor.com/bundlephobia-api
npm Registry API
Everything about npm packages in one clean API. Look up a package’s latest metadata — version, description, license, homepage, repository, author, keywords, dist-tags, dependencies and maintainers — list its full version history with release dates, pull download statistics for the last day, week, month or year, and search the registry across more than three million packages. Sourced live from the public npm registry and returned as tidy JSON through a fast, reliable API. Ideal for developer dashboards and tooling, package and dependency analytics, supply-chain and security checks, CI/CD and documentation sites.
api.oanor.com/npm-api
RC Servo & PWM API
RC servo and PWM maths as an API, computed locally and deterministically — the pulse-width, angle and duty-cycle numbers a robotics, RC or embedded developer drives a servo with. The angle endpoint turns a pulse width into the servo angle: a hobby servo reads the width of the pulse (not a duty cycle), so the standard 1000–2000 µs maps linearly across the travel with 1500 µs at centre — angle = (pulse − min) ÷ the min-to-max span × the travel — and it flags when a pulse asks for more than the configured range so you do not drive the servo into its mechanical stops. The pulse endpoint runs it the other way, giving the pulse width a microcontroller should write for a target angle (90° is 1500 µs on a 1000–2000 µs / 180° servo), exactly what an Arduino-style servo library computes under the hood. The duty endpoint converts a pulse and a refresh frequency into the PWM period and duty cycle: a 50 Hz servo frame is 20 ms, so a 1500 µs pulse is just 7.5 % duty — the value a timer peripheral needs — and faster frames for digital servos or multirotor ESCs (e.g. 333 Hz) change it. Everything is computed locally and deterministically, so it is instant and private. Ideal for robotics and RC firmware, microcontroller and embedded tools, drone and animatronics projects, and maker calculators. Pure local computation — no key, no third-party service, instant. 3 compute endpoints. For stepper steps-per-mm use a stepper-motor API.
api.oanor.com/servo-api
Frequently asked questions
Quick answers about pricing, quotas, and integration.
How do I get an API key for npm Download Stats API?
What's the rate limit for npm Download Stats API?
How much does npm Download Stats API cost?
Can I cancel my subscription anytime?
Is npm Download Stats API GDPR-compliant?
Pick an endpoint from the list on the left to see its details and try it.
Code snippets
Sign up to get an API key, then call any path under your slug.
curl https://api.oanor.com/npmstats-api/SOME_PATH \
-H "x-oanor-key: oanor_test_..."
const res = await fetch("https://api.oanor.com/npmstats-api/SOME_PATH", {
headers: { "x-oanor-key": "oanor_test_..." }
});
const data = await res.json();
$ch = curl_init("https://api.oanor.com/npmstats-api/SOME_PATH");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["x-oanor-key: oanor_test_..."]);
$response = curl_exec($ch);
import requests
r = requests.get(
"https://api.oanor.com/npmstats-api/SOME_PATH",
headers={"x-oanor-key": "oanor_test_..."},
)
print(r.json())
Ratings
Sign in to rate.
No reviews yet.
Discussion
Ask questions, share usage tips, get answers from the provider and other developers. Public — anyone can read.
Sign in to start a thread or reply.
Sign inNew thread
·
-
Provider answer
🔒 This thread is locked — no new replies.
-
·
- No threads yet — start the discussion.
Support
Private 1:1 support with the provider — billing questions, integration issues, account problems. Only you and the provider team can see these threads.
Sign in to open a support ticket.
Sign inOpen new ticket
Describe what you need help with. The provider team gets an email and replies on the ticket page.
-
·
Urgent - No tickets yet for this API.