# ClientClub Downloader (`serpdownloaders/clientclub-downloader`) Actor

Browser extension for saving ClientClub trainings and supported embedded lesson videos as MP4 using your active session for offline access.

- **URL**: https://apify.com/serpdownloaders/clientclub-downloader.md
- **Developed by:** [SERP Downloaders](https://apify.com/serpdownloaders) (community)
- **Categories:** Videos, Automation, Social media
- **Stats:** 0 total users, 0 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

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

## ClientClub Downloader (Browser Extension)

> Download videos from ClientClub and supported GoHighLevel-powered portals as MP4 files for offline access.

ClientClub Downloader is a browser extension built for users who want a simpler way to save lesson and coaching videos from ClientClub portals. It works with supported portal-hosted lessons and common embedded video providers, giving you a browser-first workflow for detecting the lesson video, choosing the available quality, and saving an MP4 file for later playback.

- Save ClientClub lesson videos as MP4 files
- Download supported GoHighLevel-powered portal videos from the same workflow
- Capture supported embedded lesson players like Loom, Vimeo, Wistia, and YouTube
- Choose from the quality levels exposed by the source
- Keep local copies for offline study, review, or coaching archives

### Links

- :rocket: Get it here: [ClientClub Downloader](https://serp.ly/clientclub-downloader)
- :new: Latest release: [GitHub Releases](https://github.com/serpapps/clientclub-downloader/releases/latest)
- :question: Help center: [SERP Help](https://help.serp.co/en/)
- :beetle: Report bugs: [GitHub Issues](https://github.com/serpapps/clientclub-downloader/issues)
- :bulb: Request features: [Feature Requests](https://github.com/serpapps/clientclub-downloader/issues)

### Preview

![ClientClub Downloader workflow preview](assets/workflow-preview.webp)

### Table of Contents

- [Why ClientClub Downloader](#why-clientclub-downloader)
- [Features](#features)
- [How It Works](#how-it-works)
- [Step-by-Step Tutorial: How to Download Videos from ClientClub](#step-by-step-tutorial-how-to-download-videos-from-clientclub)
- [Supported Formats](#supported-formats)
- [Who It's For](#who-its-for)
- [Common Use Cases](#common-use-cases)
- [Troubleshooting](#troubleshooting)
- [Trial & Access](#trial--access)
- [Installation Instructions](#installation-instructions)
- [FAQ](#faq)
- [Notes](#notes)
- [About ClientClub](#about-clientclub)

### Why ClientClub Downloader

ClientClub and related coaching portals are built for browser-based access, not for a clean offline export workflow. Lessons can mix portal-hosted videos with embedded providers like Loom, Vimeo, Wistia, and YouTube, which makes manual downloading inconsistent and awkward for clients or teams trying to keep a local copy.

ClientClub Downloader is built for that exact use case. It focuses on supported ClientClub and GoHighLevel-powered pages, detects the available lesson media in your browser session, and gives you a direct way to save accessible training content as MP4.

### Features

- Video detection for ClientClub portal, lesson, and coaching pages
- Support for related GoHighLevel-powered client portals
- Embedded lesson support for Loom, Vimeo, Wistia, and YouTube
- Quality selection for available stream resolutions
- MP4 export for easier offline playback and sharing
- Popup workflow for reviewing detected lesson media
- Progress tracking during active downloads
- Concurrent download support for supported workflows
- Cross-browser support for Chrome, Edge, Brave, Opera, Firefox, Whale, and Yandex

### How It Works

1. Install the extension from the latest release.
2. Open a ClientClub lesson, coaching page, or supported portal page with video.
3. Start playback so the extension can detect the lesson media.
4. Open the popup to review available stream options.
5. Choose the quality you want.
6. Download the lesson and save the final MP4 file locally.

### Step-by-Step Tutorial: How to Download Videos from ClientClub

1. Install ClientClub Downloader from the latest GitHub release.
2. Sign in to the ClientClub portal where you already have access.
3. Open the lesson or coaching page you want to save.
4. Let the page load fully and press play on the lesson video.
5. Click the extension button in your browser toolbar.
6. Review the detected stream or embedded player options.
7. Select the quality you want to keep.
8. Start the download and wait for the MP4 export to finish.
9. Open the saved file from your Downloads folder.

### Supported Formats

- Input: ClientClub-hosted lesson streams
- Input: Supported embedded Loom, Vimeo, Wistia, and YouTube players
- Output: MP4

Saved files use MP4 so they are easier to replay on standard media players, move between devices, and keep in a local coaching archive.

### Who It's For

- ClientClub members who want offline access to lessons
- Coaches and consultants backing up their own training material
- Teams archiving internal coaching or onboarding content
- Users saving lesson videos before access changes
- Anyone who wants a browser-based workflow instead of manual stream extraction

### Common Use Cases

- Save a coaching video from a ClientClub portal for offline study
- Download lesson recordings from a client membership page
- Archive your own uploaded training content
- Save embedded Loom or Vimeo walkthroughs inside a coaching portal
- Keep local copies of lesson content before access expires

### Troubleshooting

**The extension is not detecting the lesson video**  
Press play first and wait a few seconds so the stream has time to initialize.

**No quality options are showing**  
Some pages expose a single playable stream variant, especially on certain embedded players.

**The wrong player source is being picked up**  
Refresh the lesson page and reopen the extension popup after the lesson player fully loads.

**The page requires login or membership access**  
The extension only works on content you can already access in your active ClientClub session.

**The extension does not activate on this site**  
Make sure you are on a ClientClub page or a supported related portal.

### Trial & Access

- Includes **3 free downloads** so you can test the workflow first
- Email sign-in uses secure one-time password verification
- No credit card required for the trial
- Unlimited downloads are available with a paid license

Start here: [https://serp.ly/clientclub-downloader](https://serp.ly/clientclub-downloader)

### Installation Instructions

1. Open the latest release page:
   [https://github.com/serpapps/clientclub-downloader/releases/latest](https://github.com/serpapps/clientclub-downloader/releases/latest)
2. Download the extension build for your browser.
3. Install the extension.
4. Open a ClientClub lesson or coaching page.
5. Use the extension popup to detect and download the video.

### FAQ

**What kinds of ClientClub videos can I download?**  
Supported portal videos plus supported embedded lesson players inside ClientClub pages.

**Do I need to press play first?**  
Yes. Many lesson streams are only exposed after playback begins.

**What file format do downloads use?**  
Videos are saved as MP4 files.

**Does it support embedded lesson providers?**  
Yes. Supported platforms include Loom, Vimeo, Wistia, and YouTube when they appear on supported ClientClub pages.

**Do I need extra software?**  
No. Everything runs through the browser extension.

### License

This repository is distributed under the proprietary SERP Apps license in the [LICENSE](LICENSE) file. Review that file before copying, modifying, or redistributing any part of this project.

### Notes

- Only download content you own or have explicit permission to save
- The extension only works on media you can already play in your browser session
- Video quality depends on the source stream exposed on that lesson page
- An internet connection is required for the initial download

### About ClientClub

ClientClub is used for coaching portals, memberships, and client education pages that often mix hosted lesson content with embedded training platforms. That makes offline saving more awkward than on a single-platform video site because viewers may need a consistent download workflow across multiple lesson sources. ClientClub Downloader simplifies that process for users who need a local MP4 copy of accessible training content.

# Actor input Schema

## `listingNotice` (type: `string`):

Optional informational field only. This actor currently serves as the public listing surface for the browser extension and does not yet expose a finalized runtime API contract.

## Actor input object example

```json
{
  "listingNotice": "No runtime input is required yet. See the README and product page for the current extension workflow."
}
````

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("serpdownloaders/clientclub-downloader").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("serpdownloaders/clientclub-downloader").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 '{}' |
apify call serpdownloaders/clientclub-downloader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ClientClub Downloader",
        "description": "Browser extension for saving ClientClub trainings and supported embedded lesson videos as MP4 using your active session for offline access.",
        "version": "0.0",
        "x-build-id": "RAgxvNx5W8AxcLEYR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/serpdownloaders~clientclub-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-serpdownloaders-clientclub-downloader",
                "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/serpdownloaders~clientclub-downloader/runs": {
            "post": {
                "operationId": "runs-sync-serpdownloaders-clientclub-downloader",
                "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/serpdownloaders~clientclub-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-serpdownloaders-clientclub-downloader",
                "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": {
                    "listingNotice": {
                        "title": "Listing notice",
                        "type": "string",
                        "description": "Optional informational field only. This actor currently serves as the public listing surface for the browser extension and does not yet expose a finalized runtime API contract.",
                        "default": "No runtime input is required yet. See the README and product page for the current extension workflow."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
