WEBTOON Scraper icon

WEBTOON Scraper

Scrape the WEBTOON catalog into structured data. Extract series, genres, rankings and complete episode lists, including titles, authors, descriptions,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

WEBTOON Scraper at a glance

WEBTOON Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes kind, recordid, titleno, title and url, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 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.80 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
22 options

Scrape the WEBTOON catalog into structured data. Extract series, genres, rankings and complete episode lists, including titles, authors, descriptions, thumbnails and other available series and episode details.

What WEBTOON Scraper can do

  • Five ways to find data. Search by keyword, browse a genre, a weekday schedule, a ranking chart or a canvas tab, or paste WEBTOON links directly. No need to build URLs by hand.
  • Detail enrichment on demand. Turn on series detail reads to pull authors, summary, schedule text and view/subscribe counters that no catalog card carries.
  • Episode expansion is opt-in. Switch it on to walk every discovered series' episode list and emit one row per episode, or leave it off for lean, series-only runs.
  • One shared cap. A single maxItems limit spans every series and episode row together, so cost stays predictable, and the series row is always emitted before its episodes for readable grouping.
  • Resume and incremental modes. Continue an interrupted crawl, or track a scope across scheduled runs and return only new, updated and reappeared series.
  • Loud failures, not silent empties. A refused run fails with a clear message instead of returning a dataset that looks like an empty search.

Choose what to collect

These inputs let you configure WEBTOON Scraper - Series, Episodes, Genres & Rankings. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to start the scrape. 'search' queries the catalog (keyword, genre, schedule or canvas index). 'url' processes the WEBTOON URLs you paste: genre, schedule, ranking, search and canvas pages are walked like a search, and a series list page emits the series (plus one row per episode when Include episodes is on). The output and resume sections below apply to both modes.

Choices: search, url

keywordstringTitle keyword to search for (for example tower of god). Leave empty to browse the genre or schedule instead.
searchTypestringWhich catalog index the keyword searches (all, originals, canvas).

Choices: all, canvas, originals

languagestringCatalog language edition (en, es, fr, de, id, th, zh-hant).

Choices: de, en, es, fr, id, th, zh-hant

sourcestringCatalog to browse when no keyword is set: originals or canvas.

Choices: canvas, originals

genrestringCatalog genre to browse when no keyword is set. Type it as you read it on the site (Drama, Slice of life, Romance); case and spacing are ignored. In search mode an unknown genre fails the run with the valid list; URL mode ignores this field.
sortOrderstringGenre page ordering: MANA (popularity), LIKEIT (likes), UPDATE (recency).

Choices: LIKEIT, MANA, UPDATE

Show 15 more inputs
More input fields
InputWhat it controls
weekdaystringWeekday schedule to browse (Monday to Sunday, abbreviations such as mon accepted). Leave empty to browse the genre instead.
urlsarrayOne or more webtoons.com URLs: genre (any sort order, any language), originals weekday schedule (path or ?weekday=), legacy dailySchedule, ranking, keyword search, canvas list (tab and sort order), series list pages (incl. &page=N), legacy episodeList?titleNo=, the mobile host (m.) and episode viewer links (mapped to their series). Each shipped example points at a different series or list, so every example returns its own rows. Left untouched in URL mode, one example of each shape is scraped.
fetchDetailsbooleanRead each series page for authors, summary and counters. Adds a per-series surcharge.
includeEpisodesbooleanOpen every discovered series page in search or URL mode and emit one row per episode. The series row and episode rows share the maxItems total cap.
maxItemsintegerMaximum total rows to return across all series and episode records (values above 1000000 are treated as 1000000). In search mode, series rows are emitted first and episode rows consume the remaining cap. This is the only default cap.
maxPagesintegerMaximum episode-list pages per series (0 means the built-in hard cap of 1000 pages per series; larger values are clamped to 1000; maxItems still applies).
resumeFromRunIdstringContinue an interrupted crawl from a previous run ID or dataset ID. See incrementalMode.
incrementalModebooleanTrack this scope across runs and stamp NEW, UPDATED, UNCHANGED, REAPPEARED. A series or episode is compared on its content fields (title, author, genre, summary, schedule, urls, completed and mature flags, latest episode number and date). These fields are excluded from change detection and still returned: likeCount, likeCountRaw, likeCountText, viewCount, subscribeCount, rank, badge, isRecentlyUpdated, imageUrl, referer, sourcePage, trendingDirection, trendingChange, thumbnailAlt and scrapedAt. A counter moving alone never reads UPDATED. See resumeFromRunId.
stateKeystringCustom incremental state key. Leave empty to derive one from the full scope.
emitUnchangedbooleanAlso return UNCHANGED rows (suppressed by default). Billed like any row.
emitExpiredbooleanAlso return EXPIRED rows for tracked series gone from the scope. Billed like any row.
ignoreFieldsForChangesarrayOptional. Extra field names that must NOT count as a change in incremental mode, on top of the built-in list (likeCount, likeCountRaw, likeCountText, viewCount, subscribeCount, rank, badge, isRecentlyUpdated, imageUrl, referer, sourcePage, trendingDirection, trendingChange, thumbnailAlt and scrapedAt). isCompleted, isMature and isUnsuitableForChildren are compared unless you add them here. A row whose only differences are in these fields is UNCHANGED, so it is not returned as UPDATED. Names match at any nesting depth. The fields still appear on rows that are returned.
mcpConnectorsarrayConnector IDs to forward results to (optional).
notionParentPageUrlstringParent page for the Notion connector (only used when a Notion connector is selected).
maxNotifyListingsintegerMaximum rows forwarded to each selected connector.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

