PineDrama Scraper at a glance
PineDrama Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its output documents 51 fields, including collection id, title, cover, episode count and watched count, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.50 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $1.50 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- 51 documented fields · JSON, CSV, Excel
- Inputs
- 18 options
What PineDrama Scraper can do
- 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.
Choose what to collect
These inputs let you configure PineDrama Scraper - Short-Drama Series, Episodes & Views. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Search walks the whole short-drama catalogue, optionally narrowed by keywords and category filters. URL mode scrapes the links you paste in the URL section. |
keywordsarray | Only keep series whose title, categories or theme tags contain one of these words (case-insensitive). The catalogue is walked and narrowed as it is read, so a rare keyword can take many pages. Leave empty for every series. |
categoryFiltersarray | Only keep series tagged with one of these categories or theme tags, for example Revenge, Zero to hero or Werewolf. Names are matched in the language chosen below. Leave empty for every category. |
languagestring | Language of the category and tag names. The series titles themselves stay in each series' own language (see language_code). |
urlsarray | Multi-URL, search fields ignored. Accepts the short-drama landing page (also a country page or the sitemap) and series links. A series link returns that series with its episode list. |
fetchDetailsboolean | Fetch each series' episode list: creator id, shortcut count, first-episode video id and every episode with its number, free or paid status and intro flag. Adds the detail-enrichment charge per series. Without it you still get the catalogue card: title, cover, counts, categories, tags and labels. |
fetchVideoStatsboolean | Also read the public page of each series' first episode video (needs Fetch episode lists): series synopsis, caption, play, like, comment, share and save counts, duration, publish time, and the creator's handle, name, bio, followers and profile link. Heavier per series; counted in the same detail-enrichment charge. Off by default. |
Show 11 more inputs
| Input | What it controls |
|---|---|
maxPagesinteger | Optional limit on catalogue pages walked per link or search. This does NOT cap results and has no default (blank or 0 = unlimited); it defers to Max items, which is the single cap on a run. |
maxItemsinteger | The one cap on a run (default 20): stop after this many series records. Episodes nested inside a series do not count as items. Set 0 for no limit. Max pages does not cap results and defers to this field. |
resumeFromRunIdstring | ID of an interrupted run to continue. The run skips series already saved. Leave empty for a fresh run. |
incrementalModeboolean | Compare series against the previous run for the same scope (state key) and only emit NEW or UPDATED rows (plus optional EXPIRED tombstones). Compared: title, episode count, categories, theme tags, labels, free window, creator id, shortcut count and the episode list (number, id, paid flag, intro flag). Ignored: watch count, signed cover URL, scrape time. Unchanged series are skipped and not charged. |
stateKeystring | Name of the remembered baseline for incremental mode. Defaults to a hash of the current scope, so two runs with the same settings compare against each other automatically. |
emitUnchangedboolean | In incremental mode, also emit rows classified UNCHANGED (handy for full snapshots or debugging). |
emitExpiredboolean | In incremental mode, emit an EXPIRED row for series present in the baseline but missing from this run. Only a scan that walked the whole scope expires anything: a run stopped by Max items, Max pages, an error, or started mid-catalogue never does. Tombstones respect Max items. |
ignoreFieldsForChangesarray | Extra dataset fields that must NOT mark a record UPDATED when they change (watch count, cover URL and scrape time are ignored by default). |
mcpConnectorsarray | Optionally send the results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per series, not the full JSON, the complete record stays in the dataset. Leave empty to skip. |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
collection_idcollection idtitletitlecover_urlCover (image)episode_countepisode countwatched_countwatched countcategoriescategoriestheme_tagstheme tagscategory_filterscategory filtersis_limited_freeis limited freelabel_hotlabel hotlabel_newlabel newlanguage_codelanguage codeShow 39 more fields
scenescenekeywordkeywordchangeTypechangeTypescrapedAtscrapedAtvideo_idvideo idcreator_idcreator idshort_cut_numshort cut numepisodes_collectedepisodes collectedepisodesepisodescover_widthcover widthcover_heightcover heightsource_collection_idsource collection iddetailFetcheddetailFetcheddescriptiondescriptionvideo_textvideo textvideo_text_languagevideo text languagevideo_urlvideo urlvideo_play_countvideo play countvideo_like_countvideo like countvideo_comment_countvideo comment countvideo_share_countvideo share countvideo_collect_countvideo collect countvideo_duration_secondsvideo duration secondstotal_duration_secondstotal duration secondstheme_tags_entheme tags entheme_tag_keystheme tag keysvideo_created_atvideo created atvideo_topicsvideo topicscreator_usernamecreator usernamecreator_nicknamecreator nicknamecreator_profile_urlcreator profile urlcreator_biocreator biocreator_verifiedcreator verifiedcreator_followerscreator followerscreator_total_likescreator total likesvideoStatsFetchedvideoStatsFetchedchangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"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"
}Ways to use this data
- 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.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does PineDrama Scraper return?
PineDrama Scraper returns 51 documented fields, including collection id, title, cover, episode count, watched count, categories, theme tags and category filters. Availability of each field depends on the source page and the selected mode.
How much does PineDrama Scraper cost?
It costs $1.50 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
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.
