# How Plugins Are Categorized in the OpenAI Marketplace: A Technical Guide

> Learn how OpenAI automatically categorizes plugins in its marketplace using manifest files. Discover the technical details behind search, filtering, and UI organization in this guide.

- Repository: [OpenAI/plugins](https://github.com/openai/plugins)
- Tags: how-to-guide
- Published: 2026-06-24

---

**The OpenAI Marketplace groups each plugin by a single, human-readable category declared in the plugin's manifest file, aggregating these declarations into a fixed taxonomy that powers search, filtering, and UI organization.**

The `openai/plugins` repository defines a strict categorization system that controls how plugins appear in the OpenAI Marketplace. Each plugin declares its category within a JSON manifest located in the plugin directory, and the marketplace aggregates these declarations into a central catalogue. Understanding this taxonomy is essential for developers building integrations or analyzing the plugin ecosystem.

## Where Category Data Is Stored

### Individual Plugin Manifests

Every plugin ships a manifest file—typically located at [`.codex-plugin/plugin.json`](https://github.com/openai/plugins/blob/main/.codex-plugin/plugin.json) or [`.app.json`](https://github.com/openai/plugins/blob/main/.app.json)—that contains a `"category"` field. For example, in [`plugins/zoom/.codex-plugin/plugin.json`](https://github.com/openai/plugins/blob/main/plugins/zoom/.codex-plugin/plugin.json), the manifest declares:

```json
"category": "Communication"

```

This value is set by the plugin author and determines where the plugin appears in the marketplace taxonomy. Similarly, [`plugins/stripe/.codex-plugin/plugin.json`](https://github.com/openai/plugins/blob/main/plugins/stripe/.codex-plugin/plugin.json) uses `"category": "Finance"`, while [`plugins/hugging-face/.codex-plugin/plugin.json`](https://github.com/openai/plugins/blob/main/plugins/hugging-face/.codex-plugin/plugin.json) declares `"Developer Tools"`.

### The Central Marketplace Catalogue

The marketplace aggregates all plugins into a single catalogue file located at [`.agents/plugins/marketplace.json`](https://github.com/openai/plugins/blob/main/.agents/plugins/marketplace.json). This JSON file maps each plugin name to its declared category. The entry for the Zoom plugin appears as:

```json
"name": "zoom", "category": "Communication"

```

The UI reads from this central file to render category groupings and search filters.

## The Fixed Category Taxonomy

The OpenAI Marketplace uses a fixed set of categories that serve as the official taxonomy. These categories are **not** computed dynamically but are explicitly declared by authors and validated against the marketplace schema. The current categories observed in the source tree include:

- **Communication**: zoom, gmail, slack, teams, outlook-email, fireflies
- **Productivity**: linear, atlassian-rovo, sharepoint, outlook-calendar, clickup
- **Developer Tools**: hugging-face, vercel, netlify, coderabbit, supabase
- **Finance**: stripe, alpaca, binance, quickbooks, taxdown
- **Data & Analytics**: posthog, amplitude, mixpanel, omni-analytics
- **Creativity**: canva, remotion, hyperframes, shutterstock
- **Education & Research**: zotero, readwise, life-science-research
- **Travel**: finn, weatherpromise
- **Business & Operations**: zoominfo, outreach, docusign, hubspot
- **Security**: codex-security
- **Other**: cogedim

## How to Read and Query Category Data

Developers can programmatically access category information using the marketplace catalogue or individual manifest files.

### Python: Group Plugins by Category

The following script loads [`.agents/plugins/marketplace.json`](https://github.com/openai/plugins/blob/main/.agents/plugins/marketplace.json) and organizes plugins by their declared categories:

```python
import json
from collections import defaultdict
from pathlib import Path

# Load the marketplace JSON (the path is relative to the repo root)

marketplace_path = Path(" .agents/plugins/marketplace.json")
data = json.loads(marketplace_path.read_text())

# Build a dict {category: [plugin names]}

by_category = defaultdict(list)
for entry in data["plugins"]:
    cat = entry.get("category", "Uncategorized")
    by_category[cat].append(entry["name"])

# Print the categories and the first few plugins in each

for cat, plugins in by_category.items():
    print(f"{cat}: {', '.join(plugins[:5])}")

```

### Node.js: Extract Category from a Single Plugin

To read a specific plugin's category directly from its manifest:

```javascript
const fs = require('fs');
const path = require('path');

function getCategory(pluginName) {
  const manifestPath = path.join(
    __dirname,
    'plugins',
    pluginName,
    '.codex-plugin',
    'plugin.json'
  );
  const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
  return manifest.interface?.category || manifest.category;
}

// Example: get the category for the Zoom plugin
console.log('Zoom category →', getCategory('zoom'));

```

### Shell: Filter by Category

Use `jq` to list all plugins in a specific category from the command line:

```bash
jq -r '.plugins[] | select(.category=="Developer Tools") | .name' \
    .agents/plugins/marketplace.json

```

## Summary

- Categories are declared in individual plugin manifests at [`.codex-plugin/plugin.json`](https://github.com/openai/plugins/blob/main/.codex-plugin/plugin.json) using the `"category"` field.
- The central catalogue at [`.agents/plugins/marketplace.json`](https://github.com/openai/plugins/blob/main/.agents/plugins/marketplace.json) aggregates all plugin-category mappings.
- The taxonomy is fixed and includes Communication, Productivity, Developer Tools, Finance, and other human-readable labels.
- Developers can query categories programmatically using Python, Node.js, or shell tools against the JSON files in the `openai/plugins` repository.

## Frequently Asked Questions

### Where is the category defined for an OpenAI plugin?

The category is defined in the plugin's manifest file, typically located at `plugins/{name}/.codex-plugin/plugin.json`. The `"category"` field contains a human-readable string such as "Communication" or "Developer Tools" that determines the plugin's placement in the marketplace UI.

### Can a plugin belong to multiple categories?

No, each plugin is assigned to exactly one category. The marketplace schema uses a single `"category"` value per plugin entry in the central catalogue, and the UI groups plugins accordingly without supporting multi-category tagging.

### How does the marketplace UI use the category field?

The UI reads the aggregated data from [`.agents/plugins/marketplace.json`](https://github.com/openai/plugins/blob/main/.agents/plugins/marketplace.json) to generate filtered views and search facets. When a user selects a category filter, the interface displays only plugins whose manifest-declared category matches the selected value.

### Is the category list extensible or fixed?

The category taxonomy is fixed and serves as the official schema for the marketplace. While plugin authors select from this predefined list, they cannot create arbitrary new categories; the marketplace validates entries against the established Communication, Productivity, Developer Tools, and other defined groups.