Wattpad Story Scraper
Pricing
from $0.45 / 1,000 stories
Wattpad Story Scraper
Find public Wattpad stories by keyword, tag, or genre. Get story details, author story lists, chapter lists, or readable chapter text with public filters.
Pricing
from $0.45 / 1,000 stories
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
📚 Find Wattpad stories and chapter text
Story researchers, writers, catalog builders, and data teams can use this Actor to collect public Wattpad stories. It returns story details, author story lists, chapter lists, and readable chapter text so you can compare public stories, study author catalogs, or build your own dataset.
- Find Wattpad Stories to start a public story search.
- Browse Wattpad Stories: Romance to collect public romance story data.
- Browse Wattpad Fanfiction to explore public fanfiction stories.
- Browse Wattpad Fantasy Stories to find public fantasy stories.
- Browse Wattpad Science Fiction Stories to find public science fiction stories.
- Browse Wattpad Mystery Stories to find public mystery stories.
- Browse Wattpad Horror Stories to find public horror stories.
🧾 Wattpad data you can use
Each saved row is a story, author, or chapter shape. Fields may be absent when Wattpad does not provide them. Public author contact emails are included when the source exposes them.
Story discovery
Search by keyword, tag, or genre or category. Filter discovery by language, completion, access, maturity, minimum votes, or minimum reads. You can also order stories by relevance, votes, reads, comments, or recent updates.
Story details
Look up a public story by ID or URL. A story row can include its title, description, author, cover, tags, categories, language, status, counts, publication dates, chapter list, and the discovery value that first saved it.
Author story lists
Use a public username to get available author profile details, engagement, and the author’s public story list.
Chapter text
Use a public chapter ID or URL to get readable chapter text with its title, link, word count, publication date, and engagement when available.
▶️ Run one Wattpad task at a time
Choose one target
Each run uses one target: story search by keyword, story search by tag, genre or category browsing, story details, an author story list, or chapter text. Use a separate run for a different task or a different set of settings.
Use public inputs
The Actor reads public Wattpad data. It does not unlock private, login-gated, removed, mature-gated, or paywalled content.
Limit the work
Set maxItems when you want the run to stop after a chosen number of returned items. Leave it empty to return all available results until the source is exhausted. This is a work limit, not a promise of a fixed number of results.
Keep the first discovery match
For story discovery, the first eligible match for a source story is saved at once. Later matches for the same story are ignored. This keeps one saved row for the source story and keeps its first discovery value in discoveryInput.
⚙️ Input
Choose one target for each run. The other fields apply to the targets named in their descriptions.
Input fields
| Field | Type | What it does |
|---|---|---|
target | string (select) | Chooses keyword search, tag search, genre or category browsing, story details, author stories, or chapter text. |
keywords | array of strings | Finds public stories by one or more words or phrases. Up to 500 keywords. |
tags | array of strings | Finds public stories by one or more Wattpad tags. Up to 500 tags. |
genresOrCategories | array of strings | Browses public stories in one or more Wattpad genres or categories. Up to 500 values. |
storyIdsOrUrls | array of strings | Gets details for public Wattpad story IDs or URLs, including a public chapter list when available. Up to 500 values. |
usernames | array of strings | Gets available public profile details, author engagement, and stories for public Wattpad usernames. Up to 500 usernames. |
chapterIdsOrUrls | array of strings | Extracts readable text from public Wattpad chapter IDs or URLs. Up to 500 values. |
language | string (select) | Filters keyword, tag, or genre discovery by a Wattpad language code. Leave empty for all languages. |
completion | string (select) | Shows only completed or ongoing stories. Leave empty for both. |
access | string (select) | Shows only free or paywalled public stories. It does not unlock paid content. Leave empty for both. |
maturity | string (select) | Filters by the public story maturity label. Mature-gated items are skipped when they are not publicly available. Leave empty for both. |
minimumVotes | integer | Keeps discovered stories with at least this many votes. Leave empty for no minimum. |
minimumReads | integer | Keeps discovered stories with at least this many reads. Leave empty for no minimum. |
sortBy | string (select) | Orders discovered stories by relevance, votes, reads, comments, or recent updates. The recent-updates feed is used for genre or category browsing. |
maxItems | integer | Stops after this many returned items. Leave empty to return all available results until the source is exhausted. |
Example input
This is the public input from the successful hosted QA default-input run:
{"target": "searchByKeyword","keywords": ["fantasy"],"maxItems": 25}
🧾 Output
The default dataset contains one row for each successful public story, author, or chapter task. Fields that are not available from the source are omitted.
Dataset link
| Field | Type | What it does |
|---|---|---|
dataset | string URL | Links to the Apify dataset that stores the saved public story, author, or chapter rows. |
Story rows
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies this row as story. |
storyId | string | Stable public Wattpad story ID. |
title | string | Public story title. |
description | string | Public story description. |
storyUrl | string | Canonical public story URL. |
coverUrl | string | Public story cover image URL. |
author | object | Public author fields when available. |
author.username | string | Public Wattpad username. |
author.displayName | string | Public author display name. |
author.profileUrl | string | Canonical public author profile URL. |
author.avatarUrl | string | Public author avatar image URL. |
author.bio | string | Public author biography. |
author.location | string | Public location listed by the author. |
author.websiteUrl | string | Public website URL listed by the author. |
author.contactEmail | string | Public contact email shown in the author profile when available. |
author.contactEmailSource | string | Public profile context where the contact email was shown. |
tags | array of strings | Public tags assigned to the story. |
categories | array of strings | Public genres or categories assigned to the story. |
language | string | Language reported for the story. |
completionStatus | string | Whether the story is completed or ongoing. |
maturity | string | Public maturity label for the story. |
accessStatus | string | Whether the public story is free or paywalled. |
wordCount | integer | Reported story word count. |
chapterCount | integer | Number of public chapters reported for the story. |
engagement | object | Public story engagement counts when available. |
engagement.votes | integer | Public story vote count. |
engagement.reads | integer | Public story read count. |
engagement.comments | integer | Public story comment count. |
publication | object | Public story publication dates when available. |
publication.firstPublishedAt | string | First publication date and time. |
publication.lastPublishedAt | string | Last publication or update date and time. |
chapters | array of objects | Public chapter metadata when available. |
chapters[].chapterId | string | Stable public chapter ID. |
chapters[].title | string | Public chapter title. |
chapters[].chapterUrl | string | Canonical public chapter URL. |
chapters[].position | integer | Chapter position in the story. |
chapters[].publishedAt | string | Chapter publication date and time. |
chapters[].wordCount | integer | Reported chapter word count. |
chapters[].accessStatus | string | Whether the public chapter is free or paywalled. |
chapters[].engagement | object | Public chapter engagement counts when available. |
chapters[].engagement.votes | integer | Public chapter vote count. |
chapters[].engagement.reads | integer | Public chapter read count. |
chapters[].engagement.comments | integer | Public chapter comment count. |
discoveryInput | string | Keyword, tag, or genre value that first caused this story row to be saved. |
Example story row
This unshortened row is from the successful current-beta keyword search for fantasy.
{"recordType": "story","storyId": "305220141","title": "Fantasy school with 4w✔️✔️","description": "වැම්පයර් කෙනෙක්....\nවෘකයෙක්....\nකොටියෙක්..\nසර්පයෙක්....\n\n\nඅපි 4w එහෙම කියන්නෙ අපි හතර දෙනාම පරිවර්තනය වුනාම සුදු පාට නිසා....මුලු ස්කූල් එකේම ගොඩක් ප්රසිද්ද කට්ටියක් තමයි අපි...\n\n\n\n\n\n\n\nකෙල්ලො හතර දෙනෙක්....\nපලිගුවක් .....\nලොකු රහසක්.....\n\n\n\n\nFantasy school with 4w","storyUrl": "https://www.wattpad.com/story/305220141-fantasy-school-with-4w%E2%9C%94%EF%B8%8F%E2%9C%94%EF%B8%8F","coverUrl": "https://img.wattpad.com/cover/305220141-256-k565918.jpg","author": {"username": "Snowg716","profileUrl": "https://www.wattpad.com/user/Snowg716","avatarUrl": "https://img.wattpad.com/useravatar/Snowg716.128.802991.jpg","bio": "another account \n@frostjessica6","location": "ඩිස්නිලන්තෙ😌"},"tags": ["danny","fantasy","friendship","love","magic","sinhala","sl","snake","srilanka","tiger","vampire","werewolf","wolf","සිංහල"],"categories": ["Fantasy"],"language": "English","completionStatus": "completed","maturity": "general","accessStatus": "free","wordCount": 373426,"chapterCount": 38,"engagement": {"votes": 3604,"reads": 34180,"comments": 1323},"publication": {"lastPublishedAt": "2024-08-19 12:53:36"},"discoveryInput": "fantasy"}
Author rows
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies this row as author. |
author | object | Public author fields when available. |
author.username | string | Public Wattpad username. |
author.displayName | string | Public author display name. |
author.profileUrl | string | Canonical public author profile URL. |
author.avatarUrl | string | Public author avatar image URL. |
author.bio | string | Public author biography. |
author.location | string | Public location listed by the author. |
author.websiteUrl | string | Public website URL listed by the author. |
author.contactEmail | string | Public contact email shown in the author profile when available. |
author.contactEmailSource | string | Public profile context where the contact email was shown. |
engagement | object | Aggregate public author engagement when available. |
engagement.votes | integer | Aggregate public vote count. |
stories | array of objects | Stories in the author’s public bibliography. |
stories[].storyId | string | Stable public story ID. |
stories[].title | string | Public story title. |
stories[].description | string | Public story description. |
stories[].storyUrl | string | Canonical public story URL. |
stories[].coverUrl | string | Public story cover image URL. |
stories[].tags | array of strings | Public story tags. |
stories[].categories | array of strings | Public story genres or categories. |
stories[].language | string | Language reported for the story. |
stories[].completionStatus | string | Whether the story is completed or ongoing. |
stories[].maturity | string | Public maturity label for the story. |
stories[].accessStatus | string | Whether the public story is free or paywalled. |
stories[].wordCount | integer | Reported story word count. |
stories[].chapterCount | integer | Number of public chapters reported for the story. |
stories[].engagement | object | Public story engagement counts when available. |
stories[].engagement.votes | integer | Public story vote count. |
stories[].engagement.reads | integer | Public story read count. |
stories[].engagement.comments | integer | Public story comment count. |
stories[].publication | object | Public story publication dates when available. |
stories[].publication.firstPublishedAt | string | First publication date and time. |
stories[].publication.lastPublishedAt | string | Last publication or update date and time. |
Example author row
This unshortened row is from the successful current-beta author-stories run for CrystalScherer.
{"recordType": "author","author": {"username": "CrystalScherer","profileUrl": "https://www.wattpad.com/user/CrystalScherer","avatarUrl": "https://img.wattpad.com/useravatar/CrystalScherer.128.957869.jpg","bio": "Author website (has a contact form): www.CrystalScherer.com\nNewsletter about new releases/major updates: subscribepage.io/CrystalSchererLandingPageWP\n\nWelcome to my humble abode.\nA place of Science Fiction with a dash of Fantasy.\nI tend to dabble in different genres and themes (dragons, non-horror zombies, werewolves, etc), so I have a variety of stories if you keep scrolling. Most are standalones and can be read in any order (true sequels will say they are sequels). \n\nA quick summary of my stories can be found in the 'My Stories' chapter of my 'What's Up?' book or on my website.\nEverything is completed. (If I'm posting something, the upload schedule will be in the summary, minimum of one chapter a week).\n\nA bit about myself:\nI originally joined Wattpad to read free books and decided to try my hand at writing a book. Now, I'm addicted to writing and thoroughly enjoy it.\nI thank the Lord for giving me this gift. He has blessed me in so many ways that I simply lose count. \n\nTo God be the glory.\n"His oath, His covenant, His blood,\nSupport me in the raging flood;\nWhen every earthly prop gives way,\nThis still is all my strength and stay."\n\nHave an Awesome day and Happy reading!\n\nWebsite: www.crystalscherer.com\nTwitter: twitter.com/Crystal_Scherer\nDiscord server for followers: discord.gg/GhPzVetSYK\n\n"Always do right. This will gratify some people, and astound the rest." -- Samuel Clemens","location": "Athabasca, Alberta","websiteUrl": "https://www.crystalscherer.com/"},"stories": [{"storyId": "399985524","title": "Sample chapter: Beast Tamer","description": "Submission to the \"What In The Wattpad\" contest.\n\nWho needs a leopard for protection when you have a rabbit? \nBeast Tamer Lydia knows one of her companions is a lethal predator - and the other just pretends to be harmless.\n\n\nThis is just a sample chapter. Full series being planned for 2027 release.","storyUrl": "https://www.wattpad.com/story/399985524-sample-chapter-beast-tamer","coverUrl": "https://img.wattpad.com/cover/399985524-256-k242839.jpg","tags": ["animals","beasttamer","bond","excerpt","fantasy","leopard","magic","noromance","rabbit","ranger","sample","witwcontest"],"categories": ["Fantasy"],"language": "English","completionStatus": "completed","maturity": "general","accessStatus": "free","wordCount": 10304,"chapterCount": 1,"engagement": {"votes": 266,"reads": 2241,"comments": 102},"publication": {"firstPublishedAt": "2025-08-15T14:27:16Z","lastPublishedAt": "2025-08-15T17:00:36Z"}},{"storyId": "82040526","title": "A Different Virus: Heartfire","description": "In the future, everyone who's bitten by a zombie turns into one... until Diane doesn't. Seven days later, she's facing consequences she never imagined.\n \n * * * * *\n \nAs civilization collapses under a relentless wave of zombies, Diane and her friends take shelter in a military base. However, while she's rescuing another survivor, Diane gets bitten by one of the monsters. She hides it and runs away, knowing she only has days left to live. \nBut she soon discovers she isn't turning into a zombie - she's turning into something else.\n\n---------\n\nExcerpt:\n\nI looked up and stared. My reflection looked back at me in the mirror of the dark room. My eyes were literally glowing, there was no mistaking it. It was not a reflection of light, or any of the other excuses I had used or others had assumed. They were glowing a light sapphire blue color. It was not a bright glow, but it was definitely a glow.\n\nGlowing eyes were not normal.\nOkay, at this point I had to admit it, I was no longer normal.\nWhat was I then? For that, I had no answer\n\n[[Word count: 495,000]]\nCopyright August 2016. All Rights Reserved. Readers may not copy, alter, or steal this story. Fanfictions are allowed to use my *world* and *zombie rules* as long as credit is given.\nCover was lovingly made by JimenaVivancoo.","storyUrl": "https://www.wattpad.com/story/82040526-a-different-virus-heartfire","coverUrl": "https://img.wattpad.com/cover/82040526-256-k802707.jpg","tags": ["action","adventure","apocalypse","armageddon","canada","contemporary","death","disaster","friendship","futuristic","happyending","horror","medical","monsters","mutation","newadult","rebuild","relationships","romantic","sciencefiction","scifi","survival","thriller","wattpadoriginals","zombies"],"categories": ["Science Fiction"],"language": "English","completionStatus": "completed","maturity": "general","accessStatus": "paywalled","wordCount": 2670557,"chapterCount": 199,"engagement": {"votes": 549368,"reads": 11391314,"comments": 161216},"publication": {"firstPublishedAt": "2016-08-19T13:40:11Z","lastPublishedAt": "2017-10-21T18:32:57Z"}},{"storyId": "326317704","title": "Tricked Into Flight","description": "Desperate to keep her magic hidden, Katerina goes to great lengths to avoid dragons and mages. When she gets cornered by evil mages, her only chance at escape involves freeing a trapped dragon.\n * * *\nKaterina's biggest fear is that unscrupulous mages or dragons would discover her magic and use her as a living magical battery.\nWhen she stumbles into a group of evil mages trying to magically enslave a dragon, she releases the dragon to act as a distraction, hoping he would attack the mages while she escaped.\nBut magic has rules, and when you free a dragon mage, it creates magedebt that they must repay, lest their magic fade. \n\nForced to travel together, Katerina struggles to hide her magic as she accompanies Rakota and his friends while they hunt down the Shadow Mages.\n\nRakota is one of many dragons who detest humans due to how many have tried to slay him, steal his treasure, or control him with magic. He has no desire for a rider, but when his childhood sweetheart shows up, she won't consider courtship unless he has one.\n\nAs if evil mages with ancient spells aren't enough, word comes from the coast that the nagas are planning to invade and wipe out the humans.\n\nGoals and secrets clash as Katerina strives to keep her magic hidden, yet that very magic might be the key to stopping the war, and becoming Rakota's rider would give him the family he's always dreamed of. \n\nBut all magic has a price, and to become a rider, she'd have to forfeit her freedom.\n\n\n\n\nCopyright November 2022. All Rights Reserved. Readers may not copy or steal this story. Fanfictions are allowed to use my *world* and *magic rules* as long as credit is given.","storyUrl": "https://www.wattpad.com/story/326317704-tricked-into-flight","coverUrl": "https://img.wattpad.com/cover/326317704-256-k927737.jpg","tags": ["chosen","dragon","dragonmage","dragonrider","dragons","evilmage","fantasy","happyending","hiding","mage","magedebt","magic","naga","noromance","orphan","rider","riderbond","running","secrets","texttospeech"],"categories": ["Fantasy"],"language": "English","completionStatus": "completed","maturity": "general","accessStatus": "free","wordCount": 437931,"chapterCount": 53,"engagement": {"votes": 41326,"reads": 462487,"comments": 7113},"publication": {"firstPublishedAt": "2022-11-09T01:14:58Z","lastPublishedAt": "2023-08-08T14:00:02Z"}}],"engagement": {"votes": 2485181}}
Chapter rows
| Field | Type | What it does |
|---|---|---|
recordType | string | Identifies this row as chapter. |
chapterId | string | Stable public chapter ID. |
chapterTitle | string | Public chapter title. |
chapterUrl | string | Canonical public chapter URL. |
storyId | string | Stable public story ID that contains the chapter. |
storyTitle | string | Public title of the story that contains the chapter. |
storyUrl | string | Canonical public story URL that contains the chapter. |
author | object | Public author fields when available. |
author.username | string | Public Wattpad username. |
author.displayName | string | Public author display name. |
author.profileUrl | string | Canonical public author profile URL. |
author.avatarUrl | string | Public author avatar image URL. |
author.bio | string | Public author biography. |
author.location | string | Public location listed by the author. |
author.websiteUrl | string | Public website URL listed by the author. |
author.contactEmail | string | Public contact email shown in the author profile when available. |
author.contactEmailSource | string | Public profile context where the contact email was shown. |
position | integer | Chapter position in the story. |
publishedAt | string | Chapter publication date and time. |
wordCount | integer | Reported chapter word count. |
accessStatus | string | Whether the public chapter is free or paywalled. |
engagement | object | Public chapter engagement counts when available. |
engagement.votes | integer | Public chapter vote count. |
engagement.reads | integer | Public chapter read count. |
engagement.comments | integer | Public chapter comment count. |
text | string | Readable public chapter text. |
Example chapter row
This genuine current-beta row is shortened because its text is 17,040 characters. The shown metadata is real. The long author bio and chapter text use the JSON string "..." as omission markers.
{"recordType": "chapter","chapterId": "300363744","chapterTitle": "Chapter 1","chapterUrl": "https://www.wattpad.com/300363744-a-different-virus-heartfire-chapter-1","storyId": "82040526","storyTitle": "A Different Virus: Heartfire","storyUrl": "https://www.wattpad.com/story/82040526-a-different-virus-heartfire","author": {"username": "CrystalScherer","profileUrl": "https://www.wattpad.com/user/CrystalScherer","avatarUrl": "https://img.wattpad.com/useravatar/CrystalScherer.128.957869.jpg","bio": "...","location": "Athabasca, Alberta","websiteUrl": "https://www.crystalscherer.com/"},"position": 1,"publishedAt": "2016-08-19T13:42:16Z","wordCount": 3415,"accessStatus": "free","engagement": {"votes": 15363,"reads": 917158,"comments": 16914},"text": "..."}
💳 Pricing
Charged events
| Event | Price | What is saved |
|---|---|---|
| Story | $0.00045 per saved story row | One public story with the fields the source provides. |
| Chapter text | $0.0045 FREE tier, $0.00385 BRONZE, $0.0033 SILVER, or $0.0027 GOLD, DIAMOND, and PLATINUM | One public chapter with available text. |
The platform applies the tier for your account. These events describe saved public rows. They do not promise a row when the source has no available data.
🔌 Integrations
Video guide
See this video for a walkthrough of the Actor:
❓ FAQ
What kind of Wattpad access does it use?
It reads public Wattpad data. It does not bypass private or login-gated pages.
Can I use a story or chapter URL?
Yes. Story details accept public story IDs or URLs, and Chapter text accepts public chapter IDs or URLs.
Can one run use more than one target?
No. Choose one target and its settings for each run. Use separate runs for different tasks or configurations.
What happens to private, removed, mature-gated, or paywalled content?
The Actor does not bypass those controls. An item may be unavailable or omitted when Wattpad does not make it public.
Does a story row include the chapter text?
No. Story rows can include a public chapter list and chapter metadata. Use Chapter text with chapter IDs or URLs for readable text.
Are comment counts and comment text both returned?
Engagement counts may be returned when available. Comment text is not part of the public output schema.
How does duplicate discovery work?
For discovery, the first eligible match for a source story is saved. Later matches for that story are ignored. discoveryInput keeps the first keyword, tag, or genre value that caused the saved story row.
What does an empty work limit do?
Leave maxItems empty to return all available results until the source is exhausted. This does not promise exhaustive coverage of Wattpad.
📝 Changelog
v1.0 (12-09-2026)
- Discovery results follow the selected order, including votes, reads, comments, and recent updates, across multiple search values.
- Story and chapter rows include available public author details and story context.
- Author story tasks return public published stories with their available story details.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Goodreads Scraper helps you collect public book and author catalog data alongside Wattpad story research.
- Webpage Text Extractor extracts readable text from public pages when you have URLs outside Wattpad.
- Wayback Machine Search helps you check archived versions and history for public story pages.
- Wattpad Story Scraper offers another public Wattpad story search and metadata workflow.
- Wattpad Story Metadata Scraper focuses on public Wattpad story metadata lookups.
Made with ❤️ by Maxime Dupré