# npm

> Look up anything on the public npm registry. Read a package's details, licence and maintainers, walk its release history, open one version for its dependencies and tarball, check what each release channel points at, search npm with its own quality and popularity scores, and track download counts by day, by version or against other packages. No account or API key is required.

App · Code Repositories · 11 actions. Web page: https://docs.lodol.com/docs/integrations/npm

## Actions

### Compare package downloads

Put several packages' downloads side by side over the same period, ranked, each with its share of the group's total. Use it to settle 'which of these is actually used?' in one step. A name npm has never seen is reported separately rather than failing the comparison, so one typo does not lose the answer.

**Inputs**

- Packages (`packages`, list, required): The packages to compare, up to 256. Scoped names include the scope.
- Period (`period`, text): How far back to count. Ignored when a start and end date are set. Defaults to the last 7 days. One of: `last-day` (Last day), `last-week` (Last 7 days), `last-month` (Last 30 days), `last-year` (Last 365 days). Default: `last-week`.
- Start date (`start_date`, date): The first day to count, for a period the list above does not cover. Set both dates or neither. npm's counts begin on 2015-01-10 and one query may span at most 18 months.
- End date (`end_date`, date): The last day to count. Set both dates or neither.
- Sort by (`sort`, text): How to order the packages in the answer. One of: `downloads` (Most downloaded first), `fewest` (Least downloaded first), `name` (Package name, A to Z), `given` (The order the packages were listed in). Default: `downloads`.

**Outputs**

- `count` (number)
- `end` (text)
- `leader` (text)
- `not_found` (list)
- `packages` (list)
- `period` (text)
- `requested_count` (number)
- `requests_made` (number)
- `sort` (text)
- `start` (text)
- `total_downloads` (number)

**Example output**

```json
{
  "count": 3,
  "end": "2026-08-22",
  "leader": "express",
  "not_found": [],
  "packages": [
    {
      "downloads": 129352221,
      "npm_url": "https://www.npmjs.com/package/express",
      "package": "express",
      "rank": 1,
      "share_percent": 86.7
    },
    {
      "downloads": 11676335,
      "npm_url": "https://www.npmjs.com/package/fastify",
      "package": "fastify",
      "rank": 2,
      "share_percent": 7.8
    },
    {
      "downloads": 8156869,
      "npm_url": "https://www.npmjs.com/package/koa",
      "package": "koa",
      "rank": 3,
      "share_percent": 5.5
    }
  ],
  "period": "last-week",
  "requested_count": 3,
  "requests_made": 1,
  "sort": "downloads",
  "start": "2026-08-16",
  "total_downloads": 149185425
}
```

### Get a package

Look up an npm package: what it does, who maintains it, what licence it carries, where its source and issue tracker live, which release channels it publishes to, how many versions it has, and when it was first and last published. This is the overview of the package itself; use 'Get a package version' for one release.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Include readme (`include_readme`, true/false): Turn on to return the start of the package's readme alongside the rest, up to 4,000 characters. Off by default, because a readme is long and most steps do not need it. Default: `false`.

**Outputs**

- `author` (text)
- `bugs_url` (text)
- `created` (text)
- `deprecated_reason` (text)
- `description` (text)
- `dist_tags` (list)
- `first_published` (text)
- `homepage` (text)
- `is_deprecated` (true/false)
- `is_scoped` (true/false)
- `keywords` (list)
- `last_published` (text)
- `latest_version` (text)
- `license` (text)
- `maintainer_count` (number)
- `maintainers` (list)
- `modified` (text)
- `name` (text)
- `npm_url` (text)
- `prerelease_count` (number)
- `readme` (text)
- `readme_truncated` (true/false)
- `repository_url` (text)
- `scope` (text)
- `version_count` (number)

**Example output**

