# crates.io Scraper - Rust Packages & Versions (`thirdwatch/crates-io-scraper`) Actor

Search public crates.io packages and export versions, downloads, licenses, repositories, categories, keywords, timestamps, and yanked status.

- **URL**: https://apify.com/thirdwatch/crates-io-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 rust crates

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## crates.io Scraper

> Export structured public crates.io Rust crates for discovery, comparison, monitoring, and governance.

### What you get

Search the public crates.io catalog and save one deduplicated row per Rust crate. Results include crate name, current versions, downloads, license, repository, documentation, categories, keywords, timestamps, and yanked status. Use discovery inputs for market maps and exact-name inputs, when available, for stable monitoring cohorts.

### Output fields

| Field group | Description |
|---|---|
| Identity | Canonical `name`, display name, and source URL. |
| Release evidence | Current version or tag data and source timestamps when published. |
| Adoption signals | Public download, install, pull, star, or rating metrics available from the source. |
| Ownership and links | Public author, owner, project, repository, documentation, or homepage references. |
| Classification | Public tags, categories, keywords, packaging, or status values. |
| Provenance | Search query and named upstream source for traceable analysis. |

### Example output

```json
{"name":"tokio","newestVersion":"1.40.0","description":"An event-driven, non-blocking I/O platform","downloads":300000000,"recentDownloads":25000000,"repository":"https://github.com/tokio-rs/tokio","versions":[{"version":"1.40.0","license":"MIT","yanked":false}],"url":"https://crates.io/crates/tokio"}
```

### Input parameters

| Parameter | Required | Description |
|---|---|---|
| `queries` | No | Up to five crates.io search phrases. |
| `crateNames` | No | Up to 25 exact crate names. |
| `sort` | No | downloads, recent-downloads, recent-updates, or new. |
| `versionsPerCrate` | No | Recent versions embedded per crate, from 0 to 20. |
| `maxResultsPerQuery` | Yes | Maximum crates requested per search; defaults to 25. |
| `maxResults` | Yes | Maximum unique crates across all modes; defaults to 100. |

At least one discovery or exact-name input is required. Result limits apply after cross-input deduplication, and only saved unique rows are charged.

### Use cases

- **Developers:** discover alternatives and compare public release evidence.
- **Platform teams:** monitor versions, tags, compatibility, and activity for a fixed portfolio.
- **Security teams:** build an evidence inventory before joining vulnerability and deployment data.
- **Product researchers:** map a developer ecosystem with repeatable queries and dated snapshots.

### Limitations

The Actor covers public crates.io metadata and follows its access guidance. Version enrichment adds requests, downloads are popularity signals rather than quality scores, and license strings still require policy review.

### Compared to alternatives

Current Apify Store alternatives include parseforge/crates-io-rust-scraper and benthepythondev/crates-io-scraper. Thirdwatch combines discovery and bounded monitoring inputs where the source permits them, saves canonical evidence URLs, deduplicates before charging, provides exactly four PPE tiers, and ships ten ready-to-save Task recipes plus a five-article workflow library. Compare current Store listings directly because competitor features and pricing can change.

### FAQ

#### Does this Actor access private packages or accounts?

No. It collects only metadata available from the public source and does not sign in, bypass access controls, or request private registry credentials.

#### How should I monitor a fixed portfolio?

Use exact names where supported, keep result limits explicit, save the input as an Apify Task, and retain dated datasets. Do not let an empty or failed run overwrite the previous successful snapshot.

#### Are popularity metrics quality or security scores?

No. Downloads, installs, pulls, stars, and ratings help prioritize review, but they do not replace vulnerability, provenance, license, maintainership, or internal deployment evidence.

#### Where can I find more workflows?

Visit [Thirdwatch developer-data scrapers](https://thirdwatch.dev/scrapers/crates-io-scraper) and the related [GitHub](https://apify.com/thirdwatch/github-repositories-scraper?fpr=9m2cd6), [npm](https://apify.com/thirdwatch/npm-package-scraper?fpr=9m2cd6), and [OSV](https://apify.com/thirdwatch/osv-vulnerability-scraper?fpr=9m2cd6) Actors.

Last verified: 2026-07

# Actor input Schema

## `queries` (type: `array`):

Keywords to search in the public crates.io package index.

## `crateNames` (type: `array`):

Exact crates.io package names, such as tokio or serde.

## `sort` (type: `string`):

Sort field used by crates.io search.

## `versionsPerCrate` (type: `integer`):

Maximum recent version records embedded for each crate. Set to 0 to skip enrichment.

## `maxResultsPerQuery` (type: `integer`):

Maximum crates requested for each query.

## `maxResults` (type: `integer`):

Maximum unique crates saved across search and exact lookup.

## Actor input object example

```json
{
  "queries": [
    "async runtime"
  ],
  "crateNames": [],
  "sort": "downloads",
  "versionsPerCrate": 5,
  "maxResultsPerQuery": 25,
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/crates-io-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/crates-io-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call thirdwatch/crates-io-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=thirdwatch/crates-io-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pg9t6AClfJuDjwFnd/builds/yttnb1SL3RAS5UibF/openapi.json
