# Wattpad Story Scraper (`maximedupre/wattpad`) Actor

Find public Wattpad stories by keyword, tag, or genre without credentials. Get story details, author story lists, chapter lists, or readable chapter text with public filters.

- **URL**: https://apify.com/maximedupre/wattpad.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, For creators
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.45 / 1,000 stories

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### 📚 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](https://apify.com/maximedupre/wattpad/examples/wattpad-stories)** to start a public story search.
- Browse **[Wattpad Stories: Romance](https://apify.com/maximedupre/wattpad/examples/wattpad-stories-romance)** to collect public romance story data.
- Browse **[Wattpad Fanfiction](https://apify.com/maximedupre/wattpad/examples/wattpad-fanfiction)** to explore public fanfiction stories.
- Browse **[Wattpad Fantasy Stories](https://apify.com/maximedupre/wattpad/examples/wattpad-fantasy-stories)** to find public fantasy stories.
- Browse **[Wattpad Science Fiction Stories](https://apify.com/maximedupre/wattpad/examples/wattpad-science-fiction-stories)** to find public science fiction stories.
- Browse **[Wattpad Mystery Stories](https://apify.com/maximedupre/wattpad/examples/wattpad-mystery-stories)** to find public mystery stories.
- Browse **[Wattpad Horror Stories](https://apify.com/maximedupre/wattpad/examples/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 appear only when they are visible and requested.

**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. |
| `includeAuthorContactEmails` | boolean | Requests publicly visible author contact emails and their source context when available. It never bypasses access controls and is ignored for Chapter text. |
| `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:

```json
{
  "target": "searchByKeyword",
  "keywords": [
    "fantasy"
  ],
  "includeAuthorContactEmails": false,
  "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.

**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 genuine current-beta row is shortened because the live story contains 38 chapter entries. The shown values are real. Omitted description text and chapter entries are marked with the JSON string `"..."`.

```json
{
  "recordType": "story",
  "storyId": "305220141",
  "title": "Fantasy school with 4w✔️✔️",
  "description": "...",
  "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",
    "displayName": "Jessica Frost",
    "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": 3564,
    "reads": 33480,
    "comments": 1285
  },
  "publication": {
    "firstPublishedAt": "2022-03-20T16:42:21Z",
    "lastPublishedAt": "2022-07-20T06:08:21Z"
  },
  "chapters": [
    {
      "chapterId": "1205608182",
      "title": "4W Intro",
      "chapterUrl": "https://www.wattpad.com/1205608182-fantasy-school-with-4w%E2%9C%94%EF%B8%8F%E2%9C%94%EF%B8%8F-4w-intro",
      "position": 1,
      "publishedAt": "2022-03-20T17:16:51Z",
      "wordCount": 4576
    },
    "..."
  ]
}
```

**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. |
| `engagement.reads` | integer | Aggregate public read count. |
| `engagement.comments` | integer | Aggregate public comment 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 genuine current-beta author row includes the public profile and two story entries returned for the selected username.

```json
{
  "recordType": "author",
  "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": "ඩිස්නිලන්තෙ😌"
  },
  "stories": [
    {
      "storyId": "409460076",
      "title": "Reborn Spider lily",
      "description": "තමන්ගේ හතුරා තමන්ව මරයි කියන බයට මතකය නෑ වගේ ඉන්න උනොත්...",
      "storyUrl": "https://www.wattpad.com/story/409460076-reborn-spider-lily",
      "coverUrl": "https://img.wattpad.com/cover/409460076-256-k594132.jpg",
      "tags": [
        "dark",
        "lanka",
        "love",
        "romance",
        "sinhala",
        "sl",
        "sri",
        "srilanka"
      ],
      "categories": [
        "Non-Fiction"
      ],
      "language": "English",
      "completionStatus": "ongoing",
      "maturity": "general",
      "wordCount": 16398,
      "chapterCount": 2,
      "engagement": {
        "votes": 7,
        "reads": 66,
        "comments": 2
      },
      "publication": {
        "firstPublishedAt": "2026-03-27T13:12:30Z",
        "lastPublishedAt": "2026-04-09T20:23:12Z"
      }
    },
    {
      "storyId": "292265137",
      "title": "Miya✔️✔️",
      "description": "දෙමව්පියෝ...සහෝදරයෝ විතරන් නෙමේ හොදම යාලුවෝ දෙන්නායි Boy Friend යි හැමෝම එක දවසින් ඔයාව ප්‍රතික්ශේප කරොත්....කොටින්ම කිව්වොත් ඔයාව ගෙදරින් එලියට ඇදලා දැම්මොත්...මොනවා වෙයිද...\n\n\n\n\n\n\n\n\nහායි ☺️❤️ මේ තමා සාමාන්‍ය මිනිස්සු ආශ්‍රයෙන් මම ලියන පලවෙනි පොත...අඩු පාඩු නම් ගොඩක් ඇති....☺️☺️ කියවලා බලන්න ඉතිම්",
      "storyUrl": "https://www.wattpad.com/story/292265137-miya%E2%9C%94%EF%B8%8F%E2%9C%94%EF%B8%8F",
      "coverUrl": "https://img.wattpad.com/cover/292265137-256-k218882.jpg",
      "tags": [
        "broken",
        "hope",
        "love",
        "sinhala",
        "sl",
        "srilanka",
        "සිංහල"
      ],
      "categories": [
        "Short Story"
      ],
      "language": "English",
      "completionStatus": "completed",
      "maturity": "general",
      "wordCount": 101536,
      "chapterCount": 15,
      "engagement": {
        "votes": 2994,
        "reads": 36193,
        "comments": 236
      },
      "publication": {
        "firstPublishedAt": "2021-11-21T08:53:01Z",
        "lastPublishedAt": "2021-12-05T14:32:45Z"
      }
    }
  ],
  "engagement": {
    "votes": 34917
  }
}
```

**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 shows the readable public text returned for one chapter.

```json
{
  "recordType": "chapter",
  "chapterId": "1205608182",
  "text": "අපි 4W මුලු ස්කූල් එකේම ප්‍රසිද්ද සෙට් එකක්...\nකෙටියෙන්ම කිව්වොත් මැර කල්ලියක් වගේ....\nඅපි කවුරුත් සාමාන්‍ය අය නම් නෙමෙයි...\nඉමා තමා අපි සෙට් එකෙන් අක්කා...\nඑයා vampire  කෙනෙක්...\nපරිවර්තනය උනාම සුදුයි...\nවවුලෙක් උනාමත් සුදුයි....\n😏 අහිම්සකයි වගේ හිටියට ඒම නෑ...\nවැම්පයර්ලා කොහෙද අහින්සක....\nඉමාට තියනවා හොද මොල රාජයෙක්...\nඉගනගන්න නෙමෙයි කූට උපක්‍රම වලට...\nසාමාන්‍යෙන් ටීම් එකක වැඩිමලා ටිකක් රෙස්පෙක්ට් එකට ඉන්නවනේ.... 😂 කියන්න සතුටුයි ඉමාට ඒම එකක් නෑ....\nඑයාගෙ ක්‍රස් එක ඩැනී රෑන්ක්....කවුද දන්නෙ නෑ....ඒත් ඉතිම් ඉමා එයාට ගොඩක් ආසයි....එයා ලගදිම අපේ ෆැන්ටසි ස්කූල් එකට එනවා කියල කටකතාවක් තියනවා...\nima576   😌\nසුසුකියා තමා නමට පොඩි එකා...\nඑයා වුල්ෆියෙක්\nසුදුම සුදුයි \nඅර්ද වශයෙන් සහ සම්පූර්නව පරිවර්තනය වෙන්න පුලුවන්\nහී....හුලතල් කියුට් සෝස මල වගේ හිටියට මාර සැරයි...තුන් හතර පාරක් මගෙ බෙල්ල ගලවන්න ගියා...\nකොල්ලො ඇලජික්\nමෙයාගේ හිනාව නිසා ඕන දඩුවමකින් ලිස්සලා යන්න මාර හැකියාවක් තීන්නේ...\nChenuliSathkumara\nජුලියා....ආදරේට ජූලී..\nමැද දෙන්නගෙන් එකෙක්.....\nමෙයා පූසි වගේ හිටියට හෙන සයිස් සුදු කොටි දෙනක්...\nමෙයාට ඉන්නවා සිරියාවන්ත ටුයිනෙක් 😌\nජූලීගේ ක්‍රස් එක නික්....නම විතරයි දම්නේ.....\nජූලී ඇට්ටරයි ....ලගින් ගියොත් ඇහැක් නැති වෙන සීන් එකක් තියෙන්නේ....\nකොටියෙක් වගේ හුරන් කන්න වගේම පූශ් පැටියෙක් වගේ පුරු පුරු ගාන්නත් පුලුවන්...\nනේත\nCalypsoArellano1\nමේ මලක් වගේ දැරිවිය තමා මං😌\nමැද උන් දෙන්නගෙන් එකෙක්...ජූලියාගේ ට්වින් ජෙසිකා...ජෙසී කියල තමා කියන්නේ...\nමන් මලක් වගේ අහින්සකයි.\n😌 වැම්පියෙක් වගේ දතුත් නෑ....\n😌 වෘකයෙක් වගේ ගොරවන්නෙත් නෑ...\n😌 කොටියෙක් වගේ නියපොතුත් නෑ...\nඒකෙන් තේරෙනෝනේ මං ගැන...\nමන් හැපින්නක්....😌 සෙට් එකෙ අහිම්ශකම සතා නේහ්...\nනිකම් හැපින්නක් නෙමේ වෙස් මාරු කරන සුදු හැපින්නක්....\nඅපි තමා 4W (4 white) අපි හැමෝම පරිවර්තනය උනාම සුදුයි\nෆැන්ටසි / මැජික් ස්කූල් එකේ හැදියාව ගෑවිලාවත් නැති කෙල්ලො හතර දෙනා තමා අපි....\n😁 මේක මගේ අලුත් කතාව...\nමුල ඉදන් මා එක්ක හිටිය මගේ අක්කායි නංගියි ට්විනයි තුන්දෙනාගේ චරිත අරන් තමා ලියන්නේ...",
  "chapterTitle": "4W Intro",
  "chapterUrl": "https://www.wattpad.com/1205608182-fantasy-school-with-4w%E2%9C%94%EF%B8%8F%E2%9C%94%EF%B8%8F-4w-intro",
  "publishedAt": "2022-03-20T17:16:51Z",
  "wordCount": 916,
  "engagement": {
    "votes": 156,
    "reads": 2592,
    "comments": 61
  }
}
```

#### 💳 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:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Do I need a Wattpad account or API key?

No. The Actor uses public Wattpad access and does not need a Wattpad login or API key. 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

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~wattpad/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Goodreads Scraper](https://apify.com/maximedupre/goodreads-scraper) helps you collect public book and author catalog data alongside Wattpad story research.
- [Webpage Text Extractor](https://apify.com/maximedupre/webpage-text-extractor) extracts readable text from public pages when you have URLs outside Wattpad.
- [Wayback Machine Search](https://apify.com/maximedupre/wayback-machine-search) helps you check archived versions and history for public story pages.
- [Wattpad Story Scraper](https://apify.com/crawlerbros/wattpad-story-scraper) offers another public Wattpad story search and metadata workflow.
- [Wattpad Story Metadata Scraper](https://apify.com/jungle_synthesizer/wattpad-story-metadata-api-scraper) focuses on public Wattpad story metadata lookups.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose one public Wattpad task for this run. Use a separate run for each task and its settings.

## `keywords` (type: `array`):

Enter one or more words or phrases to find public Wattpad stories. You can enter up to 500 keywords.

## `tags` (type: `array`):

Enter one or more Wattpad tags to find public stories. You can enter up to 500 tags.

## `genresOrCategories` (type: `array`):

Enter one or more Wattpad genres or categories to browse public stories. You can enter up to 500 values.

## `storyIdsOrUrls` (type: `array`):

Enter one or more public Wattpad story IDs or URLs. Results include story details and a public chapter list when available. You can enter up to 500 values.

## `usernames` (type: `array`):

Enter one or more public Wattpad usernames. Results include available public profile details and author engagement. You can enter up to 500 usernames.

## `chapterIdsOrUrls` (type: `array`):

Enter one or more public Wattpad chapter IDs or URLs to extract readable chapter text. You can enter up to 500 values.

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

Optionally filter discovery by a Wattpad language code. Leave it blank to include all languages. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `completion` (type: `string`):

Optionally show only completed or ongoing stories. Leave it blank to include both. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `access` (type: `string`):

Optionally show only free or paywalled stories. This filters public results and does not unlock paid content. Leave it blank to include both. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `maturity` (type: `string`):

Optionally filter by the story maturity label. Mature-gated items are skipped when they are not publicly available. Leave it blank to include both. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `minimumVotes` (type: `integer`):

Optionally return stories with at least this many votes. Leave it blank for no minimum. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `minimumReads` (type: `integer`):

Optionally return stories with at least this many reads. Leave it blank for no minimum. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `sortBy` (type: `string`):

Choose how to order discovered stories: relevance, votes, reads, comments, or recent updates. Choosing Recent updates also requests the recently updated feed for genre or category browsing. This applies to Search by keyword, Search by tag, and Browse a genre or category.

## `includeAuthorContactEmails` (type: `boolean`):

Request publicly visible author contact emails and their source context when available. This applies to Search by keyword, Search by tag, Browse a genre or category, Story details, and Author stories. It is ignored for Chapter text and never bypasses access controls.

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

Optionally stop after this many returned items. Leave it blank to return all available results until the source is exhausted. This is a work limit, not a promise of that many results.

## Actor input object example

```json
{
  "target": "searchByKeyword",
  "keywords": [
    "fantasy"
  ],
  "includeAuthorContactEmails": false,
  "maxItems": 25
}
```

# Actor output Schema

## `dataset` (type: `string`):

Public story, author, and chapter data from Wattpad.

# 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 = {
    "target": "searchByKeyword",
    "keywords": [
        "fantasy"
    ],
    "maxItems": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/wattpad").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 = {
    "target": "searchByKeyword",
    "keywords": ["fantasy"],
    "maxItems": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/wattpad").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 '{
  "target": "searchByKeyword",
  "keywords": [
    "fantasy"
  ],
  "maxItems": 25
}' |
apify call maximedupre/wattpad --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/wattpad"
        }
    }
}

```

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/Uo7DUyTMyOKE6cdRU/builds/9Dx8f5fhkqLOJPcAy/openapi.json