```json
{
  "author": "TJ Holowaychuk",
  "bugs_url": "https://github.com/expressjs/express/issues",
  "created": "2010-12-29T19:38:25.450Z",
  "deprecated_reason": null,
  "description": "Fast, unopinionated, minimalist web framework",
  "dist_tags": [
    {
      "tag": "latest",
      "version": "5.2.1"
    },
    {
      "tag": "latest-4",
      "version": "4.22.2"
    }
  ],
  "first_published": "2010-12-29T19:38:25.450Z",
  "homepage": "https://expressjs.com/",
  "is_deprecated": false,
  "is_scoped": false,
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "http",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "last_published": "2026-05-11T18:50:00.007Z",
  "latest_version": "5.2.1",
  "license": "MIT",
  "maintainer_count": 5,
  "maintainers": [
    {
      "email": "wes@wesleytodd.com",
      "name": "wesleytodd"
    },
    {
      "email": "npm@jonchurch.com",
      "name": "jonchurch"
    }
  ],
  "modified": "2026-08-15T20:58:49.104Z",
  "name": "express",
  "npm_url": "https://www.npmjs.com/package/express",
  "prerelease_count": 43,
  "readme": null,
  "readme_truncated": false,
  "repository_url": "https://github.com/expressjs/express",
  "scope": null,
  "version_count": 288
}
```

### Get a package version

Read one release of a package: its description and licence, when it was published and by whom, what Node versions it runs on, whether it ships types or a command line tool, how large it unpacks to, and the tarball and integrity hash npm would install. Give a version number, or a channel such as 'latest', and the answer says which version that resolved to.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Version or tag (`version`, text): Which release to read. Choose a version number, or a release channel such as 'latest' or 'next', which always resolves to whatever that channel points at today. Fill in the package first and this list loads. Defaults to 'latest'. Default: `latest`.

**Outputs**

- `author` (text)
- `bugs_url` (text)
- `dependency_count` (number)
- `dependency_counts` (list)
- `deprecated_reason` (text)
- `description` (text)
- `engines` (list)
- `entry_point` (text)
- `file_count` (number)
- `funding_url` (text)
- `has_binaries` (true/false)
- `has_types` (true/false)
- `homepage` (text)
- `integrity` (text)
- `is_deprecated` (true/false)
- `is_prerelease` (true/false)
- `is_signed` (true/false)
- `keywords` (list)
- `license` (text)
- `maintainers` (list)
- `module_type` (text)
- `npm_url` (text)
- `package` (text)
- `published` (text)
- `published_by` (text)
- `repository_url` (text)
- `requested` (text)
- `resolved_from_tag` (true/false)
- `shasum` (text)
- `tags` (list)
- `tarball_url` (text)
- `unpacked_size` (number)
- `unpacked_size_readable` (text)
- `version` (text)

**Example output**

```json
{
  "author": "TJ Holowaychuk",
  "bugs_url": "https://github.com/expressjs/express/issues",
  "dependency_count": 28,
  "dependency_counts": [
    {
      "name": "dependencies",
      "value": "28"
    },
    {
      "name": "devDependencies",
      "value": "16"
    },
    {
      "name": "peerDependencies",
      "value": "0"
    },
    {
      "name": "optionalDependencies",
      "value": "0"
    }
  ],
  "deprecated_reason": null,
  "description": "Fast, unopinionated, minimalist web framework",
  "engines": [
    {
      "name": "node",
      "value": ">= 18"
    }
  ],
  "entry_point": null,
  "file_count": 10,
  "funding_url": "https://opencollective.com/express",
  "has_binaries": false,
  "has_types": false,
  "homepage": "https://expressjs.com/",
  "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==",
  "is_deprecated": false,
  "is_prerelease": false,
  "is_signed": true,
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "http",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "license": "MIT",
  "maintainers": [
    {
      "email": "wes@wesleytodd.com",
      "name": "wesleytodd"
    },
    {
      "email": "npm@jonchurch.com",
      "name": "jonchurch"
    }
  ],
  "module_type": "commonjs",
  "npm_url": "https://www.npmjs.com/package/express/v/5.2.1",
  "package": "express",
  "published": "2025-12-01T20:49:43.268Z",
  "published_by": "jonchurch",
  "repository_url": "https://github.com/expressjs/express",
  "requested": "latest",
  "resolved_from_tag": true,
  "shasum": "8f21d15b6d327f92b4794ecf8cb08a72f956ac04",
  "tags": [
    "latest"
  ],
  "tarball_url": "https://registry.npmjs.org/express/-/express-5.2.1.tgz",
  "unpacked_size": 75429,
  "unpacked_size_readable": "73.7 KB",
  "version": "5.2.1"
}
```

