# Kuku TV & Kuku FM Episode Details & Video URL API (`spider_studio/kuku-tv-episode-detail`) Actor

Get Kuku TV (Kuku FM) episode details and playable video stream URLs by episode ID: titles, durations, prices, and engagement. Export via API or Dataset.

- **URL**: https://apify.com/spider_studio/kuku-tv-episode-detail.md
- **Developed by:** [Tarique](https://apify.com/spider_studio) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 successful episode ids

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

### Kuku TV and Kuku FM episode details and video URL API

**Kuku TV & Kuku FM Episode Details & Video URL API** is a **Kuku TV episode scraper** for [Kuku FM](https://kukufm.com/) audio series and short-drama reels. Submit up to 1,000 episode IDs and receive structured episode metadata plus the playable video stream URL for each episode: titles, slugs, durations, season and episode indexes, coin prices, and engagement counts.

It works as a Kuku TV API alternative and a **Kuku FM video URL extractor** for episode-level catalog enrichment, content research, and metadata pipelines. No Kuku FM account, login, or app installation is required.

### Why use this Kuku TV episode scraper?

- Resolve up to 1,000 Kuku TV `episodeId` values into complete episode metadata in one run.
- Capture the playable `videoUrl` for every episode — an HLS master manifest that already lists the 360p, 540p, 720p and 1080p renditions.
- Capture season numbers, episode indexes, and durations for ordering and timeline work.
- Collect lock state, coin pricing, and premium flags per episode.
- Collect the `audioUrl` stream alongside the video manifest for audio-first workflows.
- Track engagement counts such as listens, plays, likes, shares, and comments.
- Receive one Dataset item per episode with the complete raw payload preserved.
- Export results to JSON, CSV, Excel, XML, or HTML.
- Integrate with the Apify API, schedules, webhooks, Make, n8n, or cloud storage.

Typical use cases include **Kuku TV episode metadata extraction**, Kuku FM catalog research, episode-order validation, pricing and paywall analysis, and engagement benchmarking.

### What Kuku TV episode data can the API extract?

| Field | Type | Description |
| --- | --- | --- |
| `episodeId` | integer or null | Kuku TV episode ID. |
| `success` | boolean | Whether the row is a successfully retrieved episode. |
| `showId` | integer or null | Parent show ID. |
| `index` | integer or null | Episode index inside the parent show. |
| `seasonNo` | integer or null | Season number. |
| `title` | string or null | Episode title. |
| `slug` | string or null | Episode slug. |
| `description` | string or null | Episode synopsis when the API provides one. |
| `status` | string or null | Publish status, such as `live`. |
| `durationSeconds` | integer or null | Episode runtime in seconds. |
| `publishedOn` | string or null | Publication timestamp. |
| `isPremium` | boolean or null | Whether the episode is premium-only. |
| `isLocked` | boolean or null | Whether the episode is locked for this audience. |
| `isDemoPremium` | boolean or null | Whether the episode is a premium demo. |
| `isEarlyAccess` | boolean or null | Whether the episode is early access. |
| `isStrike` | boolean or null | Whether the episode currently carries a strike flag. |
| `isFictional` | boolean or null | Whether the episode is marked as fiction. |
| `coinsToUnlock` | integer or null | Displayed coin price. |
| `calculatedCoinsToUnlock` | integer or null | Coin price the API computed for this request. |
| `likeCount` | integer or null | Like count. |
| `listenCount` | integer or null | Listen count. |
| `playCount` | integer or null | Play count. |
| `shareCount` | integer or null | Share count. |
| `commentCount` | integer or null | Comment count. |
| `mediaSizeBytes` | integer or null | Media size in bytes when the API reports it. |
| `audioUrl` | string or null | Audio stream URL for the episode. |
| `videoUrl` | string or null | Playable video stream URL for the episode: an HLS master manifest (`.m3u8`) listing every available rendition. |
| `promoUrl` | string or null | Promo stream URL when present. |
| `streamUrl` | string or null | Generic stream URL when present. |
| `imageUrl` | string or null | Episode artwork URL. |
| `originalImageUrl` | string or null | Original artwork URL. |
| `thumbnailUrl` | string or null | Portrait thumbnail URL. |
| `dynamicLink` | string or null | Kuku FM short link when present. |
| `data` | object or null | Complete raw episode payload exactly as the API returned it. |
| `error` | string or null | Error message for a failed episode ID. |

### How to get Kuku TV episode details by ID

1. Open the Actor's **Input** tab.
2. Add one or more numeric episode IDs to `episodeIds`. Episode IDs are the `id` values inside a show payload and the values listed next to each episode on Kuku FM.
3. Click **Start**.
4. Open the Dataset to inspect, filter, download, or integrate the results.

### How much does Kuku TV episode detail extraction cost?

FREE-tier users pay **$4 per 1,000 successfully resolved episode IDs** ($0.004 per episode). Users on BRONZE, SILVER, GOLD, PLATINUM, and DIAMOND tiers pay **$3 per 1,000** ($0.003 per episode). Diagnostic rows with `success: false` are not charged, and duplicate input IDs do not generate additional result charges.

There is no monthly result cap. Paid Apify platform usage for the run — compute and proxy bandwidth — is billed separately by Apify.

### Input

See the **Input** tab for all options. `episodeIds` accepts up to 1,000 numeric IDs. Duplicates are ignored while their first-seen order is preserved.

```json
{
  "episodeIds": ["1685164", "1703618", "1436319"]
}
```

### Output

You can download the Dataset in formats such as JSON, HTML, CSV, or Excel.

```json
{
  "episodeId": 1685164,
  "success": true,
  "showId": 282775,
  "index": 1,
  "seasonNo": 1,
  "title": "Episode 1",
  "slug": "the-billionaire-mafia-king-who-bought-his-bride_ep01_bmkwbhbmov",
  "status": "live",
  "durationSeconds": 134,
  "publishedOn": "2026-09-09T11:57:59.061367+00:00",
  "isPremium": true,
  "isLocked": false,
  "coinsToUnlock": 10,
  "calculatedCoinsToUnlock": 50,
  "listenCount": 77855,
  "commentCount": 6,
  "mediaSizeBytes": 205970264,
  "thumbnailUrl": "https://images.cdn.kukufm.com/w:200/f:webp/q:85/...",
  "error": null
}
```

### Kuku TV episode detail use cases

- Enrich episode IDs with titles, durations, and ordering metadata.
- Validate that an episode list is complete and correctly ordered before analysis.
- Compare displayed coin prices with the price the API calculates per request.
- Benchmark engagement across episodes of the same show or across shows.
- Feed episode-level metadata into recommendation, search, or analytics pipelines.

### Related Kuku TV Actors

| Actor | Purpose |
| --- | --- |
| [Kuku TV & Kuku FM Show Search Scraper API](https://apify.com/spider_studio/kuku-tv-search) | Discover shows and `showId` values by keyword, genre, or trope. |
| [Kuku TV & Kuku FM Show Details & Episodes API](https://apify.com/spider_studio/kuku-tv-series-detail) | Resolve a `showId` into full show metadata, genres, tropes, cast, and crew. |
| [Kuku TV & Kuku FM Episode Comments Scraper API](https://apify.com/spider_studio/kuku-tv-episode-comments) | Export the public comments and listener profiles behind each episode. |
| [Kuku TV & Kuku FM Episode Video Downloader API](https://apify.com/spider_studio/kuku-tv-episode-download-kvs) | Download each episode and store a playable MP4 plus a metadata sidecar in the run's Apify Key-value store. |

Also from the same publisher: [Hongguo short-drama Actors](https://apify.com/spider_studio/hongguo-series-detail) for the Hongguo Duanju catalog.

### Frequently asked questions

#### Where do I find Kuku TV episode IDs?

The fastest source is the `episodes` array of the **Kuku TV & Kuku FM Show Details & Episodes API**, which returns every released `episodeId` for a show in order. The **Kuku TV & Kuku FM Episode Comments Scraper API** also reports the `episodeId` for every episode it processes.

#### Do I need a Kuku TV or Kuku FM account?

No. Every endpoint used by this Actor is public, so no login, token, or app installation is required.

#### Why are `coinsToUnlock` and `calculatedCoinsToUnlock` different?

`coinsToUnlock` is the list price the Kuku TV apps display, while `calculatedCoinsToUnlock` is the price the API computes for the current request. Both are captured so you can compare them.

#### Why is `description` sometimes null?

The episode endpoint returns `description: null` for most episodes, so the Actor reports `null` rather than copying the show synopsis into the episode row. Fetch the parent show with the **Kuku TV & Kuku FM Show Details & Episodes API** when you need the synopsis.

#### Does the Actor return a playable video URL?

Yes. Every episode row carries `videoUrl`, an HLS master manifest that resolves to the 360p, 540p, 720p and 1080p renditions, and `audioUrl` for the audio stream. Both are returned for public episodes without a Kuku FM account, and the manifest is served straight from the CDN with no extra headers.

#### Does the video URL still work for a locked or premium episode?

Yes. `isLocked` reports whether the episode needs a coin or subscription unlock for normal playback inside the Kuku FM apps; it does not gate the URL that this Actor reports. Check `isLocked` when you need to know the entitlement state, and treat `videoUrl` as the stream location.

#### Can I request more than 1,000 episodes in one run?

Split larger sets across multiple runs or use the Apify API to start the Actor with several input batches.

### Legal use and support

Use the Actor lawfully and respect Kuku FM's terms, copyright, rate limits, privacy rules, and applicable law. It is intended for public catalog information and does not access private user accounts.

Use the **Issues** tab for support and the **API** tab for generated integration examples.

# Actor input Schema

## `episodeIds` (type: `array`):

Numeric Kuku TV episode IDs to resolve. The fastest source is the `episodes` array of the Kuku TV Show Details & Episodes Actor, which lists every released `episodeId` for a show. Duplicates are ignored while order is preserved.

## Actor input object example

```json
{
  "episodeIds": [
    "1685164",
    "1436319"
  ]
}
```

# Actor output Schema

## `dataset` (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 = {
    "episodeIds": [
        "1685164",
        "1436319"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("spider_studio/kuku-tv-episode-detail").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 = { "episodeIds": [
        "1685164",
        "1436319",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("spider_studio/kuku-tv-episode-detail").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 '{
  "episodeIds": [
    "1685164",
    "1436319"
  ]
}' |
apify call spider_studio/kuku-tv-episode-detail --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,spider_studio/kuku-tv-episode-detail"
        }
    }
}
```

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/D09ZWhQc8PIgsHwhK/builds/oNX4Sut3Ja3adsmec/openapi.json
