# Zoom Marketplace Scraper (`maximedupre/zoom-marketplace-scraper`) Actor

Scrape public Zoom Marketplace apps by search, product, browse, app ID, or app URL. Export app names, developers, ratings, categories, product rank, FedRAMP and Essential App flags, privacy/support links, and OAuth scopes.

- **URL**: https://apify.com/maximedupre/zoom-marketplace-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.01 / 1,000 scraped apps

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

### 🔎 Zoom Marketplace Scraper for app research

Zoom Marketplace Scraper collects public app listings from the [Zoom App Marketplace](https://marketplace.zoom.us/) so you can research Zoom apps, integration partners, permissions, ratings, and product rank without opening every listing by hand. Search by keyword, browse the public directory, filter by one Zoom product, or audit known app IDs and URLs, then export clean rows for analysis.

- Use the [zoom meeting](https://apify.com/maximedupre/zoom-marketplace-scraper/examples/zoom-meeting-apps) product target to review Zoom Meeting apps and keep source rank context.
- Search for [zoom workplace app](https://apify.com/maximedupre/zoom-marketplace-scraper/examples/zoom-workplace-apps) ideas when mapping apps that connect to Zoom Workplace.
- Review [zoom app](https://apify.com/maximedupre/zoom-marketplace-scraper/examples/zoom-app-marketplace-research) listings for categories, developers, ratings, and public permission scopes.
- Compare public marketplace facts before deciding whether a [Zoom API](https://apify.com/maximedupre/zoom-marketplace-scraper/examples/zoom-api-marketplace-research) workflow is worth building.
- Audit [Zoom App Marketplace permissions](https://apify.com/maximedupre/zoom-marketplace-scraper/examples/zoom-app-marketplace-permissions) for known app IDs or listing URLs before approving integrations.

#### 📦 Returned data

Each saved row is one public Zoom Marketplace app. Depending on what Zoom exposes for that app, rows can include:

- `appId`, `name`, `description`, and `iconUrl`
- `developer.name`, `developer.businessName`, `developer.businessEmail`, `developer.privacyPolicyUrl`, and `developer.supportUrl`
- `zoomProducts` and `zoomSurfaces`
- `usage`
- `fedRampAuthorized` and `essentialApp`
- `categories`
- `rating.average`, `rating.total`, and `rating.starCounts`
- `rank.product` and `rank.position` for product-target runs
- `permissions.scopesByCategory` when public OAuth scopes are available

The Actor keeps source-native IDs and labels. If Zoom Marketplace does not expose a fact for a public app, the field stays `null` or empty instead of being guessed.

#### 🚀 How to run

1. Open the Actor input.
2. Fill exactly one target section: browse all apps, search queries, one Zoom product, or app IDs/URLs.
3. Set **Maximum apps** to a small number for your first run.
4. Start the Actor and open the dataset.

You do not need a Zoom login, Zoom API key, cookies, or OAuth token. For a quick first run, keep the prefilled `zoom` search target and leave the shared filters on their defaults.

#### 🎯 Input

Use **Search queries** when you want matching Zoom apps for phrases such as `scheduling`, `ai notetaker`, `crm`, or `zoom`.

Use **Browse all Marketplace apps** when you want the public directory in Zoom's default order.

Use **Zoom product** when you need product-specific apps and rank context. Supported products include Zoom Meeting, Zoom Phone, Zoom Webinar, Zoom Chat, Zoom Rooms, Zoom Events, Zoom Whiteboard, Zoom IQ, and Zoom Contact Center.

Use **Zoom app IDs or URLs** when you already know the listings to audit, such as:

- `PN3rVBK6R0aXBU5Fw2i6aQ`
- `https://marketplace.zoom.us/apps/PN3rVBK6R0aXBU5Fw2i6aQ`

Shared options apply to browse, search, and product targets. You can filter by usage type, keep only FedRAMP-authorized apps, keep only Essential Apps, and set the maximum number of apps to save.

#### 🧾 Output example

```json
{
	"appId": "PN3rVBK6R0aXBU5Fw2i6aQ",
	"name": "Glean Search Crawler for Zoom",
	"developer": {
		"name": "Glean",
		"businessName": "Glean Technologies, Inc.",
		"businessEmail": "team@glean.com",
		"privacyPolicyUrl": "https://www.glean.com/privacy-policy",
		"supportUrl": "https://support.glean.com/hc/en-us"
	},
	"description": "Know what your company knows, instantly. Search across your meetings and recordings.",
	"iconUrl": "https://marketplacecontent-cf.zoom.us/example.png",
	"zoomProducts": ["ZOOM_MEETING"],
	"zoomSurfaces": [],
	"usage": "ADMIN_MANAGEMENT",
	"fedRampAuthorized": false,
	"essentialApp": false,
	"categories": ["Other", "Productivity"],
	"rating": null,
	"rank": {
		"product": "ZOOM_MEETING",
		"position": 1
	},
	"permissions": {
		"scopesByCategory": {
			"User": ["user:read:user:admin"],
			"Meetings": ["meeting:read:meeting:admin"]
		}
	}
}
````

For browse and search runs, `rank` is `null`. When Zoom does not expose public scopes for an app, `permissions` is `null`.

#### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged once for each saved Zoom Marketplace app.

One saved app can include listing data, product rank, ratings, developer facts, and public permission data. Empty runs, invalid mixed-target inputs, skipped duplicates, and apps that are not saved as dataset rows are not charged as app events.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

- Run the Actor through the Apify API for repeatable Zoom app data exports.
- Schedule recurring runs to monitor marketplace changes over time.
- Export datasets as JSON, CSV, Excel, XML, RSS, or HTML.
- Send finished-run data to webhooks or downstream BI and review workflows.

#### ❓ FAQ

##### 🔐 Do I need a Zoom account?

No. The Actor collects public Zoom Marketplace listing data and does not ask for Zoom cookies, a Zoom API key, an OAuth token, or a Zoom login.

##### 🔎 Can I search Zoom apps by keyword?

Yes. Fill the **Search queries** target with one or more phrases. The Actor saves matching public Zoom Marketplace apps up to your maximum app limit.

##### 📊 Can I track app rank for a Zoom product?

Yes. Use the **Zoom product** target. Rows from that target include `rank.product` and `rank.position` based on Zoom's public product listing order.

##### 🔐 Does it return OAuth permissions?

Yes, when Zoom exposes public permission scopes for the app. The output groups scopes under `permissions.scopesByCategory`.

##### 📭 Why are some fields null?

Zoom Marketplace does not expose every fact for every app. The Actor keeps unavailable fields as `null` or empty arrays instead of inventing values.

##### 🧩 Why not use the Zoom API?

The Zoom API is useful for authenticated Zoom account workflows. This Actor is for public marketplace research: app discovery, product rank, developer facts, ratings, and public OAuth scopes without a Zoom account or API key.

##### 🧭 What are Zoom Marketplace alternatives?

For broader app and software research, you can compare Zoom Marketplace data with other public directories such as the Chrome Web Store, Google Play Store, Apple App Store, ChatGPT Marketplace, and G2. This Actor only collects public Zoom Marketplace apps.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~zoom-marketplace-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [ChatGPT Marketplace Scraper ↗](https://apify.com/maximedupre/chatgpt-marketplace-scraper) - Export public custom GPT listings, creators, categories, usage metrics, and source ranks.
- [Chrome Extensions Scraper ↗](https://apify.com/maximedupre/chrome-extensions-scraper) - Collect Chrome Web Store extension listings, publishers, manifests, permissions, and media.
- [Google Play Store Scraper ↗](https://apify.com/maximedupre/google-play-store-scraper) - Scrape Android app data, reviews, permissions, and Data Safety disclosures.
- [Apple App Store Scraper ↗](https://apify.com/maximedupre/apple-app-store-scraper) - Export public iOS app metadata, charts, ratings, and review data.
- [G2 Products Scraper ↗](https://apify.com/maximedupre/g2-products-scraper) - Collect public software product profiles, ratings, categories, vendors, and review data.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `browseAllApps` (type: `boolean`):

Collect apps from the full Zoom Marketplace app directory.

## `searchQueries` (type: `array`):

Keywords to search in Zoom Marketplace app names and descriptions.

## `product` (type: `string`):

Collect apps that work with this Zoom product.

## `appTargets` (type: `array`):

App IDs or full Zoom Marketplace app URLs to audit directly.

## `usage` (type: `string`):

Filter by who installs or manages the app.

## `fedRampOnly` (type: `boolean`):

Keep apps marked as FedRAMP authorized.

## `essentialAppsOnly` (type: `boolean`):

Keep apps marked as Essential Apps by Zoom.

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

Maximum apps to save for browse, search, or product discovery.

## Actor input object example

```json
{
  "browseAllApps": false,
  "searchQueries": [
    "zoom"
  ],
  "usage": "ALL",
  "fedRampOnly": false,
  "essentialAppsOnly": false,
  "maxItems": 150
}
```

# Actor output Schema

## `results` (type: `string`):

Open the default dataset with one saved Zoom Marketplace app per row.

# 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 = {
    "searchQueries": [
        "zoom"
    ],
    "usage": "ALL",
    "maxItems": 150
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/zoom-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 = {
    "searchQueries": ["zoom"],
    "usage": "ALL",
    "maxItems": 150,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/zoom-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 '{
  "searchQueries": [
    "zoom"
  ],
  "usage": "ALL",
  "maxItems": 150
}' |
apify call maximedupre/zoom-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zoom Marketplace Scraper",
        "description": "Scrape public Zoom Marketplace apps by search, product, browse, app ID, or app URL. Export app names, developers, ratings, categories, product rank, FedRAMP and Essential App flags, privacy/support links, and OAuth scopes.",
        "version": "0.0",
        "x-build-id": "H3OZ5kBERDXcscpOT"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~zoom-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-zoom-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/maximedupre~zoom-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-zoom-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/maximedupre~zoom-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-zoom-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",
                "properties": {
                    "browseAllApps": {
                        "title": "Browse all Marketplace apps",
                        "type": "boolean",
                        "description": "Collect apps from the full Zoom Marketplace app directory.",
                        "default": false
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords to search in Zoom Marketplace app names and descriptions.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "product": {
                        "title": "Zoom product",
                        "enum": [
                            "ZOOM_MEETING",
                            "ZOOM_PHONE",
                            "ZOOM_WEBINAR",
                            "ZOOM_CHAT",
                            "ZOOM_ROOM",
                            "ZOOM_EVENTS",
                            "ZOOM_WHITEBOARD",
                            "ZOOM_IQ",
                            "ZOOM_CONTACT_CENTER"
                        ],
                        "type": "string",
                        "description": "Collect apps that work with this Zoom product."
                    },
                    "appTargets": {
                        "title": "Zoom app IDs or URLs",
                        "type": "array",
                        "description": "App IDs or full Zoom Marketplace app URLs to audit directly.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "usage": {
                        "title": "Usage type",
                        "enum": [
                            "ALL",
                            "ADMIN_MANAGEMENT",
                            "USER_OPERATION"
                        ],
                        "type": "string",
                        "description": "Filter by who installs or manages the app.",
                        "default": "ALL"
                    },
                    "fedRampOnly": {
                        "title": "FedRAMP authorized apps only",
                        "type": "boolean",
                        "description": "Keep apps marked as FedRAMP authorized.",
                        "default": false
                    },
                    "essentialAppsOnly": {
                        "title": "Essential Apps only",
                        "type": "boolean",
                        "description": "Keep apps marked as Essential Apps by Zoom.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum apps",
                        "minimum": 1,
                        "maximum": 3419,
                        "type": "integer",
                        "description": "Maximum apps to save for browse, search, or product discovery.",
                        "default": 150
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
