The crates.io API returns Rust package search as typed rows — one row per crate with its description, latest stable version, all-time and last-90-day downloads, created and updated timestamps, the homepage, documentation and repository links, and an exact_match flag telling you whether the query hit a crate name dead on.
It completes the registry set: the same call shape and row layout as the npm registry API and the PyPI collector, so a dependency-audit pipeline written for one ecosystem covers all three by changing an endpoint name. Under the hood it is a keyless JSON registry read over the TLS tier — no browser, nothing rendered — and the bill counts only crates that actually arrive.
$0.0003 per delivered crate, up to 100 crates per run. Nothing delivered means nothing charged.
A single POST with a query walks the registry's search results, applies your sort at the source, and stops at max_results — up to 100 crates in one run. Sorting is where the leverage is, because each order answers a different question:
downloads ranks by all-time volume — the establishment view, dominated by the serde and tokio tier.recent_downloads ranks by the last 90 days — what the ecosystem is reaching for now, the order that surfaces a rising replacement before the all-time chart notices it.new and recent_updates are the discovery and maintenance feeds: fresh publishes and latest releases.Every row keeps a 1-based rank within the order you chose, so position itself becomes data you can store and diff week over week.
query is the only required input — a crate name or a keyword like "http client". sort takes one of relevance, downloads, recent_downloads, recent_updates or new, and max_results (1–100, default 25) caps exactly what you pay for.
The two download counters are deliberately different windows: downloads is all-time mass, recent_downloads is the trailing 90 days, and the ratio between them is a serviceable proxy for whether a crate is growing or coasting. version is the latest stable release, the three link fields are nullable because many crates only set repository, and exact_match saves you a string comparison when checking whether a name is taken.
$0.0003 per delivered crate ($0.30 per 1,000). Nothing delivered means nothing charged, and the $2 monthly free credit covers roughly 6,666 crates here. Volume tiers take up to 30% off.
$0.0003 per delivered crate — 30 cents per 1,000. Auditing every direct and transitive dependency of a large Rust workspace, say 400 crates, runs about twelve cents; a weekly ecosystem scan across twenty keywords at 50 rows each is 30 cents a week. Your first $2 each month is on us, roughly 6,666 crates of headroom.
Queries that return no crates are not billed — an empty result is an answer, not a purchase.
crates.io is open infrastructure: keyless, free, with public database dumps — for interactive lookups, call it directly and be glad it exists. The registry does, however, publish a crawling policy for automated clients: identify yourself with a real user-agent and keep the per-IP request rate down. A batch job that ignores that gets refused; a batch job that honours it gets slow.
What the collector sells is not access but shape and pace: your sweep is spread across rotating exits at a polite per-exit rate, results come back as the same typed row our npm and PyPI collectors emit instead of the registry's nested JSON, and one QuantumProxies key covers this plus every other collector on the invoice. The origin being free is exactly why the row costs $0.0003 and not ten times that.
A reqwest loop against the search endpoint is a pleasant afternoon in Rust — this is the one ecosystem where people enjoy that part. The costs are all downstream:
Keep your client if it makes you happy — and if what it lacks is just cleaner egress, our rotating residential exits work under any code you already run.
Run each name from Cargo.toml through the collector and flag crates whose updated_at is years old or whose recent_downloads have collapsed relative to downloads — the two cheapest early signals of an unmaintained dependency.
Store the ranked rows for a set of category keywords every week. Rank shifts under recent_downloads show a library gaining on the incumbent months before anyone blogs about it — equally useful to tool vendors and to teams picking a stack.
Before publishing, query the exact name and read exact_match; afterwards, watch near-miss spellings of your crate. A typosquat pointing at a suspicious repository is worth cross-checking with the GitHub repository search API.
One run delivers up to 100 crates; deeper sweeps are more runs, which parallelise up to your plan's requests-per-minute allowance (from 60 on pay-as-you-go to 1,200 on the top tier). Relevance ranking is the registry's own — we report it, we do not reorder it — and download figures are the registry's counters at the moment of the read.
Scope: crate-level metadata from search. It does not fetch crate tarballs, resolve dependency graphs or read rustdoc content, and version history beyond the latest stable release is not in the row. The underlying data is public and the registry offers bulk dumps for full-corpus work — this collector is for query-shaped questions, not for mirroring.
At the origin, yes — crates.io is keyless and free. Through QuantumProxies you get a $2 monthly allowance with no card on file, worth about 6,666 delivered crates, after which the price is $0.0003 per crate. You are paying for uniform rows, pacing and rotation, not for access to public data.
No. crates.io tokens exist for publishing crates, not for reading the registry, and this collector only reads. The single credential involved is your QuantumProxies API key, which also drives the npm, PyPI and Docker Hub collectors.
downloads is the crate's all-time total; recent_downloads counts the trailing 90 days. Comparing them is the quickest health check there is: a crate with millions of historic downloads but a thin recent figure is coasting on legacy dependents.
Five: relevance (the default), downloads, recent_downloads, recent_updates and new. The sort is applied by the registry before rows are delivered, so a top-50-by-downloads run bills exactly 50 crates rather than fetching everything and filtering on your side.