### Get download trend

Get a package's downloads day by day over a period, together with what the series says: the busiest and quietest days, the daily average, and whether the second half of the window ran ahead of the first. That last comparison is what turns a download count into 'rising', 'steady' or 'falling', which is the thing worth alerting on.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Period (`period`, text): How far back to count. Ignored when a start and end date are set. Defaults to the last 7 days. One of: `last-day` (Last day), `last-week` (Last 7 days), `last-month` (Last 30 days), `last-year` (Last 365 days). Default: `last-week`.
- Start date (`start_date`, date): The first day to count, for a period the list above does not cover. Set both dates or neither. npm's counts begin on 2015-01-10 and one query may span at most 18 months.
- End date (`end_date`, date): The last day to count. Set both dates or neither.

**Outputs**

- `change` (number)
- `change_percent` (number)
- `daily_average` (number)
- `day_count` (number)
- `days` (list)
- `end` (text)
- `first_half_downloads` (number)
- `lowest_day` (text)
- `lowest_downloads` (number)
- `npm_url` (text)
- `package` (text)
- `peak_day` (text)
- `peak_downloads` (number)
- `period` (text)
- `second_half_downloads` (number)
- `start` (text)
- `total_downloads` (number)
- `trend` (text)

**Example output**

```json
{
  "change": -428114,
  "change_percent": -0.8,
  "daily_average": 18478889,
  "day_count": 7,
  "days": [
    {
      "day": "2026-08-16",
      "downloads": 10381658
    },
    {
      "day": "2026-08-17",
      "downloads": 20190678
    },
    {
      "day": "2026-08-18",
      "downloads": 23005265
    },
    {
      "day": "2026-08-19",
      "downloads": 22625133
    },
    {
      "day": "2026-08-20",
      "downloads": 22415006
    },
    {
      "day": "2026-08-21",
      "downloads": 20294364
    },
    {
      "day": "2026-08-22",
      "downloads": 10440117
    }
  ],
  "end": "2026-08-22",
  "first_half_downloads": 53577601,
  "lowest_day": "2026-08-16",
  "lowest_downloads": 10381658,
  "npm_url": "https://www.npmjs.com/package/express",
  "package": "express",
  "peak_day": "2026-08-18",
  "peak_downloads": 23005265,
  "period": "last-week",
  "second_half_downloads": 53149487,
  "start": "2026-08-16",
  "total_downloads": 129352221,
  "trend": "steady"
}
```

### Get downloads by version

See which versions of a package last week's downloads actually went to, each with its share of the total and the release channels pointing at it. This is the action that answers 'has anyone moved to version 5 yet?'. npm publishes this breakdown for the last 7 days only, so the period is fixed.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Include prereleases (`include_prerelease`, true/false): Turn off to leave out alphas, betas and release candidates, which is what a check for 'is there a new stable release?' wants. On by default. Default: `true`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `counted_downloads` (number)
- `include_prerelease` (true/false)
- `latest_version` (text)
- `npm_url` (text)
- `package` (text)
- `requests_made` (number)
- `top_version` (text)
- `total_count` (number)
- `total_downloads` (number)
- `truncated` (true/false)
- `versions` (list)

**Example output**

```json
{
  "count": 3,
  "counted_downloads": 1523352,
  "include_prerelease": true,
  "latest_version": "1.3.0",
  "npm_url": "https://www.npmjs.com/package/left-pad",
  "package": "left-pad",
  "requests_made": 2,
  "top_version": "1.3.0",
  "total_count": 15,
  "total_downloads": 1523352,
  "truncated": true,
  "versions": [
    {
      "downloads": 1413748,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.3.0",
      "share_percent": 92.8,
      "tags": [
        "latest"
      ],
      "version": "1.3.0"
    },
    {
      "downloads": 51157,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.2.0",
      "share_percent": 3.4,
      "tags": [],
      "version": "1.2.0"
    },
    {
      "downloads": 24382,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.1.0",
      "share_percent": 1.6,
      "tags": [],
      "version": "1.1.0"
    }
  ]
}
```

### Get package dependencies

