# FlutterFlow Marketplace Scraper (`crawlerbros/flutterflow-marketplace-scraper`) Actor

Scrape Flutter/Dart packages from pub.dev - the registry powering FlutterFlow widgets. Search by keyword, browse by SDK or platform tag, fetch by name, or list by publisher. Returns version, pub scores, likes, weekly downloads, platforms, and URLs. No auth required.

- **URL**: https://apify.com/crawlerbros/flutterflow-marketplace-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## FlutterFlow Marketplace Scraper

Scrape Flutter and Dart packages from **pub.dev** — the official package registry powering FlutterFlow's custom widget, action, and integration ecosystem. Search by keyword, browse by SDK tag or platform, fetch packages by name, or list all packages by a publisher. Returns version, description, pub scores, likes, weekly downloads, supported platforms, repository links, and direct URLs.

> **Data Source:** FlutterFlow Marketplace (`https://marketplace.flutterflow.io`) has no public API — it is a JavaScript SPA with no accessible data endpoints. This actor uses the **pub.dev public API** as the authoritative source for Flutter/Dart packages, which is the underlying package registry from which FlutterFlow's custom widgets and actions are sourced.

### What this actor does

- **Four modes:** `search`, `browse`, `getById`, `byPublisher`
- **Rich scoring:** pub points (0–160), likes, weekly downloads, popularity
- **Platform breakdown:** Android, iOS, Web, Windows, macOS, Linux
- **SDK filtering:** Flutter packages, Dart-only, Flutter Favorites, null-safe, wasm-ready
- **No auth or proxy required** — uses pub.dev's fully public API
- **Empty fields are omitted** from every record

### Output per package

| Field | Type | Description |
|---|---|---|
| `package` | string | Package identifier (e.g. `"provider"`) |
| `version` | string | Latest version (e.g. `"6.1.5"`) |
| `description` | string | Package description |
| `sdk` | string | Primary SDK: `"flutter"` or `"dart"` |
| `platforms` | array | Supported platforms: `["android", "ios", "web", ...]` |
| `likes` | integer | Number of likes on pub.dev |
| `pubPoints` | integer | Pub score out of 160 |
| `maxPubPoints` | integer | Maximum possible pub points |
| `weeklyDownloads` | integer | Downloads in the past 30 days |
| `tags` | array | All pub.dev tags (e.g. `["sdk:flutter", "is:flutter-favorite"]`) |
| `isDiscontinued` | boolean | Whether package is discontinued |
| `homepage` | string | Project homepage URL |
| `repository` | string | Source code repository URL |
| `issueTracker` | string | Issue tracker URL |
| `documentation` | string | Documentation URL |
| `dartSdkConstraint` | string | Dart SDK version constraint |
| `flutterConstraint` | string | Flutter version constraint |
| `publishedAt` | string | ISO timestamp of latest version |
| `archiveUrl` | string | Direct download URL for latest version |
| `pubDevUrl` | string | Package page on pub.dev |
| `sourceUrl` | string | Same as pubDevUrl |
| `recordType` | string | Always `"package"` |
| `scrapedAt` | string | UTC timestamp when scraped |

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `browse` | `search` / `browse` / `getById` / `byPublisher` |
| `query` | string | `flutter widget` | Keyword to search for (mode=search) |
| `sdkTag` | string | `flutter` | SDK filter: `flutter`, `dart`, `flutter-favorite`, `wasm-ready`, `null-safe` |
| `platform` | string | – | Platform filter: `android`, `ios`, `web`, `windows`, `macos`, `linux` |
| `ids` | array | – | Package names to fetch (mode=getById) |
| `publisherId` | string | – | Publisher domain (mode=byPublisher). E.g. `flutter.dev`, `dart.dev` |
| `minLikes` | integer | – | Only emit packages with ≥ this many likes |
| `minPubPoints` | integer | – | Only emit packages with ≥ this pub score |
| `maxItems` | integer | `100` | Hard cap on emitted records (1–10000) |

### Example inputs

#### Browse Flutter Favorites

```json
{
  "mode": "browse",
  "sdkTag": "flutter-favorite",
  "maxItems": 50
}
````

#### Search for state management packages

```json
{
  "mode": "search",
  "query": "state management",
  "sdkTag": "flutter",
  "maxItems": 20
}
```

#### Fetch specific packages by name

```json
{
  "mode": "getById",
  "ids": ["provider", "riverpod", "bloc", "get", "mobx"],
  "maxItems": 10
}
```

#### Get all packages by Flutter team publisher

```json
{
  "mode": "byPublisher",
  "publisherId": "flutter.dev",
  "maxItems": 100
}
```

#### Browse high-quality Flutter packages for iOS + Android

```json
{
  "mode": "browse",
  "sdkTag": "flutter",
  "platform": "ios",
  "minLikes": 500,
  "minPubPoints": 120,
  "maxItems": 50
}
```

### Use cases

- **FlutterFlow development:** Find Flutter packages to use as custom widgets or actions in FlutterFlow projects
- **Package discovery:** Discover popular Flutter packages by platform, SDK, or category
- **Competitive analysis:** Track pub scores, likes, and download trends for Flutter packages
- **Publisher monitoring:** List all packages from specific publishers (Google, Dart team, etc.)
- **Quality filtering:** Find only high-quality packages with minimum pub points or likes

### FAQ

**Q: Why does this use pub.dev instead of the FlutterFlow marketplace directly?**
A: The FlutterFlow Marketplace (`https://marketplace.flutterflow.io`) has no public API — it is a JavaScript single-page application with no accessible data endpoints. pub.dev is the official Dart/Flutter package registry and the source from which FlutterFlow's custom widget ecosystem is built.

