# Google Workspace Marketplace Scraper (`crawlerbros/google-workspace-marketplace-scraper`) Actor

Scrape Google Workspace Marketplace, search apps by keyword, browse by category, or fetch full details for specific app IDs. Extracts app name, developer, rating, reviews, pricing, categories, Works With products, icon, and more.

- **URL**: https://apify.com/crawlerbros/google-workspace-marketplace-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## 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

## Google Workspace Marketplace Scraper

Extract data from the [Google Workspace Marketplace](https://workspace.google.com/marketplace) — no API key, no authentication, no proxy required.

Search for apps by keyword, browse entire categories, or fetch full details for specific app IDs. Every record includes the app's name, developer, star rating, review count, pricing model, supported Google products, categories, last updated date, and icon URL.

---

### What You Can Scrape

| Field | Description | Example |
|---|---|---|
| `appId` | Numeric app identifier | `7081045131` |
| `name` | App display name | `Lucidchart` |
| `developer` | Publisher / developer name | `Lucid Software` |
| `shortDescription` | One-line app summary | `Collaborate on diagrams...` |
| `description` | Full app description | `Overview: Lucid offers...` |
| `rating` | Average star rating (0–5) | `4.1` |
| `reviewCount` | Total number of ratings | `9892` |
| `pricingModel` | Pricing tier | `Free`, `Freemium`, or `Paid` |
| `categories` | App categories | `["Productivity", "Utilities"]` |
| `worksWith` | Google products this app integrates with | `["Google Docs", "Google Drive"]` |
| `lastUpdated` | Date of most recent listing update | `2025-02-10` |
| `appUrl` | Direct link to the app's Marketplace listing | `https://workspace.google.com/...` |
| `iconUrl` | App icon image (hosted by Google) | `https://lh3.googleusercontent.com/...` |
| `scrapedAt` | ISO timestamp of when the record was scraped | `2026-05-20T10:00:00+00:00` |

---

### Input Options

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `mode` | select | Yes | `search` | `search`, `byCategory`, or `byAppId` |
| `searchQuery` | string | For `search` | `mail merge` | Keyword to search for |
| `category` | select | For `byCategory` | — | Category path to browse |
| `appIds` | array | For `byAppId` | — | Numeric app IDs to fetch |
| `maxItems` | integer | No | `50` | Maximum records to emit (1–200) |
| `language` | select | No | `en` | Language for results |

#### Modes

**`search`** — Search the full marketplace by keyword. Returns up to 100 results per search (the marketplace's natural limit), enriched with full detail data.

**`byCategory`** — Browse a specific category. Available categories include:
- `popular-apps`, `top-rated`, `featured-partner-apps`, `recommended`
- `business-tools` (and subcategories: `accounting-and-finance`, `sales-and-crm`, etc.)
- `productivity` (and subcategories: `creative-tools`, `task-management`, etc.)
- `education` (and subcategories: `academic-resources`, `teacher-and-admin-tools`)
- `communication`, `utilities`, `enterprise-apps`

**`byAppId`** — Fetch full details for one or more specific apps by their numeric ID (visible in the Marketplace URL).

---

### Example Output

```json
{
  "appId": "7081045131",
  "name": "Lucidchart",
  "developer": "Lucid Software",
  "shortDescription": "Collaborate on diagrams, such as flowcharts, wireframes, ERDs, and more.",
  "description": "Overview:\nLucid offers the only visual collaboration suite...",
  "rating": 4.1,
  "reviewCount": 9892,
  "pricingModel": "Freemium",
  "categories": ["Productivity"],
  "worksWith": ["Google Chat", "Google Docs", "Google Sheets", "Google Slides", "Google Drive", "Google Calendar"],
  "lastUpdated": "2025-02-10",
  "appUrl": "https://workspace.google.com/marketplace/app/lucidchart/7081045131",
  "iconUrl": "https://lh3.googleusercontent.com/fUX8mArmtyBwpBRudZv3bRAUi3gosJABYbM9l-6aBiAbMGOKyvXZ1g",
  "recordType": "workspace_app",
  "scrapedAt": "2026-05-20T10:00:00.000000+00:00"
}
````

***

### FAQ

**Does this require a Google account or API key?**
No. Google Workspace Marketplace is publicly accessible. This scraper works without any authentication, cookies, or proxy.

**How many apps can I scrape per run?**
Search and category pages return up to 100 apps. Use `maxItems` to control how many are emitted. The `byAppId` mode has no practical limit.

**What does "Freemium" mean in the pricing field?**
Apps labeled "Free of charge with paid features" or "Free of charge trial" are classified as `Freemium`. Apps available at no cost at all are `Free`. Apps requiring payment to use are `Paid`.

**What is the `worksWith` field?**
This lists which Google products the app integrates with — for example: Google Drive, Gmail, Google Sheets, Google Slides, Google Docs, Google Calendar, Google Forms, Google Chat. These come directly from the official listing.

**What is the `categories` field?**
The official Marketplace categories the app belongs to — e.g. `Productivity`, `Education`, `Communication`, `Utilities`, `Business tools`.

**Can I get reviews for each app?**
Reviews are scraped by a companion actor: **Google Workspace Marketplace Reviews Scraper**.

**Why might some fields be absent on some records?**
The actor follows an omit-empty policy: if a field has no value for a given app (e.g. no reviews yet, unlisted pricing), it is omitted from the record rather than set to null.

**Are icon URLs publicly accessible?**
Yes. Icon URLs are hosted at `lh3.googleusercontent.com` and are publicly accessible without authentication.

# Actor input Schema

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

What to scrape. search=keyword search, byCategory=browse a category, byAppId=fetch specific apps.

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

Keyword to search for apps. Required for mode=search.

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

Category path to browse. Required for mode=byCategory.

## `appIds` (type: `array`):

Numeric App IDs to fetch (e.g. 218858140275). Required for mode=byAppId.

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

Maximum number of records to emit.

## `language` (type: `string`):

Optional language for search/category pages.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "mail merge",
  "category": "popular-apps",
  "appIds": [],
  "maxItems": 50,
  "language": "en"
}
```

# Actor output Schema

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

Dataset containing all scraped Workspace Marketplace apps.

# 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": "search",
    "searchQuery": "mail merge",
    "category": "popular-apps",
    "appIds": [],
    "maxItems": 50,
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/google-workspace-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": "search",
    "searchQuery": "mail merge",
    "category": "popular-apps",
    "appIds": [],
    "maxItems": 50,
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/google-workspace-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": "search",
  "searchQuery": "mail merge",
  "category": "popular-apps",
  "appIds": [],
  "maxItems": 50,
  "language": "en"
}' |
apify call crawlerbros/google-workspace-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Workspace Marketplace Scraper",
        "description": "Scrape Google Workspace Marketplace, search apps by keyword, browse by category, or fetch full details for specific app IDs. Extracts app name, developer, rating, reviews, pricing, categories, Works With products, icon, and more.",
        "version": "1.0",
        "x-build-id": "mBHGiVq5TfFad7azD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~google-workspace-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-google-workspace-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~google-workspace-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-google-workspace-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~google-workspace-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-google-workspace-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",
                            "byCategory",
                            "byAppId"
                        ],
                        "type": "string",
                        "description": "What to scrape. search=keyword search, byCategory=browse a category, byAppId=fetch specific apps.",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query (mode=search)",
                        "type": "string",
                        "description": "Keyword to search for apps. Required for mode=search.",
                        "default": "mail merge"
                    },
                    "category": {
                        "title": "Category (mode=byCategory)",
                        "enum": [
                            "popular-apps",
                            "top-rated",
                            "featured-partner-apps",
                            "recommended",
                            "work-from-everywhere",
                            "business-essentials",
                            "apps-to-discover",
                            "google-apps",
                            "business-tools",
                            "business-tools/accounting-and-finance",
                            "business-tools/administration-and-management",
                            "business-tools/erp-and-logistics",
                            "business-tools/hr-and-legal",
                            "business-tools/marketing-and-analytics",
                            "business-tools/sales-and-crm",
                            "productivity",
                            "productivity/creative-tools",
                            "productivity/office-applications",
                            "productivity/task-management",
                            "productivity/web-development",
                            "education",
                            "education/academic-resources",
                            "education/teacher-and-admin-tools",
                            "communication",
                            "utilities",
                            "enterprise-apps"
                        ],
                        "type": "string",
                        "description": "Category path to browse. Required for mode=byCategory.",
                        "default": "popular-apps"
                    },
                    "appIds": {
                        "title": "App IDs (mode=byAppId)",
                        "type": "array",
                        "description": "Numeric App IDs to fetch (e.g. 218858140275). Required for mode=byAppId.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of records to emit.",
                        "default": 50
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "pt",
                            "ja",
                            "zh",
                            "ko",
                            "it",
                            "nl",
                            "pl",
                            "ru",
                            "ar",
                            "tr",
                            "id",
                            "th",
                            "vi",
                            "sv",
                            "da",
                            "fi",
                            "no",
                            "cs",
                            "hu",
                            "ro",
                            "uk"
                        ],
                        "type": "string",
                        "description": "Optional language for search/category pages.",
                        "default": "en"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