List what a release depends on as one flat list, each row carrying the version range and which group it came from. npm splits these across four fields keyed by package name, which a workflow cannot walk without knowing the names already, so this is the action that answers 'does this still depend on lodash?' in one step. Choose which groups to include.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Version or tag (`version`, text): Which release to read. Choose a version number, or a release channel such as 'latest' or 'next', which always resolves to whatever that channel points at today. Fill in the package first and this list loads. Defaults to 'latest'. Default: `latest`.
- Dependency groups (`dependency_types`, list): Which groups to include. Choose none to include all four. One or more of: `dependencies` (Dependencies: needed to run the package), `devDependencies` (Dev dependencies: needed only to build or test it), `peerDependencies` (Peer dependencies: expected in the host project), `optionalDependencies` (Optional dependencies: installed if they can be).

**Outputs**

- `count` (number)
- `counts_by_type` (list)
- `dependencies` (list)
- `has_dependencies` (true/false)
- `package` (text)
- `requested` (text)
- `types_included` (list)
- `version` (text)

**Example output**

```json
{
  "count": 3,
  "counts_by_type": [
    {
      "name": "dependencies",
      "value": "0"
    },
    {
      "name": "devDependencies",
      "value": "3"
    },
    {
      "name": "peerDependencies",
      "value": "0"
    },
    {
      "name": "optionalDependencies",
      "value": "0"
    }
  ],
  "dependencies": [
    {
      "is_scoped": false,
      "name": "benchmark",
      "npm_url": "https://www.npmjs.com/package/benchmark",
      "range": "^2.1.0",
      "type": "devDependencies"
    },
    {
      "is_scoped": false,
      "name": "fast-check",
      "npm_url": "https://www.npmjs.com/package/fast-check",
      "range": "0.0.8",
      "type": "devDependencies"
    },
    {
      "is_scoped": false,
      "name": "tape",
      "npm_url": "https://www.npmjs.com/package/tape",
      "range": "*",
      "type": "devDependencies"
    }
  ],
  "has_dependencies": true,
  "package": "left-pad",
  "requested": "1.3.0",
  "types_included": [
    "dependencies",
    "devDependencies",
    "peerDependencies",
    "optionalDependencies"
  ],
  "version": "1.3.0"
}
```

### Get package downloads

Count how many times a package was downloaded over a period, as a single number with the per-day average beside it. Pick one of the standard periods, or set a start and end date for anything else. The answer names the days npm actually counted, so a partly covered period still reads honestly.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Period (`period`, text): How far back to count. Ignored when a start and end date are set. Defaults to the last 7 days. One of: `last-day` (Last day), `last-week` (Last 7 days), `last-month` (Last 30 days), `last-year` (Last 365 days). Default: `last-week`.
- Start date (`start_date`, date): The first day to count, for a period the list above does not cover. Set both dates or neither. npm's counts begin on 2015-01-10 and one query may span at most 18 months.
- End date (`end_date`, date): The last day to count. Set both dates or neither.

**Outputs**

- `daily_average` (number)
- `days` (number)
- `downloads` (number)
- `end` (text)
- `npm_url` (text)
- `package` (text)
- `period` (text)
- `start` (text)

**Example output**

```json
{
  "daily_average": 18478889,
  "days": 7,
  "downloads": 129352221,
  "end": "2026-08-22",
  "npm_url": "https://www.npmjs.com/package/express",
  "package": "express",
  "period": "last-week",
  "start": "2026-08-16"
}
```

### Get registry downloads

Count how many packages the whole npm registry served over a period. It is the denominator for any 'what share of npm is this?' question, and the way to tell whether a package's quiet week was its own or everyone's.

**Inputs**

- Period (`period`, text): How far back to count. Ignored when a start and end date are set. Defaults to the last 7 days. One of: `last-day` (Last day), `last-week` (Last 7 days), `last-month` (Last 30 days), `last-year` (Last 365 days). Default: `last-week`.
- Start date (`start_date`, date): The first day to count, for a period the list above does not cover. Set both dates or neither. npm's counts begin on 2015-01-10 and one query may span at most 18 months.
- End date (`end_date`, date): The last day to count. Set both dates or neither.

**Outputs**

- `daily_average` (number)
- `days` (number)
- `downloads` (number)
- `end` (text)
- `npm_url` (text)
- `package` (text)
- `period` (text)
- `start` (text)

