# ShortMax Scraper — Catalog, Genres, Views, Likes & Episodes (`signalbench/shortmax-scraper`) Actor

Scrape the ShortMax (shorttv.live) short-drama catalog: titles, genres & categories, view & like counts, episode counts, synopses and covers. Server-rendered HTML (no browser) — fast and cheap. 19 locales.

- **URL**: https://apify.com/signalbench/shortmax-scraper.md
- **Developed by:** [SignalBench](https://apify.com/signalbench) (community)
- **Categories:** Videos, Other
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## ShortMax Scraper — Catalog, Genres, Views, Likes & Episodes

Scrape the **ShortMax** vertical short-drama catalog (`shortmax.com` →
`shorttv.live`) without the app: **titles, genres and categories, view & like
counts, episode counts, synopses, creators and covers** — structured and ready
for analysis. Reads the site's own server-rendered HTML, **no browser**, so runs
are fast and cheap. Export as **JSON, CSV, Excel or XML**, or pull straight
through the Apify API into your app, agent, notebook or spreadsheet.

ShortMax is one of the big three Western-facing short-drama apps alongside
ReelShort and DramaBox, and until now had **no structured-data source at all**.
Output is normalized to the same per-title shape as the
[ReelShort](https://apify.com/signalbench/reelshort-scraper) and
[DramaBox](https://apify.com/signalbench/dramabox-scraper) scrapers, so the three
merge into one cross-platform leaderboard.

> **No per-datapoint games, never charged for failures.** Flat **$2 per 1,000
> titles** ($0.002 each), billed only per title actually stored. Empty pages,
> failed requests and titles with no metrics are never stored and never charged.

### What it scrapes

| Field | Description |
|---|---|
| **id / title / url** | Numeric ShortMax title id, name, canonical URL |
| **views / follows** | View and like counts (see the honesty notes below) |
| **viewsRaw / followsRaw** | The site's own abbreviated strings (`"88.1K"`), so you can audit the precision loss |
| **episodes** | Episode count (Full mode) |
| **genres** | ShortMax's genre taxonomy — 56 site-wide, typically 1–2 per title |
| **tags** | ShortMax's *second*, separate category taxonomy — 53 site-wide, exactly one per title (Full mode) |
| **description** | Full synopsis |
| **creator** | The single writer/creator credit ShortMax publishes |
| **cover** | Cover image URL, resize query string stripped |
| **releaseDate / releaseDateSource** | Approximate — see below |
| **section / rank** | Homepage rail and position (Trending mode) |
| **language / partial / scrapedAt** | Locale, whether the record is listing-only, capture time |

### Modes

- **Full catalog** — walks every page of `/dramas`. The English catalog is
  **505 titles**; other locales differ (see Languages).
- **By category** / **By genre** — ShortMax has two independent taxonomies and
  this Actor exposes both. Pass a slug (`modern`), a slug-with-id
  (`modern-200052`), a bare id (`200052`) or the display name (`Modern`) — every
  value is resolved live against the site, and an unrecognized one is logged
  alongside the complete list of what is available.
- **Trending** — the 9 curated homepage rails (`New Release 🆕`,
  `Most Popular 🔥`, `War God ⚔️`, …), the only editorial ordering ShortMax
  publishes. Every record carries its rail name and 1-based position.
- **Specific title URLs** — scrape exactly the `/drama/...` URLs you provide.

**Detail level.** *Full* visits each title's own page — the only source of
episode counts and the category breadcrumb (1 request per title). *Listing only*
reads views, likes and synopses straight off genre list pages, **10 titles per
request**, for a much cheaper run without episode counts or categories. Listing
only applies to genre-based collection: catalog and category pages are plain
image-and-title grids with no metrics on them at all, so the Actor falls back to
Full for the other modes rather than billing you for metric-less rows.

### Languages

ShortMax runs 19 locales, and **each one is a different library, not a
translation** — the Spanish and Japanese catalogs contain entirely different
titles from the English one. Approximate sizes: English 505, Traditional Chinese
\~900, Spanish ~400, Japanese ~300. Hindi is configured on the site but its
catalog is empty; the Actor reports zero results for it rather than failing.

### Input example

```json
{
    "mode": "byGenre",
    "genreIds": ["werewolf-200071", "mafia-200080"],
    "language": "en",
    "detailLevel": "full",
    "maxItems": 200
}
```

### Output example

```json
{
    "platform": "shortmax",
    "id": "32605",
    "title": "SSS-Rank: The Slum-Born Thunder God",
    "url": "https://www.shorttv.live/drama/sss-rank-the-slum-born-thunder-god-32605",
    "language": "en",
    "cover": "https://akamai-static.shorttv.live/images/cover/2026/08/18/f07994a8104e45818b452123087d0913.jpg",
    "description": "In a world where Awakening rank decides everything, Nate Ryder is dismissed as a worthless failure…",
    "genres": ["Modern", "Reversal of Fortune"],
    "tags": ["Urban Fantasy"],
    "views": 88500,
    "follows": 29500,
    "viewsRaw": "88.5K",
    "followsRaw": "29.5K",
    "episodes": 61,
    "creator": "Grace Whitman",
    "cast": [],
    "releaseDate": "2026-08-18",
    "releaseDateSource": "cover-asset-path",
    "section": null,
    "rank": null,
    "partial": false,
    "scrapedAt": "2026-08-21T21:21:05.488Z"
}
```

### What ShortMax does *not* publish — read this before you rely on a field

Three limits are the site's, not this Actor's. They're stated here rather than
papered over:

1. **`follows` is derived, not measured.** In a full 505-title sweep of the
   English catalog, **505 of 505 titles** had a like count within 1% of exactly
   one third of their view count (29.5K/88.5K, 23.8K/71.4K, 25.7K/77.1K,
   117K/350K…). That is a display formula, not engagement data. Use it as a
   display value; don't rank on it independently of views. The view counts
   themselves are the site's own reported figures and may be decorated too.
2. **There is no release date.** `releaseDate` is the upload date of the title's
   cover asset — the closest proxy the site offers — and always ships with
   `releaseDateSource: "cover-asset-path"` so it can never be mistaken for a
   verified date. Episode pages carry a `VideoObject.uploadDate`, but it is a
   hardcoded placeholder (`2024-03-31T08:00:00+08:00` on *every* title) and this
   Actor never uses it.
3. **There is no cast.** ShortMax publishes no performer credits anywhere;
   `cast` is always `[]`. The single `Creator:` name is surfaced as `creator`.

Counts are abbreviated on the site, so `views` is parsed from strings like
`"88.5K"` and is approximate at that magnitude (anything from 88,450 to 88,549).
`viewsRaw`/`followsRaw` keep the verbatim string so the rounding stays auditable.

### Politeness & robots.txt

This Actor scrapes only public catalog metadata. It never touches video sources,
HLS manifests, DRM or anything account-related, and it issues **zero requests to
`/search/`**, which ShortMax disallows in `robots.txt`. There is deliberately no
search mode.

### Notes on cost & speed

A verification run over the entire English catalog returned **505 unique titles,
zero duplicates and zero failed requests**, with views, episodes, genres, category
and cover populated on every single record.

ShortMax has no CDN cache in front of its HTML and a multi-second time to first
byte (~6 s typical, ~19 s on deep genre pages), with ~200 KB responses. Parallel
requests are what make a run fast — the default concurrency of 8 was comfortable
in testing with no rate limiting observed. A full 505-title English run is ~527
requests. No proxy is needed by default; the site served plain HTTP clients
without cookies or challenges.

# Actor input Schema

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

What to scrape. **Full catalog** walks every page of ShortMax's `/dramas` listing (505 titles in English). **By category** and **By genre** scrape ShortMax's two taxonomies (53 categories, 56 genres) — values are resolved live, and the run logs the full list if one doesn't match. **Trending** returns the 9 curated homepage rails (New Release, Most Popular, …) with the rail name and position on every record. **Specific title URLs** scrapes only the `/drama/...` URLs you provide.

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

ShortMax locale. **Each locale is a different library, not a translation** — the Spanish and Japanese catalogs contain entirely different titles from the English one. Approximate catalog sizes: English 505, Traditional Chinese ~900, Spanish ~400, Japanese ~300. Hindi is configured on the site but its catalog is empty.

## `categoryIds` (type: `array`):

ShortMax categories, as a slug (`mafia-romance`), a slug-with-id (`mafia-romance-200044`), a numeric id (`200044`) or the display name (`Mafia Romance`). Resolved live against the site — an unknown value is logged alongside the full list of the 53 available categories.

## `genreIds` (type: `array`):

ShortMax genres, as a slug (`modern`), a slug-with-id (`modern-200052`), a numeric id (`200052`) or the display name (`Modern`). Resolved live against the site — an unknown value is logged alongside the full list of the 56 available genres.

## `startUrls` (type: `array`):

ShortMax title URLs, e.g. https://www.shorttv.live/drama/sss-rank-the-slum-born-thunder-god-32605

## `detailLevel` (type: `string`):

**Full** visits each title's own page — the only source of episode counts and the category breadcrumb (1 request per title). **Listing only** reads view counts, like counts and synopses straight off the genre list pages, 10 titles per request: much cheaper in compute, but no episode count and no category. Listing only applies to genre-based collection (catalog and category pages are plain image grids with no metrics on them) and falls back to Full elsewhere.

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

Maximum number of titles to store. This caps your cost — 1 stored title = 1 charge.

## `maxConcurrency` (type: `integer`):

Parallel requests. ShortMax has no CDN cache and a multi-second time-to-first-byte, so parallelism is what makes a run fast. 8 is comfortable; the site showed no rate limiting in testing.

## `includeRawCounts` (type: `boolean`):

Also emit `viewsRaw` / `followsRaw` — the site's own abbreviated strings (e.g. "88.1K") next to the parsed integers. Useful because the abbreviation loses precision: "88.1K" is anything from 88,050 to 88,149.

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

Apify Proxy. ShortMax served plain HTTP clients without cookies, challenges or rate limiting in testing, so **no proxy is needed by default**. Turn one on if you see blocks.

## Actor input object example

```json
{
  "mode": "fullCatalog",
  "language": "en",
  "categoryIds": [
    "mafia-romance-200044"
  ],
  "genreIds": [
    "modern-200052"
  ],
  "startUrls": [],
  "detailLevel": "full",
  "maxItems": 50,
  "maxConcurrency": 8,
  "includeRawCounts": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped titles in JSON.

## `resultsCsv` (type: `string`):

All scraped titles as a CSV export.

## `viewInConsole` (type: `string`):

Open the run and its dataset in the Apify Console.

# 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 = {
    "categoryIds": [
        "mafia-romance-200044"
    ],
    "genreIds": [
        "modern-200052"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalbench/shortmax-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 = {
    "categoryIds": ["mafia-romance-200044"],
    "genreIds": ["modern-200052"],
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("signalbench/shortmax-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 '{
  "categoryIds": [
    "mafia-romance-200044"
  ],
  "genreIds": [
    "modern-200052"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call signalbench/shortmax-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalbench/shortmax-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/uiffd7O19QJc2IvB0/builds/IxBxZrLX5Q7WNafB4/openapi.json
