# Anaconda Packages Scraper (`b2b_lead_generation/anaconda-packages-scraper`) Actor

Search public Anaconda packages or fetch package details and download URLs by owner and name. Instantly export channel summaries, versions, licenses, and file links as clean JSON, CSV, or Excel datasets.

- **URL**: https://apify.com/b2b_lead_generation/anaconda-packages-scraper.md
- **Developed by:** [B2B Lead Generation](https://apify.com/b2b_lead_generation) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Anaconda Packages Scraper for Conda Package Search](https://images.bigibyte.com/cdn-cgi/image/width=800,quality=80,format=auto/apify-actors-covers/anaconda-packages-scraper-cover.png)

## Anaconda Packages Scraper for Conda Package Search

This tool helps you search for conda packages and export detailed package records without unnecessary extra setup. Each run collects clean package data that you can easily download as JSON, CSV, or Excel.

Search by package name or look up specific `owner/name` records like `conda-forge/numpy`. Your output includes channels, summaries, latest versions, licenses, supported platforms, homepages, and project links. Optional file details give you direct download URLs, file sizes, and subdirectories without needing to fetch the actual archives.

### Use cases

- **Package lookup**: Search for `numpy` and gather owner details, package summaries, and direct links in a clean spreadsheet.
- **Channel checks**: Inspect `conda-forge/numpy` to track the latest release versions, software licenses, and platform support.
- **Mirror planning**: Collect package file download URLs, sizes, and targeted subdirectories for repository planning.
- **Inventory exports**: Limit runs to specific batch sizes and schedule recurring updates whenever you need a fresh dataset.
- **Gap filling**: If a package lookup fails, the tool creates a clear error record while letting the rest of your batch run finish smoothly.

### What data does this actor extract?

Package records extract detailed attributes including `full_name`, `name`, `owner`, `summary`, `latest_version`, `license`, `platforms`, `home`, `dev_url`, and `html_url`. Detailed package modes ensure versions and licenses are completely filled in. Enabling file details adds basenames, file sizes, versions, target platforms, checksums, and direct HTTPS download URLs.

The source file field `type` is labeled as `artifactKind` to ensure smooth dataset exports.

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `search` | Choose whether to search by package name or inspect package details. |
| `query` | string | `numpy` | Search term used when searching for packages. |
| `packages` | array | `conda-forge/numpy` | List of `owner/name` pairs to look up directly in package mode. |
| `includeFiles` | boolean | `false` | Set to true to include individual file rows for each package detail response. |
| `maxItems` | integer | `100` | Maximum number of data rows to collect per run (capped at 1000). |
| `requestDelaySecs` | number | `1` | Pause duration between requests in seconds. |
| `userAgent` | string | B2B Lead Generation research UA | Custom User-Agent header for HTTP requests. |
| `timeoutSecs` | integer | `300` | Overall execution time cap in seconds. |
| `requestTimeoutSecs` | integer | `30` | Timeout cap for individual requests in seconds. |
| `proxyConfiguration` | object | No proxy | Custom proxy settings if required. |

#### Example input

```json
{
  "mode": "search",
  "query": "numpy",
  "maxItems": 100,
  "requestDelaySecs": 1,
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": { "useApifyProxy": false }
}

```

Package detail mode:

```json
{
  "mode": "package",
  "packages": ["conda-forge/numpy"],
  "includeFiles": false,
  "maxItems": 100
}

```

### Output

```json
{
  "full_name": "cjrh/numpy",
  "name": "numpy",
  "owner": "cjrh",
  "summary": "Numpy for (py27, win64, MKL) built by Christoph Gohlke",
  "latest_version": "1.8.1",
  "license": null,
  "platforms": { "win-64": "1.8.1" },
  "home": null,
  "dev_url": null,
  "html_url": "http://anaconda.org/cjrh/numpy",
  "scraped_at": "2026-10-12T00:00:00+00:00"
}

```

| Field | Type | Description |
| --- | --- | --- |
| `full_name` | string | Full repository path (`owner/name`). |
| `name` | string | Name of the conda package. |
| `owner` | string | Package owner or channel name. |
| `summary` | string | Short description of the package. |
| `latest_version` | string | Most recent version number available. |
| `license` | string | Software license type. |
| `platforms` | object | Map of compatible platforms and corresponding versions. |
| `home` | string | Official project homepage link. |
| `dev_url` | string | Development repository link. |
| `html_url` | string | Direct web page link on anaconda.org. |
| `packageId` | string | Unique package identifier. |
| `packageTypes` | array | Listed package distribution formats. |
| `downloadCount` | integer | Total recorded package downloads. |
| `scraped_at` | string | Timestamp showing when the data was extracted. |
| `fileName` | string | Specific filename for file records. |
| `downloadUrl` | string | Direct download link for the package file. |
| `fileBytes` | integer | File size measured in bytes. |
| `fileVersion` | string | Version assigned to the file record. |
| `filePlatform` | string | Platform subdirectory architecture (e.g., `linux-64`). |
| `artifactKind` | string | Internal file type classification. |
| `error` | string | Informative note created when a request encounters an issue. |

### How it works

1. Reads your input settings and prepares the processing list for searches or targeted packages.
2. Formats requests neatly and sends appropriate User-Agent headers with polite rate management (`requestDelaySecs`).
3. Handles transient network errors smoothly with built-in retries and exponential backoff.
4. Filters out duplicate package records and duplicate file paths automatically.
5. Saves clean batch outputs directly to your dataset, recording clear error messages for missing items without stopping execution.

### FAQ

**Does search page through every package?**

Search queries evaluate matching names and return the top verified results directly.

**Does this tool download actual archive files?**

No. File options collect metadata, file sizes, checksums, and download links, leaving actual archive files untouched on their servers.

**What happens if a package or owner is not found?**

The runner captures a detailed error row explaining what happened and moves smoothly on to the next item in your list.

**How many rows can I extract per run?**

By default, runs collect up to 100 items, but you can adjust `maxItems` up to 1,000 items per run.

**Are proxies required?**

No. Default settings run smoothly without proxy configurations, though you can enable proxies if your workflow requires specific routing.

#### Trademark Notice

All product names, logos, brands, and trademarks referenced herein belong to their respective owners. They are used purely for identification purposes and do not imply any affiliation, endorsement, or partnership.

#### Is web scraping legal?

This Actor only collects publicly available data without bypassing any access controls or technical barriers. Extracting open public data is widely practiced, but you should always consider how you handle the output:

- **Personal data:** When dealing with personal contact information or individual profile details, regional privacy frameworks (such as GDPR or CCPA) may apply. Always ensure you have a clear legal basis before processing personal information.
- **Copyright:** Descriptions and project materials can be protected by copyright law. Respect creator ownership and avoid republishing protected materials in full without proper rights.
- **Terms of use:** Respect website guidance, rate limits, and attribution expectations.
- **Legal advice:** This summary is provided for general informational context only and does not constitute legal counsel. Consult a qualified attorney if you have specific legal questions.

To learn more, check out Apify's helpful guide: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

# Actor input Schema

## `mode` (type: `string`):

Search conda packages by name, or open one package at a time using owner/name.

## `query` (type: `string`):

Package name sent as the name parameter on search. Example: numpy. Ignored in package mode.

## `packages` (type: `array`):

Packages to open in package mode, one owner/name per line. Example: conda-forge/numpy. Ignored in search mode.

## `includeFiles` (type: `boolean`):

When checked, package detail also writes one row per file listed on that package. The actor does not download the file bytes.

## `maxItems` (type: `integer`):

Maximum data rows to save this run. Error rows do not count toward the cap. Hard maximum is 1000.

## `requestDelaySecs` (type: `number`):

Seconds to wait after each completed HTTP call before the next one. Default is 1 second. The public API did not send a rate-limit header.

## `userAgent` (type: `string`):

User-Agent header sent on every request. Include an app name and a contact address so the source can identify the client.

## `timeoutSecs` (type: `integer`):

Maximum seconds for the whole run. The actor stops and flushes rows already collected when this elapses.

## `requestTimeoutSecs` (type: `integer`):

Maximum seconds to wait for a single HTTP response before retrying or recording an error row.

## `proxyConfiguration` (type: `object`):

Optional proxy for Anaconda API requests. Leave useApifyProxy off to call the API directly. Turn it on only if your IP is blocked.

## Actor input object example

```json
{
  "mode": "search",
  "query": "numpy",
  "packages": [
    "conda-forge/numpy"
  ],
  "includeFiles": false,
  "maxItems": 100,
  "requestDelaySecs": 1,
  "userAgent": "",
  "timeoutSecs": 300,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Package name, owner, summary, latest version, license, platforms, and source URL.

## `files` (type: `string`):

File name, version, platform, size, and download URL from package detail.

## `errors` (type: `string`):

Failed requests with URL, HTTP status, and message.

## `dataset` (type: `string`):

Every row from the run, without a table view applied.

# 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 = {
    "query": "numpy",
    "packages": [
        "conda-forge/numpy"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_lead_generation/anaconda-packages-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 = {
    "query": "numpy",
    "packages": ["conda-forge/numpy"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_lead_generation/anaconda-packages-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "query": "numpy",
  "packages": [
    "conda-forge/numpy"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call b2b_lead_generation/anaconda-packages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_lead_generation/anaconda-packages-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

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