# HubSpot App Marketplace Scraper - Apps, Pricing, Certification (`jungle_synthesizer/hubspot-app-marketplace-scraper`) Actor

Scrape the HubSpot App Marketplace catalog. Returns app name, category, developer, rating, reviews, pricing model, HubSpot certification flag, and Hub compatibility (Marketing, Sales, Service, CMS, Operations). For agencies, app builders, ecosystem research, and partner analytics.

- **URL**: https://apify.com/jungle\_synthesizer/hubspot-app-marketplace-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## HubSpot App Marketplace Scraper

Scrape the [HubSpot App Marketplace](https://ecosystem.hubspot.com/marketplace/apps) catalog. Returns app name, category, developer, rating, review count, install count, pricing model, HubSpot certification flag, and Hub compatibility (Marketing, Sales, Service, CMS, Operations) for the full marketplace.

---

### HubSpot Marketplace Scraper Features

- Extracts 20 fields per app including tagline, description, install count, and free-trial flag
- Returns pricing model (`free`, `freemium`, `paid`, `contact_us`) plus the lowest paid plan in USD
- Flags HubSpot certification with a real boolean — use `certifiedOnly` to filter at the input stage
- Returns Hub compatibility as an array — Marketing, Sales, Service, CMS, Operations — so you can segment by which Hub an app actually integrates with
- Filter by category slug, scrape specific app URLs directly, or pull the whole catalog
- No proxy required — HubSpot's marketplace serves traffic publicly

---

### Who Uses HubSpot Marketplace Data?

- **App builders and PMs** — Benchmark competitors by category, pricing model, and review count before shipping a new HubSpot integration
- **HubSpot consultancies** — Build curated app shortlists for client recommendations filtered by certification and Hub compatibility
- **Investors and analysts** — Track ecosystem growth: install counts, certification rates, pricing distribution across categories
- **Partner ops at HubSpot competitors** — Map which integrations exist and which categories are underserved
- **Tech journalism** — Watch which apps are gaining traction in install counts versus which are stagnating

---

### How the HubSpot Marketplace Scraper Works

1. **Pick a scope** — Set `category` for a single slug, pass `appUrls` for specific apps, toggle `certifiedOnly`, or leave defaults for the full catalog.
2. **List walk** — The scraper pages through the marketplace listing endpoint, collecting app slugs and skipping pages that have already been seen.
3. **Detail extraction** — Each app's detail page is parsed for pricing model, Hub compatibility, certification badge, and the longer description.
4. **Export** — One record per app in your Apify dataset.

---

### Input

#### Full catalog

```json
{
  "category": "",
  "certifiedOnly": false,
  "maxItems": 0
}
````

#### Certified apps only, single category

```json
{
  "category": "analytics",
  "certifiedOnly": true,
  "maxItems": 200
}
```

#### Specific apps by URL

```json
{
  "appUrls": [
    { "url": "https://ecosystem.hubspot.com/marketplace/apps/sales/lead-gen/zoominfo" },
    { "url": "https://ecosystem.hubspot.com/marketplace/apps/marketing/social/canva" }
  ],
  "maxItems": 2
}
```

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| category | string | — | Category slug (e.g. `analytics`, `email`). Empty = all. |
| certifiedOnly | boolean | `false` | Return only apps with the HubSpot certification badge. |
| appUrls | array | — | Specific marketplace app URLs to scrape directly. Bypasses the listing crawl. |
| maxItems | integer | 15 | Cap on apps returned. `0` = unlimited. |
| proxyConfiguration | object | none | Proxy settings. Off by default. |

***

### HubSpot Marketplace Scraper Output Fields

```json
{
  "app_id": 19583,
  "app_name": "ZoomInfo",
  "slug": "zoominfo",
  "tagline": "Go-to-market intelligence for revenue teams",
  "description": "Surface verified contact data, account intelligence, and intent signals inside HubSpot.",
  "category": "Lead Generation",
  "subcategories": ["Sales Intelligence", "Data Enrichment"],
  "developer_name": "ZoomInfo Technologies",
  "developer_url": "https://www.zoominfo.com",
  "rating": 4.4,
  "reviews_count": 312,
  "install_count": 5800,
  "pricing_model": "paid",
  "pricing_text": "Starts at $14,995/year",
  "pricing_min_usd": 14995,
  "free_trial": true,
  "certified": true,
  "hub_compatibility": ["marketing", "sales", "operations"],
  "app_url": "https://ecosystem.hubspot.com/marketplace/apps/sales/lead-gen/zoominfo",
  "icon_url": "https://ecosystem.hubspot.com/hubfs/zoominfo-icon.png",
  "last_updated": "2026-04-22"
}
```

| Field | Type | Description |
|-------|------|-------------|
| app\_id | number | Numeric listing ID |
| app\_name | string | App name |
| slug | string | URL slug used in `marketplace/apps/{slug}` |
| tagline | string | Short app tagline |
| description | string | App description |
| category | string | Primary category |
| subcategories | array | Additional category labels |
| developer\_name | string | Developer or publisher company name |
| developer\_url | string | Developer website URL |
| rating | number | Average rating on a 0-5 scale |
| reviews\_count | number | Number of reviews |
| install\_count | number | Number of installs |
| pricing\_model | string | `free`, `freemium`, `paid`, or `contact_us` |
| pricing\_text | string | Human-readable pricing summary |
| pricing\_min\_usd | number | Lowest paid plan in USD (0 for free) |
| free\_trial | boolean | At least one plan offers a free trial |
| certified | boolean | Carries the HubSpot certification badge |
| hub\_compatibility | array | Compatible HubSpot Hubs |
| app\_url | string | Marketplace URL |
| icon\_url | string | App icon image URL |
| last\_updated | string | ISO date of the last listing update |

***

### FAQ

#### How do I scrape the HubSpot App Marketplace?

HubSpot Marketplace Scraper handles it. Leave `category` empty and `certifiedOnly` off to pull the entire catalog. Add a category slug or toggle certification to narrow the scope.

#### How much does this actor cost to run?

HubSpot Marketplace Scraper uses pay-per-event pricing on the `default_2603_basic` profile at a 1.0x coefficient. No proxy fees. A full-catalog run costs a few dollars in platform fees.

#### Can I filter to only certified apps?

HubSpot Marketplace Scraper accepts `certifiedOnly: true`. Combined with a `category` filter, that lets you pull, say, every certified analytics app in one run without downstream filtering.

#### Does this return Hub compatibility?

HubSpot Marketplace Scraper returns Hub compatibility as an array containing some subset of `marketing`, `sales`, `service`, `cms`, and `operations`. Useful for routing apps to the right buyer persona inside HubSpot accounts.

#### Does this actor need proxies?

HubSpot Marketplace Scraper runs proxy-free. HubSpot's marketplace serves traffic publicly with reasonable rate limits, and the actor paces requests inside them.

***

### Need More Features?

Need review-level extraction, pricing-plan tier breakdowns, or scheduled re-runs to track install-count growth? [Open an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use HubSpot Marketplace Scraper?

- **Real pricing fields** — Returns `pricing_model`, `pricing_text`, and `pricing_min_usd` as separate fields instead of dumping you a single free-text blob.
- **Certification as a boolean** — `certified` is true/false, not a badge URL you have to parse. Useful when building filtered competitor sets.
- **Hub compatibility, not just category** — Knowing an app integrates with Sales Hub specifically beats knowing it lives in the "lead-gen" category. Both fields are returned, separately.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

Filter apps by category slug (e.g. 'analytics', 'email'). Leave empty for all.

## `certifiedOnly` (type: `boolean`):

Only return apps that have the HubSpot certification badge.

## `appUrls` (type: `array`):

Scrape specific app pages directly. Each URL should be an ecosystem.hubspot.com/marketplace/apps/{slug} URL.

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

Maximum number of apps to return (0 = all).

## `proxyConfiguration` (type: `object`):

No description

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "certifiedOnly": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "category": "",
    "certifiedOnly": false,
    "maxItems": 15,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/hubspot-app-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "category": "",
    "certifiedOnly": False,
    "maxItems": 15,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/hubspot-app-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "category": "",
  "certifiedOnly": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jungle_synthesizer/hubspot-app-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "HubSpot App Marketplace Scraper - Apps, Pricing, Certification",
        "description": "Scrape the HubSpot App Marketplace catalog. Returns app name, category, developer, rating, reviews, pricing model, HubSpot certification flag, and Hub compatibility (Marketing, Sales, Service, CMS, Operations). For agencies, app builders, ecosystem research, and partner analytics.",
        "version": "0.1",
        "x-build-id": "vc0DPFqbJtRuHjITy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~hubspot-app-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-hubspot-app-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/jungle_synthesizer~hubspot-app-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-hubspot-app-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/jungle_synthesizer~hubspot-app-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-hubspot-app-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": [
                    "sp_intended_usage",
                    "sp_improvement_suggestions"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "category": {
                        "title": "Category Filter",
                        "type": "string",
                        "description": "Filter apps by category slug (e.g. 'analytics', 'email'). Leave empty for all."
                    },
                    "certifiedOnly": {
                        "title": "HubSpot Certified Only",
                        "type": "boolean",
                        "description": "Only return apps that have the HubSpot certification badge.",
                        "default": false
                    },
                    "appUrls": {
                        "title": "App URL(s)",
                        "type": "array",
                        "description": "Scrape specific app pages directly. Each URL should be an ecosystem.hubspot.com/marketplace/apps/{slug} URL.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of apps to return (0 = all).",
                        "default": 15
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
