PineDrama Scraper - Short-Drama Series, Episodes & Views
Pricing
from $1.20 / 1,000 series records
PineDrama Scraper - Short-Drama Series, Episodes & Views
Scrape the PineDrama short-drama catalogue: series with watch counts, episode counts, categories, theme tags, covers, language, hot/new/free labels, creator ids and full episode lists. Filter by keyword or category in 17 languages, or paste links. Incremental runs and MCP export.
Pricing
from $1.20 / 1,000 series records
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
PineDrama Scraper: Short-Drama Series, Episodes & Views
PineDrama Scraper turns the PineDrama short-drama catalogue into a clean data feed. Get every series with its watch count, episode count, categories, theme tags, cover, language, hot, new and free labels, plus creator ids, full episode lists and, optionally, each series' synopsis, first-episode play, like and comment counts and creator profile. Browse the whole catalogue or narrow it by keyword and category in 17 languages, or paste catalogue and series links, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways in. Walk the catalogue with optional keywords and category filters, or paste landing, catalogue, series and recommendation links. No URL building needed.
- Engagement at a glance. Exact watch counts and episode counts per series, with hot, new and limited-free labels, so charting titles are easy to spot.
- Full episode depth. Every enriched series carries its creator id, shortcut count, first-episode video id and the complete episode list with free or paid and intro flags.
- Video and creator stats. Switch on Fetch first-episode video stats to add the synopsis, caption, play, like, comment, share and save counts, duration, publish time and the creator's handle, name, bio and follower count.
- 17 languages. Category and tag names come back localized, and each series reports its own spoken language.
- Category filter list attached. Every series lists the filter entries that match it, with ids, so rows join cleanly to the site's own category list.
- Built for schedules. Incremental mode returns only new and changed series on recurring runs, and a run whose connection is refused fails loudly instead of returning an empty dataset.
Use Cases
- Content analysts: track which short dramas are charting by watch count, category and tag.
- Studios and licensors: map trope and theme coverage, episode counts and free windows across the catalogue.
- Marketing and growth teams: spot new and hot releases early and watch how fast counts move.
- AI agents and dashboards: feed structured catalogue and episode data into your own tools.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
collection_id | "0000000000000000000" |
title | "Sample Drama" |
cover_url | cover image link |
cover_width / cover_height | 720 / 720 |
episode_count | 60 |
watched_count | 1250000 |
categories | ["CEO", "Urban"] |
theme_tags | ["CEO", "Urban"] |
category | 1 |
category_filters | matching filter entries with category_id, name, name_en |
is_limited_free | true |
label_hot / label_new | false / false |
language_code | "en" (spoken language of the series) |
language | "en" (language of category names) |
scene / page | 1 / 1 |
keyword | the keyword that matched, when keywords are used |
video_id | "0000000000000000000" (first episode) |
creator_id / short_cut_num | "0000000000000000000" / 24 |
episodes | number, sequence id, video id, intro flag, paid flag, free window |
description / video_text / video_url | series synopsis, first-episode caption and public link (video stats option) |
video_play_count / video_like_count / video_comment_count | engagement of the first episode, plus share, save, duration and publish time (video stats option) |
total_duration_seconds / theme_tags_en / theme_tag_keys | 7469, English tag names and their stable keys, e.g. ["Sample Tag A"] / ["tag_Sample_Plot"] (video stats option) |
creator_username / creator_nickname / creator_followers | creator handle, display name, reach, bio and profile link (video stats option) |
source_collection_id | the series a recommendation came from |
changeType / changedFields | "NEW" / [] in incremental mode |
How to Use
- Pick a mode:
Search the catalogueorPaste links. - For search, optionally add keywords, category filters and a language; for links, paste your links.
- Switch Fetch episode lists on or off depending on whether you need episodes.
- Set Max items to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Catalogue with episode lists:
{"mode": "search","fetchDetails": true,"maxItems": 20}
Keyword and category filter, cards only:
{"mode": "search","keywords": ["CEO"],"categoryFilters": ["Revenge"],"fetchDetails": false,"maxItems": 100}
Localized category names:
{"mode": "search","language": "fr","maxItems": 50}
Paste links:
{"mode": "url","urls": [{ "url": "https://shortdrama.tiktok.com/gb" }],"fetchDetails": true,"maxItems": 50}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/pinedrama-scraper").call(run_input={"mode": "search", "maxItems": 10})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["watched_count"], item["episode_count"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/pinedrama-scraper').call({ mode: 'search', maxItems: 10 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How keywords and categories work
The catalogue is read page by page (12 series each) and narrowed as it is read, so a rare keyword or category can take many pages before enough matches are found. Set Max items for the result you want and optionally cap the walk with Max pages. Matching is case-insensitive against the title, categories and theme tags, in the language you picked.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run ID and the actor skips everything already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled runs over the same scope. Each series is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only withemitExpired, only after a scan that covered the whole scope, and never billed past yourmaxItems). Compared: title, episode count, categories, theme tags, labels, free window, creator id, shortcut count and the episode list. Ignored: watch count, signed cover link and scrape time.stateKeynames or shares the stored state. With incremental mode off, output is exactly as before.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search walks the catalogue; url scrapes pasted links. |
keywords | array | (none) | Keep series whose title, categories or tags contain one of these words. |
categoryFilters | array | (none) | Keep series tagged with one of these categories or tags. |
language | string | en | Language of category and tag names (17 supported). |
urls | array | 7 sample links | Landing, catalogue, series, recommendation and category-filter links for URL mode. |
fetchDetails | boolean | true | Fetch each series' episode list, creator id and shortcut count. Adds the detail-enrichment charge per series. |
fetchVideoStats | boolean | false | Also read each series' first episode video page: synopsis, engagement counts, duration, publish time and creator profile. Needs episode lists; same detail-enrichment charge, heavier per series. |
maxPages | integer | unlimited | Optional page limit per link or search; blank or 0 = unlimited. Does not cap results. |
maxItems | integer | 20 | Stop after this many series (0 = no limit). |
proxy | object | residential | Connection setting. Residential is the default and recommended. |
resumeFromRunId | string | (none) | Continue one interrupted run. |
incrementalMode | boolean | false | Return only new and changed series on scheduled runs. |
stateKey | string | (none) | Name or share an incremental-mode state. |
emitUnchanged | boolean | false | Also return (and bill) unchanged series. |
emitExpired | boolean | false | Also return (and bill) expired series; only after a scan that covered the whole scope. |
ignoreFieldsForChanges | array | (none) | Extra fields that never mark a series as updated. |
mcpConnectors | array | (none) | Pipe result summaries into your apps via MCP connectors. |
notionParentPageUrl | string | (none) | Notion parent page for the Notion connector. |
maxNotifyListings | integer | 50 | Cap on items written per connector. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
Series record (the video and creator keys appear only with fetchVideoStats; a few series are not shown on the web and keep them empty):
{"recordType": "series","collection_id": "0000000000000000000","title": "Sample Drama","cover_url": "https://example.com/cover.jpeg","cover_width": 720,"cover_height": 720,"episode_count": 60,"watched_count": 1250000,"categories": ["CEO", "Urban"],"theme_tags": ["CEO", "Urban"],"category": 1,"is_limited_free": true,"label_hot": false,"label_new": false,"language_code": "en","scene": 1,"category_filters": [{ "category_id": "0000000000000000000", "name": "Urban", "name_en": "urban" }],"keyword": null,"video_id": "0000000000000000000","creator_id": "0000000000000000000","short_cut_num": 24,"description": "Sample synopsis (video stats option)","video_url": "https://example.com/video","video_play_count": 1250000,"video_like_count": 68000,"video_duration_seconds": 103,"creator_username": "sample.creator","creator_followers": 169000,"episodes": [{ "episode_number": 1, "sequence_id": 1, "video_id": "0000000000000000000", "is_intro": false, "is_paid": false }],"changeType": "NEW"}
The Series, Series detail, Video and creator and Incremental changes dataset views are available in the output tab.
Plan Requirement
The default connection is Apify Residential, which the data source serves reliably; this is the recommended setting. Datacenter proxies are cheaper but the data source answers its catalogue, recommendation and category routes with empty pages on datacenter exits, so they are only suitable for light use. If a datacenter run keeps getting empty pages, the actor retries with backoff on fresh connections and then escalates automatically to residential for the rest of the run (capped per run, billed to your Apify plan), returning to datacenter when it serves again.
Apify free plans do not include residential proxies. On a free plan the run logs a one-time notice and continues on a backup connection; some pages may still be unavailable. For residential access, upgrade at https://apify.com/pricing or supply your own proxy URLs. If no connection can load any results page, the run fails with a clear message instead of returning an empty result.
FAQ
How much does it cost?
You pay per series returned, with episode-list enrichment billed only when you switch it on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape PineDrama?
This actor collects only publicly available catalogue data: titles, counts, categories and episode lists. You are responsible for how you use it: follow the site's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Titles and counts are generally facts, but cover art and videos may be subject to third-party rights.
Can I get only new or changed series on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated series, and unchanged ones are not billed.
Why did a run return fewer series than the site shows?
The run stops at Max items. Set it higher, or to 0, to collect more. With keywords or category filters only matching series are returned. Episodes attached to a series do not count toward maxItems.
Why are the video stats empty for some series?
The platform does not show the first episode of some series on the web, so no public video page exists to read. Those rows keep the catalogue and episode data and leave the video and creator fields empty.
Why did my run fail instead of returning an empty dataset?
If every connection tried returns an empty page, the run stops with a clear message so "no results" is never confused with "nothing could be read". Run it again in a few minutes.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 More scrapers you might like
Pair this actor with these related scrapers from the same team:
| 🧩 GoodShort Scraper Scrape the GoodShort short-drama catalog: titles with exact views, follows, genres and... | 🧩 WEBTOON Scraper Scrape the WEBTOON catalog into structured data. Extract series, genres, rankings and... |
| 🧩 Anghami Scraper Scrape Anghami's public catalog by keyword or player URL. Rows carry their kind (song... | 🤖 Suno Scraper Collect public Suno music data: songs with lyrics, style tags, model version, play and... |
| ⚽ JioHotstar Scraper Scrape the JioHotstar catalog by content type or URL. Extract shows, movies, episodes... | 🧩 Pikabu Scraper Scrape Pikabu (Пикабу): keyword search, hot/new/best feeds, communities, tags, full story... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.