JSR Registry Scraper avatar

JSR Registry Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
JSR Registry Scraper

JSR Registry Scraper

Search and scrape JSR (jsr.io) - the JavaScript Registry - for package metadata, quality scores, GitHub links, runtime compatibility, scopes, and dependents. Pure public API, no auth.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Search and scrape JSR — the JavaScript Registry (Deno's modern package registry for JavaScript and TypeScript) — for package metadata, quality scores, GitHub links, runtime compatibility, scopes, and dependents. Pure public API, no auth, no proxy.

What this actor does

  • Seven modes: search, byPackages, byScope, dependents, dependencies, versions, trending
  • Rich metadata: quality score, GitHub repo link, runtime compatibility (Deno/Node/Browser/Cloudflare Workers/Bun), version/dependency/dependent counts
  • Optional enrichment: license, provenance, and score-breakdown details per package (mode=byPackages, trending)
  • Filters: min quality score, runtime compatibility, exclude archived, require GitHub link
  • Empty fields are omitted — every field in the output is real, populated data

Output fields

  • packageId (@scope/name), scope, name, description
  • githubOwner, githubRepo, githubUrl
  • compatibleRuntimes[] — subset of deno/node/browser/workerd/bun
  • versionCount, dependencyCount, dependentCount, score (0-100)
  • latestVersion, updatedAt, createdAt, whenFeatured, isArchived, readmeSource
  • packageUrl, latestVersionUrl
  • With enrichDetails=true (mode=byPackages, trending): hasReadme, hasReadmeExamples, allEntrypointsDocs, allFastCheck, hasProvenance, hasDescription, atLeastOneRuntimeCompatible, multipleRuntimesCompatible, percentageDocumentedSymbols, scoreTotal, license, latestVersionYanked, usesNpm, hasProvenanceLog
  • mode=trending only: statsCategory (newest/updated/featured), statsVersion (for updated category)
  • recordType: "package", scrapedAt

scope record (mode=byScope, emitted once per scope)

  • scope, description, createdAt, updatedAt, scopeUrl
  • recordType: "scope", scrapedAt

dependent records (mode=dependents)

  • packageId, scope, name, dependentVersions[], dependentTotalVersions, packageUrl, dependencyOf
  • recordType: "dependent", scrapedAt

dependency records (mode=dependencies, of the package's latest version)

  • kind (jsr or npm), name, constraint (semver range), path (sub-path export, if any), dependencyUrl
  • dependencyOf (@scope/name), dependencyOfVersion
  • recordType: "dependency", scrapedAt

version records (mode=versions, full publish history of a package)

  • packageId, scope, name, version, versionUrl
  • publishedByName, publishedByGithubId, publishedByAvatarUrl
  • yanked, usesNpm, hasProvenanceLog, readmePath, publishedAt
  • recordType: "version", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / byPackages / byScope / dependents / dependencies / versions / trending
searchQuerystringFree-text query (mode=search)
packagesarrayPackage specifiers, e.g. @std/testing (mode=byPackages, dependents, dependencies, versions)
scopestringScope name without @, e.g. std (mode=byScope)
statsCategorystringallall / featured / newest / updated (mode=trending)
minScoreintDrop packages below this quality score (0-100)
runtimestringOnly keep packages compatible with this runtime
excludeArchivedboolfalseDrop archived packages
requireGithubboolfalseOnly keep packages with a linked GitHub repo
enrichDetailsbooltrueFetch score-breakdown + license per package (mode=byPackages, trending)
maxItemsint50Hard cap (1–1000)

Example: search for well-maintained Deno-compatible testing packages

{
"mode": "search",
"searchQuery": "testing",
"runtime": "deno",
"minScore": 70,
"excludeArchived": true,
"maxItems": 50
}

Example: lookup specific packages with full enrichment

{
"mode": "byPackages",
"packages": ["@std/testing", "@oak/oak", "@hono/hono"],
"enrichDetails": true
}

Example: browse an entire scope

{
"mode": "byScope",
"scope": "std",
"maxItems": 100
}

Example: find what depends on a package

{
"mode": "dependents",
"packages": ["@std/testing"],
"maxItems": 100
}

Example: list what a package depends on

{
"mode": "dependencies",
"packages": ["@oak/oak"]
}

Example: full version/publish history of a package

{
"mode": "versions",
"packages": ["@std/testing"],
"maxItems": 100
}
{
"mode": "trending",
"statsCategory": "featured",
"enrichDetails": true
}

Use cases

  • Dependency research — audit quality scores, licenses, and runtime compatibility before adopting a package
  • Ecosystem analysis — map dependents of a popular package to gauge its influence
  • Security / supply-chain review — check for GitHub provenance, archived status, and npm interop
  • Package discovery — find packages by keyword filtered to your target runtime (e.g. Cloudflare Workers)
  • Registry monitoring — track new/updated packages within a scope over time

FAQ

Do I need a login or API key? No — this uses JSR's own public api.jsr.io REST API, which requires no authentication.

What is JSR? jsr.io is a modern package registry for JavaScript/TypeScript built by the Deno team, designed to work across Deno, Node.js, Bun, browsers, and Cloudflare Workers, with first-class TypeScript support and automatic API documentation.

What's the difference between score and the enrichDetails breakdown fields? score (0-100) is a single quality metric always included. The breakdown fields (hasReadme, allFastCheck, percentageDocumentedSymbols, etc.) explain what contributes to that score — only fetched in byPackages mode with enrichDetails=true.

Why do some packages have no score or latestVersion? JSR scopes can be reserved before any version is published — such packages have versionCount: 0 and legitimately lack a score, license, or GitHub link. These fields are omitted rather than filled with placeholders.

How fresh is the data? Real-time — every run queries JSR's live API directly.

Why does dependencyUrl sometimes point to npmjs.com and sometimes to jsr.io? JSR packages can depend on either other JSR packages or npm packages directly (mode=dependencies). kind: "jsr" deps link to jsr.io; kind: "npm" deps link to npmjs.com. Note npmjs.com serves a bot-challenge page to non-browser HTTP clients (curl), but the URL itself is correct and opens normally in a browser.