**Q: Does this require an API key or authentication?**
A: No. The pub.dev API is fully public with no authentication required.

**Q: How many packages are available on pub.dev?**
A: pub.dev hosts over 40,000 packages.

**Q: What is the difference between `likes` and `pubPoints`?**
A: `likes` is a community engagement metric (users clicking the like button). `pubPoints` is an automated quality score (0–160) evaluating documentation, static analysis, platform support, and dependency health.

**Q: What are Flutter Favorites?**
A: Flutter Favorites are packages manually curated by the Flutter team as especially high-quality and recommended. Use `sdkTag: "flutter-favorite"` to browse them.

**Q: Can I filter to packages that support only specific platforms?**
A: Yes, use the `platform` input to filter to packages supporting a specific platform (android, ios, web, windows, macos, linux).

# Actor input Schema

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

What to fetch from pub.dev.

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

Keyword to search for (mode=search). Example: animation, state management, firebase, chart.

## `sdkTag` (type: `string`):

Filter packages by SDK tag or special tag. Use 'flutter' for Flutter packages, 'dart' for Dart-only, 'flutter-favorite' for curated favorites.

## `platform` (type: `string`):

Filter to packages supporting a specific platform.

## `ids` (type: `array`):

Exact pub.dev package names to fetch. Example: \["provider", "dio", "riverpod"].

## `publisherId` (type: `string`):

Publisher domain to list all packages for. Example: flutter.dev, dart.dev, google.dev.

## `minLikes` (type: `integer`):

Only emit packages with at least this many likes.

## `minPubPoints` (type: `integer`):

Only emit packages with at least this pub score (0-160).

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "browse",
  "query": "flutter widget",
  "sdkTag": "flutter",
  "platform": "",
  "ids": [],
  "publisherId": "flutter.dev",
  "maxItems": 5
}
```

# Actor output Schema

## `packages` (type: `string`):

Dataset containing all scraped Flutter/Dart packages.

# 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 = {
    "mode": "browse",
    "query": "flutter widget",
    "sdkTag": "flutter",
    "platform": "",
    "ids": [],
    "publisherId": "flutter.dev",
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/flutterflow-marketplace-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 = {
    "mode": "browse",
    "query": "flutter widget",
    "sdkTag": "flutter",
    "platform": "",
    "ids": [],
    "publisherId": "flutter.dev",
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/flutterflow-marketplace-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 '{
  "mode": "browse",
  "query": "flutter widget",
  "sdkTag": "flutter",
  "platform": "",
  "ids": [],
  "publisherId": "flutter.dev",
  "maxItems": 5
}' |
apify call crawlerbros/flutterflow-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "FlutterFlow Marketplace Scraper",
        "description": "Scrape Flutter/Dart packages from pub.dev - the registry powering FlutterFlow widgets. Search by keyword, browse by SDK or platform tag, fetch by name, or list by publisher. Returns version, pub scores, likes, weekly downloads, platforms, and URLs. No auth required.",
        "version": "1.0",
        "x-build-id": "9tMTrlVpYPJzO82oP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~flutterflow-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-flutterflow-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~flutterflow-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-flutterflow-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~flutterflow-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-flutterflow-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "browse",
                            "getById",
                            "byPublisher"
                        ],
                        "type": "string",
                        "description": "What to fetch from pub.dev.",
                        "default": "browse"
                    },
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword to search for (mode=search). Example: animation, state management, firebase, chart."
                    },
                    "sdkTag": {
                        "title": "SDK / tag filter (mode=browse)",
                        "enum": [
                            "flutter",
                            "dart",
                            "flutter-favorite",
                            "wasm-ready",
                            "null-safe"
                        ],
                        "type": "string",
                        "description": "Filter packages by SDK tag or special tag. Use 'flutter' for Flutter packages, 'dart' for Dart-only, 'flutter-favorite' for curated favorites.",
                        "default": "flutter"
                    },
                    "platform": {
                        "title": "Target platform filter",
                        "enum": [
                            "",
                            "android",
                            "ios",
                            "web",
                            "windows",
                            "macos",
                            "linux"
                        ],
                        "type": "string",
                        "description": "Filter to packages supporting a specific platform.",
                        "default": ""
                    },
                    "ids": {
                        "title": "Package names (mode=getById)",
                        "type": "array",
                        "description": "Exact pub.dev package names to fetch. Example: [\"provider\", \"dio\", \"riverpod\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "publisherId": {
                        "title": "Publisher domain (mode=byPublisher)",
                        "type": "string",
                        "description": "Publisher domain to list all packages for. Example: flutter.dev, dart.dev, google.dev."
                    },
                    "minLikes": {
                        "title": "Minimum likes",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Only emit packages with at least this many likes."
                    },
                    "minPubPoints": {
                        "title": "Minimum pub points",
                        "minimum": 0,
                        "maximum": 160,
                        "type": "integer",
                        "description": "Only emit packages with at least this pub score (0-160)."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
