# Pub.dev Scraper (`parseforge/pub-dev-scraper`) Actor

Scrapes Dart and Flutter packages from pub.dev by keyword. Returns each package as a flat row with name, version, description, publisher, and scores.

- **URL**: https://apify.com/parseforge/pub-dev-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $19.00 / 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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Pub.dev Scraper

**Scrape Dart and Flutter packages from pub.dev by keyword, up to a million per run.** Each package comes with its name, version, description, publisher, and computed scores. No login or API key. Export to CSV, JSON, Excel, or XML.

Pub.dev is the official package repository for Dart and Flutter, but browsing it manually means clicking through pages and copying data by hand. This Actor reads the public package search directly, filters by your keyword, and returns each match in one fixed schema. It is the fastest way to turn pub.dev search results into a clean dataset.

| Who uses it | What they scrape Pub.dev for |
|---|---|
| Flutter developers | Find the most popular packages for a feature before adding a dependency |
| Dart package maintainers | Track how competing packages rank for the keywords they care about |
| Market researchers | Map the package ecosystem around a technology like Firebase or state management |
| Dev tool builders | Feed package metadata into a directory, comparison site, or internal catalog |

### What it does

This Actor collects Dart and Flutter packages from pub.dev by keyword and returns each one as a flat row.

- 🔎 **Keyword search:** enter any term like 'http', 'state management', or 'firebase' and get matching packages.
- 📦 **Top packages:** leave the query empty to browse the most popular packages on pub.dev right now.
- ⚙️ **Flexible volume:** set maxItems from 1 to 1,000,000 packages per run.
- 📤 **Clean export:** every package is returned as a flat row ready for CSV, JSON, Excel, or XML.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Pub.dev data

**📈 Track package popularity.**

A Flutter developer runs the Actor weekly for 'state management' and watches which packages gain or lose ground before choosing a dependency.

**🔍 Audit the ecosystem.**

A Dart package maintainer searches their own package's category and compares scores and publishers to find gaps they can fill.

**🧩 Build a package directory.**

A dev tool startup scrapes thousands of packages by keyword and feeds the flat rows into their own searchable catalog.

**📊 Research a technology niche.**

A market researcher collects all packages matching 'firebase' and analyzes the results to understand the competitive landscape.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API key** | Reads the public pub.dev search directly, no registration or OAuth |
| **Fixed schema** | Every package returns the same fields, so your dataset is always consistent |
| **Scales to a million** | Collect a handful of packages or the entire search result set |
| **Export anywhere** | CSV, JSON, Excel, or XML, ready for your pipeline |

### How it compares

This Actor focuses on keyword search and high-volume collection, while the competitors below offer additional filters like publisher or trending browsing.

| Feature | ParseForge | Pub.dev Scraper | pub.dev Scraper - Dart Package Metadata | FlutterFlow Marketplace Scraper |
|---|---|---|---|---|
| Keyword search | Yes | Yes | Yes | Yes |
| Browse top packages | Yes | Yes | Not listed | Not listed |
| Fetch by publisher | Not listed | Yes | Not listed | Yes |
| Filter by SDK or platform | Not listed | Not listed | Not listed | Yes |
| Max items up to 1,000,000 | Yes | Not listed | Not listed | Not listed |
| Returns pub scores | Yes | Yes | Yes | Yes |
| Returns weekly downloads | Not listed | Not listed | Not listed | Yes |

### Configure the run

Drive the Actor from a single keyword or leave it empty for top packages, and set maxItems to control how many packages are collected per run. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10
}
```

A larger pull:

```json
{
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.021 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Pub.dev Scraper](https://apify.com/parseforge/pub-dev-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Pub.dev through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/pub-dev-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check your searchQuery. Pub.dev search is keyword-based, so try a broader term or leave the query empty to see top packages. Also ensure maxItems is at least 1.

**Why are some packages missing fields?**

Pub.dev does not always show every field for every package. If a field is empty in the source, it will be empty in your dataset.

**Why did the run stop before reaching maxItems?**

The Actor stops when there are no more packages matching your query. Try a different keyword or leave the query empty to get more results.

**Can I get more than 1,000,000 packages?**

No, 1,000,000 is the hard maximum per run. If you need more, split your query into multiple runs with different keywords.

**Why is the export file empty?**

If the run returned no packages, the export will be empty. Check your searchQuery and try again with a more common term.

### FAQ

| Question | Answer |
|---|---|
| Do I need a pub.dev API key? | No. This Actor reads the public search results directly, so there is no registration or authentication. |
| What data does each package row include? | Each row includes the package name, version, description, publisher, and computed scores like likes and popularity, as available on pub.dev. |
| Can I scrape all packages on pub.dev? | Yes. Set maxItems to a high number and leave the search query empty to browse top packages, or use a broad keyword to cover a large subset. |
| How do I search for a specific package? | Enter the package name or a keyword in the searchQuery field. The Actor returns all packages that match pub.dev's search ranking. |
| What export formats are supported? | The Actor outputs a standard dataset that you can export to CSV, JSON, Excel, or XML from the Apify platform. |
| Is there a limit on how many packages I can scrape? | You can set maxItems up to 1,000,000 packages per run. The only practical limit is the number of packages that match your query on pub.dev. |
| Does this work for Flutter packages only? | No, it works for all Dart packages on pub.dev, including those that are Flutter-specific. The search covers the entire repository. |
| Can I filter by publisher or SDK? | This Actor currently supports keyword search only. For publisher or SDK filtering, consider a more specialized scraper. |
| How often is the data updated? | The Actor reads live data from pub.dev on each run, so you always get the current search results. |
| Can I schedule this Actor to run automatically? | Yes, you can schedule it on the Apify platform to run daily, weekly, or at any interval you need. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by The Dart project authors. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `searchQuery` (type: `string`):

Search packages by keyword (e.g. 'http', 'state management', 'firebase'). Leave empty to browse top packages.

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

How many packages to collect per run.

## Actor input object example

```json
{
  "maxItems": 10
}
```

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/pub-dev-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/pub-dev-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 '{
  "maxItems": 10
}' |
apify call parseforge/pub-dev-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/pub-dev-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/Xvok6U9b3cGg4GEbK/builds/4CVlMhxKUhSjjdKlb/openapi.json
