# Slack App Directory / Marketplace Scraper (`jungle_synthesizer/slack-marketplace-scraper`) Actor

Scrape 2,500+ app listings from the Slack Marketplace. Extracts app names, descriptions, developers, pricing, categories, and contact info.

- **URL**: https://apify.com/jungle_synthesizer/slack-marketplace-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Developer tools, Lead generation
- **Stats:** 17 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 record scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Slack App Directory / Marketplace Scraper

Scrape app listings from the [Slack App Directory](https://slack.com/marketplace) (a.k.a. the Slack Marketplace). Returns app names, descriptions, developer info, pricing, categories, support contacts, and privacy policy links for 2,500+ apps in the Slack ecosystem — structured and ready to use.

***

### Slack App Directory / Marketplace Scraper Features

- Extracts 12 fields per app listing, including developer contact info and pricing
- Discovers all 2,500+ Slack App Directory listings automatically via Slack's search index
- Accepts specific app URLs if you only need a handful of listings
- Returns clean JSON with consistent field names across every record
- Runs stay fast and memory-light
- Handles retries and rate limiting. You configure it and walk away.

***

### What Can You Do With Slack App Directory Data?

- **SaaS competitive analysis** — Track which apps exist in your category, what they charge, and who built them
- **Lead generation** — Collect developer names, websites, and support emails for 2,500+ software companies
- **Market research** — Analyze app categories, pricing trends, and language support across the Slack ecosystem
- **Integration directories** — Build or enrich a catalog of Slack-compatible tools for your platform
- **Developer outreach** — Find app developers by category and contact them directly, which beats guessing at email addresses

***

### How the Slack App Directory Scraper Works

1. **Discover apps** — The scraper queries Slack's search endpoint to find every app in the Slack App Directory. This takes about 30 seconds and returns 2,500+ app URLs.
2. **Scrape detail pages** — Each app's listing page is fetched and parsed for structured data: name, developer, pricing, categories, contact info, and more.
3. **Export results** — Data lands in the Apify dataset as structured JSON. Export to JSON, CSV, or Excel.

If you provide specific app URLs, step 1 is skipped and the scraper goes straight to detail pages.

***

### Input

```json
{
  "maxItems": 50
}
```

Scrape everything by setting `maxItems` to `0`. Or pass specific URLs:

```json
{
  "appsUrls": [
    { "url": "https://slack.com/marketplace/A2RPP3NFR-giphy" },
    { "url": "https://slack.com/marketplace/A0F7XDUAZ-incoming-webhooks" }
  ],
  "maxItems": 0
}
```

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| appsUrls | array | empty | Specific app URLs to scrape. Leave empty to crawl the entire Slack App Directory. |
| maxItems | integer | 10 | Maximum number of apps to scrape. Set to 0 for all. |

***

### Slack App Directory Scraper Output Fields

```json
{
  "app_name": "Giphy",
  "app_id": "A2RPP3NFR",
  "appUrl": "https://slack.com/marketplace/A2RPP3NFR-giphy",
  "supported_languages": ["English"],
  "description": "Giphy for Slack makes it easy to find and share GIFs...",
  "categories": ["Communication", "Social & Fun"],
  "logo_url": "https://slack-files2.s3-us-west-2.amazonaws.com/avatars/2017-01-05/giphy_512.png",
  "developer_name": "Giphy",
  "pricing": "Free",
  "website": "https://giphy.com",
  "support_email": "support@giphy.com",
  "privacy_policy": "https://giphy.com/privacy"
}
```

| Field | Type | Description |
|-------|------|-------------|
| app_name | string | App display name |
| app_id | string | Slack's internal app identifier |
| appUrl | string | Full URL to the app's Slack App Directory listing |
| supported_languages | array | Languages the app supports |
| description | string | App description from the listing page |
| categories | array | App directory categories (e.g. Productivity, Communication) — useful for app directory ranking analysis |
| logo_url | string | URL to the app's icon image |
| developer_name | string | Name of the developer or company |
| pricing | string | Pricing information (Free, paid tiers, etc.) |
| website | string | Developer's website URL |
| support_email | string | Support contact email |
| privacy_policy | string | Link to the app's privacy policy |

***

### FAQ

#### How do I scrape all apps from the Slack App Directory?

Set `maxItems` to `0` and leave `appsUrls` empty. The Slack App Directory scraper discovers every listed app automatically and scrapes them all. Expect around 2,500 results.

#### How much does the Slack Marketplace Scraper cost to run?

A full run of all 2,500+ apps uses about 140 MB of memory and completes in under 30 minutes. The discovery phase alone takes roughly 30 seconds. Per-record costs depend on your Apify plan, but the actor is lightweight enough that a full marketplace scrape won't surprise you on the invoice.

#### Can I scrape specific Slack apps instead of the whole directory?

Yes. Pass an array of app URLs in the `appsUrls` field and the scraper skips discovery entirely. Useful when you only care about a specific set of apps and don't need 2,500 records.

#### What data can I get from the Slack App Directory?

The Slack App Directory scraper extracts 12 fields per app: name, app ID, URL, description, categories, supported languages, logo, developer name, pricing, website, support email, and privacy policy link. That covers the full public listing for each app.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/CesTQQxal7XbEGycz/issues) or get in touch.

### Why Use the Slack App Directory / Marketplace Scraper?

- **Fast** — Discovers 2,500+ apps in 30 seconds and scrapes detail pages concurrently, so a full run finishes in minutes, not hours
- **Clean output** — Returns structured JSON with consistent field names across every record, which means less time cleaning data and more time using it

***

**Further reading:** [Software Marketplace Data: App Stores, Review Sites, and Partner Directories](https://orbtop.com/articles/software-marketplace-review-data/)

# Actor input Schema

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

What will this data feed? E.g. lead lists, KYB checks, price tracking.

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

Provide any feedback or suggestions for improvements.

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

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `appsUrls` (type: `array`):

Specific app URLs to scrape. Leave empty to crawl the entire marketplace.

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

Maximum number of apps to scrape. Set to 0 for all.

## 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...",
  "maxItems": 10
}
```

# 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...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/slack-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...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/slack-marketplace-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/slack-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/slack-marketplace-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CesTQQxal7XbEGycz/builds/SaBLkSxgub4fKeWCO/openapi.json