**Example output**

```json
{
  "daily_average": 22656439152,
  "days": 7,
  "downloads": 158595074066,
  "end": "2026-08-22",
  "npm_url": null,
  "package": null,
  "period": "last-week",
  "start": "2026-08-16"
}
```

### Get release channels

See which version each of a package's release channels points at right now. A channel, which npm calls a dist-tag, is what 'npm install package@next' resolves through, so this is the one-request way to answer 'has the beta moved?' or 'what does latest point at today?'.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.

**Outputs**

- `count` (number)
- `latest_version` (text)
- `npm_url` (text)
- `package` (text)
- `tags` (list)

**Example output**

```json
{
  "count": 2,
  "latest_version": "5.2.1",
  "npm_url": "https://www.npmjs.com/package/express",
  "package": "express",
  "tags": [
    {
      "is_latest": true,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/express/v/5.2.1",
      "tag": "latest",
      "version": "5.2.1"
    },
    {
      "is_latest": false,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/express/v/4.22.2",
      "tag": "latest-4",
      "version": "4.22.2"
    }
  ]
}
```

### List package versions

List a package's releases with the date each was published, which release channels point at it, and whether it is a prerelease or has been deprecated. Versions are ordered by semantic version rather than as text, so 1.10.0 sits above 1.9.0 and a release sits above its own release candidates.

**Inputs**

- Package name (`package`, text, required): The npm package to look up, exactly as it is installed. Scoped names include the scope.
- Sort by (`sort`, text): How to order the releases that come back. One of: `newest` (Newest version first), `oldest` (Oldest version first), `published` (Publish date, oldest first), `name` (Version number as text, A to Z). Default: `newest`.
- Include prereleases (`include_prerelease`, true/false): Turn off to leave out alphas, betas and release candidates, which is what a check for 'is there a new stable release?' wants. On by default. Default: `true`.
- Limit (`limit`, number): How many rows to return, from 1 to 500. The answer always says how many there were in total, so a limited list never reads as a complete one. Defaults to 25. From 1 to 500. Default: `25`.

**Outputs**

- `count` (number)
- `first_published` (text)
- `include_prerelease` (true/false)
- `last_published` (text)
- `latest_version` (text)
- `package` (text)
- `sort` (text)
- `total_count` (number)
- `truncated` (true/false)
- `versions` (list)

**Example output**

```json
{
  "count": 3,
  "first_published": "2014-03-14T09:09:20.762Z",
  "include_prerelease": true,
  "last_published": "2018-04-09T01:10:45.796Z",
  "latest_version": "1.3.0",
  "package": "left-pad",
  "sort": "newest",
  "total_count": 15,
  "truncated": true,
  "versions": [
    {
      "deprecated_reason": "use String.prototype.padStart()",
      "is_deprecated": true,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.3.0",
      "published": "2018-04-09T01:10:45.796Z",
      "tags": [
        "latest"
      ],
      "version": "1.3.0"
    },
    {
      "deprecated_reason": "use String.prototype.padStart()",
      "is_deprecated": true,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.2.0",
      "published": "2017-11-17T05:48:38.934Z",
      "tags": [],
      "version": "1.2.0"
    },
    {
      "deprecated_reason": "use String.prototype.padStart()",
      "is_deprecated": true,
      "is_prerelease": false,
      "npm_url": "https://www.npmjs.com/package/left-pad/v/1.1.3",
      "published": "2016-10-01T08:01:07.703Z",
      "tags": [],
      "version": "1.1.3"
    }
  ]
}
```

### Search packages

Search npm and get back the matches with their weekly and monthly downloads, how many packages depend on them, and npm's own quality, popularity and maintenance scores. The search qualifiers are separate fields here, so filtering to one maintainer or one scope, or leaving out anything deprecated, needs no query syntax.

**Inputs**

