NuGet Scraper · .NET Packages, Versions, Downloads & Authors
Pricing
from $0.85 / 1,000 nuget package record scrapeds
NuGet Scraper · .NET Packages, Versions, Downloads & Authors
Scrape NuGet .NET packages, versions, download counts, authors, tags, and dependencies. Search by keyword, tag, framework, author, or package ID prefix.
Pricing
from $0.85 / 1,000 nuget package record scrapeds
Rating
0.0
(0)
Developer
Tarek Etman
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share

NuGet Scraper · .NET Packages, Versions, Downloads & Authors
NuGet Scraper extracts comprehensive public package metadata from NuGet, the official package manager for .NET. Collect package identifiers, titles, version history, download statistics, authors, project repository URLs, license terms, tags, framework targets, and security vulnerability alerts.
Maintained by reapX. Every row cites the Apify run that produced it — nothing is inferred, modelled or filled in, and a field absent from the source is absent from the row. The extracted archive for this source is browsable at reapx.dev/data/nuget-scraper/ and mirrored as an open dataset on Hugging Face and Kaggle. Questions: reapxdev@proton.me
⬇️ Input
Every field is described here exactly as the Actor reads it. Run it with the prefilled input and it returns real rows without any further configuration.
| Field | Type | Required | Prefilled | What it does |
|---|---|---|---|---|
query | string | yes | "json" | Search query string for NuGet packages. Supports free text (e.g. json), tag filters (e.g. tag:logging), target framework (e.g. framework:net8.0), author (e.g. author:microsoft), or package... |
includePrerelease | boolean | no | false | Include pre-release packages (alpha, beta, RC versions) in search results. When enabled, pre-release package metadata is scraped alongside stable releases. |
packageType | string | no | - | Narrow the search to one kind of NuGet package: a library, a .NET CLI tool or a project/item template. |
includeDependencies | boolean | no | false | Read each package's registration index and add dependencies, dependencyCount, targetFrameworks, published, licenseExpression and listed. The search endpoint carries none of those at any... |
minDownloads | integer | no | - | Minimum total download count filter. Package records with fewer total downloads than this value will be excluded from the dataset results. |
maxItems | integer | yes | 50 | Maximum package records to return and push to the default dataset (1 to 5,000). |
maxPages | integer | yes | 5 | Maximum search result pages to fetch from the NuGet V3 search API (1 to 100). Each page retrieves up to 100 package items. |
What empty means, and what a larger value costs
The two questions an input table normally does not answer. Both columns are read off this Actor's own code and its own price list.
| Field | Left empty | Turned up |
|---|---|---|
query | Leave empty to search popular default packages. | Narrowing this reduces rows returned, so it lowers the bill. |
includePrerelease | Only stable release packages are returned. Disabling pre-release excludes unfinished packages and speeds up processing. | Turning this on costs extra requests to the source, not extra rows. |
packageType | Leave empty to search every package type, which is what nuget.org itself does. | This filter is applied by the search service, not afterwards, so it makes runs cheaper rather than more expensive. Measured live: json matches 11,017 packages, json restricted to... |
includeDependencies | Those six fields stay empty, 0 and true. | One extra request per package, run 5 at a time, so a 500-package run takes noticeably longer. It adds no rows and no charge. |
minDownloads | Leave empty for no minimum download constraint. | Narrowing this reduces rows returned, so it lowers the bill. |
maxItems | Falls back to 50 | Each row returned is one $0.001 charge, so this field is your cost cap as well as your row cap. At the ceiling of 5,000 rows that is $5.00 at list price. |
maxPages | Falls back to 5 | More pages means more HTTP requests to the source and a longer run. It raises the ceiling on rows without raising the row cap itself. |
⬆️ Output
One row per record, as JSON, CSV, Excel or XML, and through the API. Every field below is on every row this Actor writes; a field the source did not return is empty rather than guessed.
| Field | Type | What it gives you | Example |
|---|---|---|---|
packageName | string | Unique .NET package identifier on NuGet (e.g. Newtonsoft.Json) | "Newtonsoft.Json" |
title | string | Display title of the NuGet package | "Json.NET" |
version | string | Latest published version string | "13.0.4" |
description | string | Full package description detailing purpose and usage | "Json.NET is a popular high-performance JSON framework fo... |
summary | string | Short summary description of the package | "High-performance JSON framework for .NET" |
authors | array | List of package authors | ["James Newton-King"] |
owners | array | List of NuGet package owners/publishers | ["newtonsoft", "nuget"] |
totalDownloads | integer | Cumulative total download count across all versions | 982341234 |
projectUrl | string | URL to the open-source project repository or homepage | "https://www.newtonsoft.com/json" |
licenseUrl | string | URL to the package license terms | "https://licenses.nuget.org/MIT" |
iconUrl | string | URL to the package logo/icon image | "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/1... |
tags | array | Package categorization and search keywords | ["json", "serialization", "xml"] |
verified | boolean | Whether the package owner prefix is verified by NuGet | true |
versionsCount | integer | Total number of published releases and versions | 45 |
latestVersionDownloads | integer | Download count specifically for the latest release | 168874731 |
packageTypes | array | Types of NuGet package (e.g. Dependency, DotnetTool) | ["Dependency"] |
hasVulnerabilities | boolean | Indicates whether known security vulnerabilities exist for any version | false |
vulnerabilitiesCount | integer | Total number of recorded security advisory vulnerabilities | 0 |
published | string | When the current version was published to nuget.org. Empty unless Include Dependencies & Publish Date is on. | "2026-07-31T09:14:02.473+00:00" |
licenseExpression | string | Licence the package declares, as an SPDX expression. Empty unless Include Dependencies & Publish Date is on, or when... | "Apache-2.0" |
listed | boolean | False when the current version has been unlisted from search by its owner but is still installable by exact version. | true |
dependencyCount | integer | Distinct package dependencies across every target framework of the current version. Zero unless Include Dependencies &... | 24 |
targetFrameworks | array | Frameworks the current version declares a dependency group for, such as .NETStandard2.0 or net8.0. | [".NETStandard2.0", "net8.0"] |
dependencies | array | Each dependency as package id, version range and the target framework that declares it. | [{"id": "System.Text.Json", "range": "[8.0.0, )", "target... |
Dataset views
The dataset ships with named views, so the Output tab, the API and any agent reading this Actor get the columns that matter for a job without asking for all of them.
Overview (?view=overview) - 7 columns: packageName, title, version, totalDownloads, authors, tags, verified
| Column | Header |
|---|---|
packageName | Package |
title | Title |
version | Version |
totalDownloads | Total Downloads |
authors | Authors |
tags | Tags |
verified | Verified Owner |
Downloads & Versions (?view=downloads) - 7 columns: packageName, version, totalDownloads, latestVersionDownloads, versionsCount, hasVulnerabilities, vulnerabilitiesCount
| Column | Header |
|---|---|
packageName | Package |
version | Version |
totalDownloads | Total Downloads |
latestVersionDownloads | Downloads (this version) |
versionsCount | Versions Published |
hasVulnerabilities | Known Vulnerabilities |
vulnerabilitiesCount | Advisory Count |
Dependencies & Frameworks (?view=dependencies) - 7 columns: packageName, version, dependencyCount, targetFrameworks, dependencies, licenseExpression, published
| Column | Header |
|---|---|
packageName | Package |
version | Version |
dependencyCount | Dependencies |
targetFrameworks | Target Frameworks |
dependencies | Dependency List |
licenseExpression | License |
published | Published |
Authors & Project Links (?view=authors) - 7 columns: packageName, authors, owners, projectUrl, licenseUrl, iconUrl, packageTypes
| Column | Header |
|---|---|
packageName | Package |
authors | Authors |
owners | Owners |
projectUrl | Project URL |
licenseUrl | License URL |
iconUrl | Icon |
packageTypes | Package Types |
Fetch one directly:
GET https://api.apify.com/v2/datasets/{datasetId}/items?view=overview&format=csv
One real row
Unedited, from this Actor's own most recent successful run.
{"packageName": "Dapper","title": "Dapper","version": "2.1.79","description": "A high performance Micro-ORM supporting SQL Server, MySQL, Sqlite, SqlCE, Firebird etc. Major Sponsor: Dapper Plus from ZZZ Projects.","summary": "","authors": ["Sam Saffron,Marc Gravell,Nick Craver"],"owners": ["Dapper","marc.gravell","nick.craver"],"totalDownloads": 730063539,"projectUrl": "https://github.com/DapperLib/Dapper","licenseUrl": "https://www.nuget.org/packages/Dapper/2.1.79/license","iconUrl": "https://api.nuget.org/v3-flatcontainer/dapper/2.1.79/icon","tags": ["orm","sql","micro-orm"],"verified": true,"versionsCount": 63,"latestVersionDownloads": 6769082,"packageTypes": ["Dependency"],"hasVulnerabilities": false,"vulnerabilitiesCount": 0,"published": "2026-05-16T20:39:31.827+00:00","licenseExpression": "Apache-2.0","listed": true,"dependencyCount": 5,"targetFrameworks": [".NETFramework4.6.1","net8.0","net10.0",".NETStandard2.0"],"dependencies": [{"id": "Microsoft.Bcl.AsyncInterfaces","range": "[10.0.8, )","targetFramework": ".NETFramework4.6.1"},{"id": "System.Threading.Tasks.Extensions","range": "[4.6.3, )","targetFramework": ".NETFramework4.6.1"},{"id": "Microsoft.Bcl.AsyncInterfaces","range": "[10.0.8, )","targetFramework": ".NETStandard2.0"},{"id": "System.Reflection.Emit.Lightweight","range": "[4.7.0, )","targetFramework": ".NETStandard2.0"},{"id": "System.Threading.Tasks.Extensions","range": "[4.6.3, )","targetFramework": ".NETStandard2.0"}]}
🧪 Worked examples
Every block below is an input this Actor has actually run, with the row count of the run that produced it. Copy one straight into the Console.
ORM libraries with dependencies and publish dates
{"query": "tag:orm","packageType": "Dependency","includeDependencies": true,"maxItems": 25,"maxPages": 1}
That run returned 25 rows in 5s.
Popular JSON & Serialization Packages
Scrape top .NET JSON parsing, formatting, and serialization libraries from NuGet.
{"query": "json","maxItems": 50}
That run returned 50 rows.
High-Download .NET Utility Libraries
Extract popular .NET utility packages filtered by a 100,000+ total downloads threshold.
{"query": "utility","minDownloads": 100000,"maxItems": 50}
That run returned 50 rows.
Prerelease & Preview .NET Packages
Scrape package search results including preview, alpha, and beta release versions.
{"query": "json","includePrerelease": true,"maxItems": 50}
That run returned 50 rows.
Logging & Diagnostics Frameworks
Extract .NET logging abstractions, sinks, structured loggers, and diagnostic tools.
{"query": "tag:logging","maxItems": 50}
That run returned 50 rows.
MediatR CQRS In-Process Messaging
Collect MediatR mediator pattern implementations, request handlers, and pipeline behaviors.
{"query": "id:MediatR","maxItems": 50}
That run returned 50 rows.
How it works
The endpoint it calls
Plain HTTP against the source's own public API. No headless browser, no login, no key of yours:
https://azuresearch-usnc.nuget.org/queryhttps://api.nuget.org/v3/registration5-gz-semver2
The Azure Search endpoint behind nuget.org - the same service the gallery's own search box calls, so the ranking you get here is the ranking a .NET developer sees.
The paging it does
Paging is skip and take, 100 packages per request, up to Max Pages requests. The client stops as soon as a page returns nothing, so a narrow query costs one request rather than the whole page budget.
Query syntax is the gallery's own, and it is what makes one task genuinely different from another: bare words search text, tag:logging filters by tag, author:microsoft by author, id:Serilog by package id prefix, framework:net8.0 by target framework. packageType narrows to libraries, .NET tools or templates - measured live, q=json returns 11,017 hits and q=json&packageType=DotnetTool returns 350.
semVerLevel=2.0.0 is always sent, so SemVer 2.0.0 packages are not silently missing from your results. De-duplication is by lowercased package id across every page.
The rate it holds
Every request is retried up to 3 times, with the wait doubling between attempts, and HTTP 429, 500, 502, 503, 504 are treated as retryable rather than fatal. Each request times out at 15s, detail requests run 5 at a time and never more.
One request at a time, retried up to 3 times with the delay doubling between attempts. No key, no account, no quota to apply for.
What you are charged
One package-scraped event per row written to the dataset, $0.001 at list price. Charged for each NuGet package record scraped and pushed to default dataset
| Apify plan tier | Price per row |
|---|---|
| Free | $0.001 |
| Bronze | $0.00095 |
| Silver | $0.0009 |
| Gold | $0.00085 |
| Platinum | $0.0008 |
| Diamond | $0.00075 |
Apify platform usage is absorbed, not passed on, so the row price is the whole bill.
Why the dataset is correct at every moment
Rows are written and charged one at a time as the pages come back, so a run stopped by your budget cap leaves every row it had already collected and charges for those only.
⚠️ Error reference
Derived from this Actor's own exception classes and the HTTP branches in its client. The run always reports what happened in its status message, so you never need the log to know what you got.
| Raised | When | What the run does |
|---|---|---|
BadQuery | Raised when the NuGet API returns a 400 Bad Request error. | Run fails with: NuGet API rejected query input: |
SourceBlocked | Raised when the NuGet API is unreachable, rate limited, or returning 5xx/403 errors. | Run fails with: NuGet API unreachable or throttled: |
HTTP statuses the client actually handles
| Status | Handling |
|---|---|
429 | Retried with backoff. The run continues if a later attempt succeeds. |
500 | Retried with backoff. The run continues if a later attempt succeeds. |
502 | Retried with backoff. The run continues if a later attempt succeeds. |
503 | Retried with backoff. The run continues if a later attempt succeeds. |
504 | Retried with backoff. The run continues if a later attempt succeeds. |
400 | The source rejected the query itself, so retrying it cannot help; the input is at fault. |
What each outcome costs
| Outcome | Rows | Charged |
|---|---|---|
| Run finished | Everything the source returned for your filters | One package-scraped per row |
| Nothing matched your filters | 0 | Nothing |
| Source refused or was unreachable | Whatever was already collected | Only the rows you got |
| Budget cap reached mid-run | The rows collected before the cap | Only those rows |
Status messages this Actor can end on, verbatim from its own source:
- Run budget of $ cannot cover a single event record at $
- NuGet API unreachable or throttled:
- No NuGet packages found matching criteria. Zero charged.
- Pushed
❓ FAQ
Can I search packages by target framework?
Yes. Use the framework: filter prefix in the query field, such as framework:net8.0, framework:net9.0, or framework:netstandard2.0.
How do I filter by specific package authors or owners?
Use the author: filter prefix in the query field, for example author:microsoft or author:amazon.
How do I scrape pre-release package versions?
Set "includePrerelease": true in your run input. By default, only stable releases are included.
What happens if a search query matches no packages?
The scraper completes with 0 records pushed and charges $0.00.
Do I need an API key, an account or a proxy?
No. The Actor reads the source's public interface over plain HTTP, with no credential of yours anywhere in the run and no headless browser. You need an Apify account and nothing else.
What does a run cost?
One package-scraped event per row written, $0.001 at list price, falling to $0.00075 on the highest Apify plan tier. Apify platform usage is absorbed rather than passed on, so the row price is the whole bill. A run that matches nothing is charged nothing.
How many rows can one run return?
Up to 5,000, set by the maximum-results field, which is also your cost cap. Raise it for a bigger slice, or set a Max total charge on the run and the Actor will stop cleanly when it gets there.
Can I get just some of the columns?
Yes. The dataset ships named views (overview, downloads, dependencies, authors); add ?view=<name> to the dataset items URL, or pick one in the Output tab, and you get that view's columns in JSON, CSV or Excel.
Can an agent call this?
Yes, through Apify's MCP server at https://mcp.apify.com with nothing to integrate on our side: search-actors finds it, fetch-actor-details returns the input schema above, and call-actor runs it.
Will the dataset still be there next month?
Yes. The run names its own default dataset at startup, and Apify keeps named storages past the retention window that deletes unnamed ones, so the run id in a row you cited a year ago still resolves.
💬 Your feedback
Have feature requests or questions? Contact the maintainers at reapxdev@proton.me or visit reapx.dev.
Unofficial - not affiliated with NuGet / Microsoft. Collects public data only. reapx. Contact reapxdev@proton.me.