kindkind
recordIdrecordId
titleNotitleNo
titletitle
urlurl
languagelanguage
genregenre
webtoonTypewebtoonType
sourcePagesourcePage
authorauthor
authorsauthors
summarysummary
Show 29 more fields
scheduleTextscheduleText
pageSchedulepageSchedule
rankrank
badgebadge
likeCountlikeCount
likeCountRawlikeCountRaw
viewCountviewCount
subscribeCountsubscribeCount
latestEpisodelatestEpisode
seriesRecordIdseriesRecordId
seriesTitleNoseriesTitleNo
seriesTitleseriesTitle
episodeNoepisodeNo
datedate
likeCountTextlikeCountText
isRecentlyUpdatedisRecentlyUpdated
imageUrlimageUrl
refererreferer
isCompletedisCompleted
isMatureisMature
trendingDirectiontrendingDirection
trendingChangetrendingChange
isUnsuitableForChildrenisUnsuitableForChildren
thumbnailAltthumbnailAlt
scrapedAtscrapedAt
changeTypechangeType
changedFieldschangedFields
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "kind": "webtoon",
  "recordId": "en-title-500001",
  "titleNo": 500001,
  "title": "Sample Series Title",
  "url": "https://www.webtoons.com/en/fantasy/sample-series-title/list?title_no=500001",
  "language": "en",
  "genre": "Fantasy",
  "webtoonType": "originals",
  "sourcePage": "ranking",
  "rank": 12,
  "badge": "NEW",
  "likeCountRaw": "245K",
  "likeCount": 245000,
  "author": "Sample Author",
  "authors": [
    "Sample Writer",
    "Sample Artist"
  ],
  "summary": "A short sample summary of the series premise.",
  "scheduleText": "Every Monday",
  "pageSchedule": null,
  "viewCount": 12000000,
  "subscribeCount": 340000,
  "latestEpisode": {
    "episodeNo": 42,
    "title": "Episode 42",
    "date": "Sep 20, 2026"
  },
  "imageUrl": "https://webtoon-phinf.pstatic.net/sample_thumb.jpg",
  "referer": "https://www.webtoons.com/"
}

Ways to use this data

  • Webtoon and manhwa aggregators: mirror new releases, genre rankings and episode drops across languages into your own catalog or app.
  • Content and licensing scouts: track rising titles by rank, likes and subscriber counts before they trend, using the ranking and genre modes.
  • Reading-list and notification tools: monitor a shortlist of series URLs on a schedule and alert on new episodes with incremental mode.
  • Localization and translation teams: compare titles, genres and publication schedules across the seven catalog language editions.
  • Market and fandom research: build historical datasets of view counts, subscribe counts and genre popularity for analysis.

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 WEBTOON Scraper return?

The documented output for WEBTOON Scraper includes kind, recordid, titleno, title, url, language, genre and webtoontype. Availability of each field depends on the source page and the selected mode.

How much does WEBTOON Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 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, updated and reappeared records; unchanged ones are suppressed and not billed unless Emit UNCHANGED rows is on.

Why did Include episodes return fewer rows than I expected?

Series rows and episode rows share one Max items cap, and the series row is emitted first, so a low cap can be used up before every episode is read. Raise Max items, or use Max pages per series to bound how many episode-list pages each series walks instead.

Why did my run fail instead of returning an empty dataset?

If every scope is refused, the run stops with a clear message so "no matches" is never confused with "nothing could be read". Run it again in a few minutes. If only some scopes could be read, you still get what was found and the run succeeds; the run log names each scope that was refused or errored.

Why does my keyword search also return genre rows?

With the originals source, search mode reads the genre page (default drama) after the keyword results, and fills the rest of Max items from it. Filter the dataset on sourcePage "search" to keep only keyword hits, or lower Max items.

Ready to collect with WEBTOON Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.