- Search text (`text`, text): What to search for. Can be left empty if you filter by author, maintainer, scope or keyword instead.
- Author (`author`, text): Only packages whose manifest names this npm user as the author.
- Maintainer (`maintainer`, text): Only packages this npm user can publish. Broader than author: it covers everything they help look after.
- Scope (`scope`, text): Only packages published under this scope. The '@' is optional.
- Keywords (`keywords`, text): Only packages tagged with these keywords, separated by commas. A package must carry all of them.
- Leave out (`exclude`, list): Kinds of package to keep out of the results. Choose none to search everything. One or more of: `deprecated` (Deprecated packages), `unstable` (Unstable packages, meaning below version 1.0.0), `insecure` (Packages with a known security advisory).
- Only include (`require`, list): Narrow the results to packages in these states, which is how you audit for them. Choose none for no such restriction. One or more of: `unstable` (Only unstable packages, meaning below version 1.0.0), `insecure` (Only packages with a known security advisory).
- Weight: quality (`quality`, number): How much npm's quality score counts towards the ranking, from 0 to 1. Quality covers tests, documentation and a stable release history. Leave empty for npm's own balance. From 0 to 1.
- Weight: popularity (`popularity`, number): How much downloads and dependents count towards the ranking, from 0 to 1. Raise it to favour the well-established package over the neat new one. Leave empty for npm's own balance. From 0 to 1.
- Weight: maintenance (`maintenance`, number): How much recent activity counts towards the ranking, from 0 to 1. Raise it to favour packages that are still being worked on. Leave empty for npm's own balance. From 0 to 1.
- Limit (`limit`, number): How many results to return, from 1 to 250. Defaults to 20. From 1 to 250. Default: `20`.
- Skip (`offset`, number): How many results to skip, for paging through a large set. Defaults to 0. At least 0. Default: `0`.

**Outputs**

- `count` (number)
- `excluded_flags` (list)
- `offset` (number)
- `packages` (list)
- `query` (text)
- `required_flags` (list)
- `total_count` (number)
- `truncated` (true/false)

**Example output**

```json
{
  "count": 2,
  "excluded_flags": [],
  "offset": 0,
  "packages": [
    {
      "dependents": 3120,
      "description": "A fully-featured caching GraphQL client.",
      "homepage": "https://www.apollographql.com/docs/react/",
      "is_prerelease": false,
      "is_scoped": true,
      "keywords": [
        "apollo",
        "graphql",
        "react",
        "hooks",
        "client"
      ],
      "license": "MIT",
      "maintainers": [
        {
          "email": "mail@lenzw.de",
          "name": "phryneas"
        },
        {
          "email": "jerelmiller@gmail.com",
          "name": "jerelmiller"
        }
      ],
      "maintenance": 1.0,
      "monthly_downloads": 27127579,
      "name": "@apollo/client",
      "npm_url": "https://www.npmjs.com/package/@apollo/client",
      "popularity": 1.0,
      "published": "2026-08-14T00:55:04.354Z",
      "publisher": "GitHub Actions",
      "quality": 1.0,
      "repository_url": "https://github.com/apollographql/apollo-client",
      "scope": "@apollo",
      "score": 496.2694,
      "version": "4.2.12",
      "weekly_downloads": 6590096
    },
    {
      "dependents": 20,
      "description": "Shopify GraphQL Client - A lightweight generic GraphQL JS client to interact with Shopify GraphQL APIs",
      "homepage": "https://github.com/Shopify/shopify-app-js/tree/main/packages/api-clients/graphql-client#readme",
      "is_prerelease": false,
      "is_scoped": true,
      "keywords": [
        "shopify",
        "node",
        "graphql",
        "Admin API",
        "Storefront API"
      ],
      "license": "MIT",
      "maintainers": [
        {
          "email": "jaimie.way@shopify.com",
          "name": "jaimie.way"
        },
        {
          "email": "npmjs@shopify.com",
          "name": "shopify-admin"
        }
      ],
      "maintenance": 1.0,
      "monthly_downloads": 2549317,
      "name": "@shopify/graphql-client",
      "npm_url": "https://www.npmjs.com/package/@shopify/graphql-client",
      "popularity": 1.0,
      "published": "2026-08-10T21:28:29.051Z",
      "publisher": "GitHub Actions",
      "quality": 1.0,
      "repository_url": "https://github.com/Shopify/shopify-app-js",
      "scope": "@shopify",
      "score": 478.3356,
      "version": "2.0.0",
      "weekly_downloads": 668885
    }
  ],
  "query": "graphql client",
  "required_flags": [],
  "total_count": 277721,
  "truncated": true
}
```
