# Flathub Linux App Store Scraper (`crawlerbros/flathub-scraper`) Actor

Scrape Flathub - the central app store for Linux Flatpak applications. Browse popular apps, newly added apps, recently updated apps, search by keyword, or filter by category. Returns app metadata including name, description, developer, license, version, and install counts.

- **URL**: https://apify.com/crawlerbros/flathub-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Developer tools, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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

## Flathub Linux App Store Scraper

Extract structured data from [Flathub](https://flathub.org) — the official app store for Linux Flatpak applications. Browse popular apps, newly added apps, recently updated apps, search by keyword, or filter by any of the 10 supported categories. No account or API key required.

### What is Flathub?

Flathub is the central distribution platform for Linux desktop applications packaged as Flatpaks. It hosts thousands of apps across categories like games, developer tools, multimedia, and office software — all installable on any Linux distribution. This actor scrapes Flathub's public REST API to deliver machine-readable app metadata.

### What data can you get?

Each record contains:

| Field | Description |
|---|---|
| `app_id` | Flatpak application ID, e.g. `org.gimp.GIMP` |
| `name` | App display name |
| `summary` | One-line description |
| `description` | Full description (HTML stripped) |
| `developer_name` | Name of the developer or team |
| `main_category` | Primary Flathub category |
| `categories` | All assigned category tags |
| `icon_url` | App icon image URL |
| `homepage` | Project homepage URL |
| `flathub_url` | Direct link to the app on Flathub |
| `installs_last_month` | Approximate install count over the past 30 days |
| `license` | SPDX license identifier (e.g. `GPL-3.0+`) |
| `version` | Latest published version |
| `added_at` | ISO timestamp when the app was added to Flathub |
| `updated_at` | ISO timestamp of the most recent update |
| `scrapedAt` | ISO timestamp when this record was collected |

Fields are omitted when not available — no null values are emitted.

### Input options

| Parameter | Type | Description |
|---|---|---|
| `mode` | select | What to fetch — see modes below |
| `query` | string | Keyword search query (for `search` mode) |
| `category` | select | Category filter — used in `search` and `byCategory` modes |
| `maxItems` | integer | Max records to return (default: 100, max: 2000) |

#### Modes

- **popular** *(default)*: Top apps by install count over the past month
- **new**: Newest apps added to Flathub, sorted by date added
- **recentlyUpdated**: Apps with the most recent releases
- **search**: Search apps by keyword and/or category
- **byCategory**: Browse all apps in a specific category

#### Categories

Audio-Video (Multimedia), Development (Developer Tools), Education, Game (Games), Graphics, Network (Networking), Office, Science, System, Utility (Utilities)

### Example inputs

**Fetch top 50 popular apps:**
```json
{
  "mode": "popular",
  "maxItems": 50
}
````

**Search for video editors:**

```json
{
  "mode": "search",
  "query": "video editor",
  "maxItems": 20
}
```

**Browse all games:**

```json
{
  "mode": "byCategory",
  "category": "Game",
  "maxItems": 200
}
```

**Newest developer tools:**

```json
{
  "mode": "new",
  "category": "Development",
  "maxItems": 30
}
```

### Example output

```json
{
  "app_id": "org.gimp.GIMP",
  "name": "GNU Image Manipulation Program",
  "summary": "High-end image creation and manipulation",
  "description": "GIMP is an acronym for GNU Image Manipulation Program. It is Community-driven Free Software for high-end image creation and manipulation.",
  "developer_name": "The GIMP team",
  "main_category": "Graphics",
  "categories": ["Graphics", "2DGraphics", "RasterGraphics"],
  "icon_url": "https://dl.flathub.org/media/org/gimp/GIMP/.../icons/128x128/org.gimp.GIMP.png",
  "homepage": "https://www.gimp.org/",
  "flathub_url": "https://flathub.org/apps/org.gimp.GIMP",
  "installs_last_month": 120000,
  "license": "GPL-3.0+ AND LGPL-3.0+",
  "version": "3.2.4",
  "added_at": "2020-09-13T12:26:40+00:00",
  "updated_at": "2024-11-15T09:14:44+00:00",
  "scrapedAt": "2026-06-04T10:00:00+00:00",
  "recordType": "app"
}
```

### Use cases

- **Linux software directories**: Build searchable catalogs of Linux applications
- **App market research**: Analyze install trends, popular categories, and developer activity
- **Portfolio tracking**: Monitor install growth for your own Flathub apps
- **Academic research**: Study the open-source Linux app ecosystem
- **Competitive analysis**: Identify gaps and opportunities in app categories

### Technical notes

- Uses the [Flathub public REST API](https://flathub.org/api/v2/) — no authentication required
- No proxy or cookies needed; the API is freely accessible
- Respects rate limits with exponential backoff on 429/5xx responses
- All output fields guaranteed non-null — empty fields are omitted
- Maximum 2000 records per run (paginated automatically)

### FAQ

**Do I need a Flathub account to use this actor?**
No. The Flathub API is fully public and requires no authentication.

**How current is the data?**
Data is fetched live from Flathub at the time of each run. Install counts are updated monthly by Flathub.

**What does the `app_id` field look like?**
Flatpak app IDs follow a reverse-DNS convention, e.g. `org.gimp.GIMP`, `com.spotify.Client`, `io.github.Eloston.UngoogledChromium`.

**Can I filter by multiple categories at once?**
Currently one category per run. For multiple categories, start separate runs and merge the datasets.

**How many apps are on Flathub?**
Flathub hosts thousands of apps. The `byCategory` mode or an empty `search` query will paginate through all available apps up to your `maxItems` limit.

**Are the icon URLs stable?**
Icon URLs point to Flathub's CDN (`dl.flathub.org`) and are stable for the lifetime of a given app version.

# Actor input Schema

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

What to fetch from Flathub.

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

Keyword search query (used when mode=search).

## `category` (type: `string`):

Filter results by Flathub category (used in search and byCategory modes).

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

Maximum number of app records to return.

## Actor input object example

```json
{
  "mode": "popular",
  "query": "video editor",
  "category": "Development",
  "maxItems": 100
}
```

# Actor output Schema

## `apps` (type: `string`):

Dataset containing all scraped Flathub app records.

# 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": "popular",
    "query": "video editor",
    "category": "Development",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/flathub-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": "popular",
    "query": "video editor",
    "category": "Development",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/flathub-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": "popular",
  "query": "video editor",
  "category": "Development",
  "maxItems": 100
}' |
apify call crawlerbros/flathub-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Flathub Linux App Store Scraper",
        "description": "Scrape Flathub - the central app store for Linux Flatpak applications. Browse popular apps, newly added apps, recently updated apps, search by keyword, or filter by category. Returns app metadata including name, description, developer, license, version, and install counts.",
        "version": "1.0",
        "x-build-id": "07FoGmqQKsBXvv1hQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~flathub-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-flathub-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~flathub-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-flathub-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~flathub-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-flathub-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": [
                            "popular",
                            "new",
                            "recentlyUpdated",
                            "search",
                            "byCategory"
                        ],
                        "type": "string",
                        "description": "What to fetch from Flathub.",
                        "default": "popular"
                    },
                    "query": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword search query (used when mode=search)."
                    },
                    "category": {
                        "title": "Category",
                        "enum": [
                            "Audio-Video",
                            "Development",
                            "Education",
                            "Game",
                            "Graphics",
                            "Network",
                            "Office",
                            "Science",
                            "System",
                            "Utility"
                        ],
                        "type": "string",
                        "description": "Filter results by Flathub category (used in search and byCategory modes).",
                        "default": "Development"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of app records to return.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
