# Pikabu Scraper (`maximedupre/pikabu`) Actor

Collect public Pikabu posts by keyword or tag, or comments from one public post. See titles, links, authors, ratings, tags, media, and comment context when available in structured dataset rows.

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

## Pricing

from $2.95 / 1,000 posts

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🔎 Find public Pikabu posts and comments

Researchers, content teams, and developers can collect public Pikabu posts or comments as structured data. Search posts with one keyword or one tag or category feed URL, or collect comments from one public post URL. Use the rows to review source links, authors, ratings, tags, media, and comment context in one dataset.

- Use **[Pikabu feed scraper](https://apify.com/maximedupre/pikabu/examples/pikabu-feed-scraper)** to collect posts from a public tag or category feed.
- Use **[Pikabu keyword scraper](https://apify.com/maximedupre/pikabu/examples/pikabu-keyword-scraper)** to find public posts for one search word or phrase.
- Use **[Pikabu comments scraper](https://apify.com/maximedupre/pikabu/examples/pikabu-comments-scraper)** to collect comments from one public post.
- Use **[Pikabu posts scraper](https://apify.com/maximedupre/pikabu/examples/pikabu-posts-scraper)** to save post titles, links, authors, and engagement data.
- Use **[Pikabu scraper](https://apify.com/maximedupre/pikabu/examples/pikabu-scraper)** to export public Pikabu posts or comments for research.

#### 📦 See each Pikabu post or comment in one row

Each saved row is one public post or comment. Post rows include the source ID, title, canonical link, publication time, author, rating, comment count, category, tags, and optional body, media, community, or view data. Comment rows include the source ID, direct link, readable and formatted text, author, ratings, vote counts, creation time, parent post, and optional media, parent comment, reactions, or post-author-like status.

The Actor saves the first eligible occurrence of a source post or comment as soon as it is found. If the same source item appears again while the run is finding it, the later match is ignored. The saved row keeps the first match only. Optional fields appear when Pikabu provides them.

#### ▶️ Collect public Pikabu data in one run

1. Open the **Input** tab.
2. Choose **Posts** or **Comments**.
3. For Posts, choose **Keyword search** or **Tag or category feed**, then enter one search word, phrase, or public feed URL. For Comments, enter one public Pikabu post URL.
4. Set **Maximum records**, or leave it blank to collect all available records until the public source is exhausted.
5. Start the Actor and open the dataset from the **Output** tab.

The Actor reads public Pikabu data and does not need buyer authentication. Fields for the other choice stay visible, but they do not affect the selected run.

#### ⚙️ Input

Posts use one keyword or one public tag or category feed URL. Comments use one public post URL. The other choice fields stay visible but are ignored for the selected result type.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Chooses `posts` for post rows or `comments` for comment rows. |
| `postDiscoveryMethod` | string | For Posts, chooses `keyword` search or `feed` collection. It is ignored for Comments. |
| `postSearch` | string | For `keyword`, enter one search word or phrase. For `feed`, enter one public Pikabu tag or category feed URL. It is ignored for Comments. |
| `postUrl` | string | Enter one public Pikabu post URL whose comments you want to collect. It is ignored for Posts. |
| `maxItems` | integer | Stops after this many records. Leave it blank to collect all available records until the public source is exhausted. |

**Example input**

This is the public input from a successful current-beta default-input run:

```json
{
  "resultType": "posts",
  "postDiscoveryMethod": "keyword",
  "postSearch": "cats",
  "maxItems": 10
}
```

#### 🧾 Output

The Actor provides one link to the default dataset. Dataset rows use one of two shapes: post rows or comment rows. Optional fields are included when Pikabu provides them.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Opens the default dataset overview for saved Pikabu posts or comments. |

**Post rows**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a post. |
| `sourceId` | string | Unique Pikabu ID of the post. |
| `title` | string | Title of the post. |
| `url` | URL string | Canonical link to the post. |
| `publishedAt` | date-time string | Time when the post was published. |
| `author` | object | Identity and profile details of the post author. |
| `author.name` | string | Displayed name of the author. |
| `author.profileUrl` | URL string | Link to the author's Pikabu profile. |
| `author.avatarUrl` | URL string | Link to the author's avatar image. |
| `rating` | number | Rating reported for the post. |
| `commentCount` | integer | Number of comments reported for the post. |
| `category` | object | Topic or category assigned to the post. |
| `category.name` | string | Name of the category. |
| `category.url` | URL string | Link to the category. |
| `tags` | array of strings | Tags attached to the post. |
| `body` | string | Full post body text when the source provides it. |
| `imageUrls` | array of URL strings | Links to images attached to the post when present. |
| `videoUrl` | URL string | Link to a post video when the source exposes one. |
| `community` | object | Community that contains the post when the source provides it. |
| `community.name` | string | Name of the community. |
| `community.url` | URL string | Link to the community. |
| `viewCount` | integer | Number of views reported for the post when the source provides it. |

**Example post row**

This genuine row is from the successful current-beta keyword run:

```json
{
  "recordType": "post",
  "sourceId": "14366825",
  "title": "Новинки кино появившиеся в сети на 26.09.2026",
  "url": "https://pikabu.ru/story/novinki_kino_poyavivshiesya_v_seti_na_26092026_14366825",
  "publishedAt": "2026-09-26T09:05:02+03:00",
  "author": {
    "name": "CentralZD",
    "profileUrl": "https://pikabu.ru/@CentralZD",
    "avatarUrl": "https://cs6.pikabu.ru/avatars/26/m26677.jpg"
  },
  "rating": 110,
  "commentCount": 10,
  "category": {
    "name": "Кино и сериалы",
    "url": "https://pikabu.ru/themes/cinema"
  },
  "tags": [
    "Моё",
    "Новинки кино",
    "Фильмы",
    "Подборка",
    "Советую посмотреть",
    "Сериалы",
    "Киноновинки на торрентах",
    "Netflix",
    "Боевики",
    "Комедия",
    "Видео",
    "YouTube",
    "Длиннопост",
    "Короткие видео"
  ],
  "body": "В этом выпуске: очередная версия истории про \"Унабомбера\" на этот раз с Расселом Кроу, два брата убегаю из дома к деду, Дэйв Франко перевозит людей в рехабы, хороший ромком о том, как ученые находят отношения, что-то поистине женское с названием \"Девичник в спа\", французское большое историческое кино, история про самого известного казахского афериста, в сериалах - Джон Хэмм в роли журналиста, 13-й сезон \"Американской истории ужаса\" и это еще не все.",
  "imageUrls": [
    "https://cs17.pikabu.ru/s/2026/09/25/20/4exewqgc.webp",
    "https://cs16.pikabu.ru/s/2026/09/25/20/we3h2gq7.webp",
    "https://cs3.pikabu.ru/s/2026/09/25/20/kfdpayi3.webp",
    "https://cs4.pikabu.ru/s/2026/09/25/20/6fk37eqm.webp",
    "https://cs20.pikabu.ru/s/2026/09/25/20/vfqsomkw.webp",
    "https://cs16.pikabu.ru/s/2026/09/25/20/jfyx3byi.webp",
    "https://cs5.pikabu.ru/s/2026/09/25/20/df4yq3tf.webp",
    "https://cs17.pikabu.ru/s/2026/09/25/20/2gcexev4.webp",
    "https://cs5.pikabu.ru/s/2026/09/25/20/okkiry2p.webp",
    "https://cs4.pikabu.ru/s/2026/09/25/20/ikol7baa.webp"
  ],
  "community": {
    "name": "Всё о кино",
    "url": "https://pikabu.ru/community/bigcollection?from=admoder"
  },
  "viewCount": 17915
}
```

**Comment rows**

| Field | Type | What it does |
| --- | --- | --- |
| `recordType` | string | Identifies the row as a comment. |
| `sourceId` | string | Unique Pikabu ID of the comment. |
| `url` | URL string | Direct link to the comment. |
| `text` | string | Readable text of the comment. |
| `formattedText` | string | Formatted comment content when the source provides it. |
| `author` | object | Identity and profile details of the comment author. |
| `author.name` | string | Displayed name of the author. |
| `author.profileUrl` | URL string | Link to the author's Pikabu profile. |
| `author.avatarUrl` | URL string | Link to the author's avatar image. |
| `rating` | number | Rating reported for the comment. |
| `upvotes` | integer | Number of upvotes reported for the comment. |
| `downvotes` | integer | Number of downvotes reported for the comment. |
| `createdAt` | date-time string | Time when the comment was created. |
| `imageUrls` | array of URL strings | Links to images attached to the comment when present. |
| `parentPost` | object | Post that contains the comment. |
| `parentPost.sourceId` | string | ID of the parent post. |
| `parentPost.title` | string | Title of the parent post. |
| `parentPost.url` | URL string | Link to the parent post. |
| `parentCommentId` | string | ID of the parent comment when the source provides one. |
| `reactions` | array of objects | Emotional reactions reported for the comment. |
| `reactions[].type` | string | Type of the reaction. |
| `reactions[].count` | integer | Number of times the reaction was recorded. |
| `postAuthorLiked` | boolean | Shows whether the post author liked the comment when the source provides this status. |

**Example comment row**

This genuine row is from the successful current-beta comments run:

```json
{
  "recordType": "comment",
  "sourceId": "405373632",
  "url": "https://pikabu.ru/story/mozhet_li_kot_byit_sobesednikom_14360443?cid=405373632",
  "text": "всегда надо разговаривать с котом",
  "formattedText": "<p class=\"rv-comment\">всегда надо разговаривать с котом</p>",
  "author": {
    "name": "danil19777",
    "profileUrl": "https://pikabu.ru/@danil19777",
    "avatarUrl": "https://cs6.pikabu.ru/s/2026/09/23/06/oelrpi7x_lg.webp"
  },
  "rating": 2,
  "upvotes": 2,
  "downvotes": 0,
  "createdAt": "2026-09-24T07:10:43+03:00",
  "parentPost": {
    "sourceId": "14360443",
    "title": "Может ли кот быть собеседником?⁠⁠",
    "url": "https://pikabu.ru/story/mozhet_li_kot_byit_sobesednikom_14360443"
  },
  "reactions": [
    {
      "type": "6",
      "count": 3
    }
  ],
  "postAuthorLiked": true
}
```

#### 💳 Pricing

Pikabu uses Pay Per Event pricing. One saved post uses the post event, and one saved comment uses the comment event. Only saved post and comment events are listed in the current pricing contract, and no separate run-start event is listed.

| Charged event | Price | What it covers |
| --- | --- | --- |
| Post | $0.00395 on FREE, $0.00360 on BRONZE, $0.00325 on SILVER, and $0.00295 on GOLD, DIAMOND, or PLATINUM | One successfully saved public post. |
| Comment | $0.00445 | One successfully saved public comment. |

#### 🔌 Integrations

Open the dataset link in the Output tab, or read the default dataset through the Apify API and SDKs.

Watch the approved walkthrough:

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

#### ❓ FAQ

##### Can I collect posts and comments in the same run?

No. Choose Posts or Comments in `resultType`. Post fields are ignored for a Comments run, and the comment URL is ignored for a Posts run.

##### What can I use to find posts?

Use one keyword or phrase with Keyword search, or one public tag or category feed URL with Tag or category feed.

##### What happens when I leave Maximum records empty?

The Actor collects all available matching records until the public source is exhausted, subject to the source returning more records.

##### Are duplicate posts or comments saved twice?

No. The first eligible occurrence is saved, and a later occurrence of the same source item is ignored. The row keeps the first match only.

##### Are body text, media, community, and view fields always present?

No. These fields appear when Pikabu provides them. The core post fields remain in the post shape even when optional enrichment is missing.

##### Can I collect every nested reply comment?

The Actor collects comments available on the selected public post. A separate client-side load for nested or reply comments is outside this Actor's scope.

##### Do I need a Pikabu login or API key?

No buyer authentication is needed for the public Pikabu data covered by this Actor.

##### How does pricing work when a run finds no records?

The current pricing contract lists charges for saved post and comment events. It does not list a separate run-start charge.

### 📝 Changelog

**v0.0** (26-09-2026)

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [Reddit Comments Search Scraper](https://apify.com/maximedupre/reddit-comments-search-scraper) searches public Reddit comments by keyword and returns text, authors, scores, links, and post context.
- [VK Posts Scraper](https://apify.com/maximedupre/vk-posts-scraper) collects public VK wall posts with text, authors, dates, engagement, media, and source links.
- [Facebook User Posts Scraper](https://apify.com/maximedupre/facebook-user-posts-scraper) collects public posts from Facebook profiles and Pages with text, dates, engagement, media, and links.
- [Pikabu Search Scraper](https://apify.com/powerai/pikabu-search-scraper) searches public Pikabu posts from one search URL and returns author, rating, comment, tag, and story data.
- [Pikabu Comments Scraper](https://apify.com/powerai/pikabu-comments-scraper) collects public comments from one Pikabu post with text, ratings, reactions, authors, and parent-post links.

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

# Actor input Schema

## `resultType` (type: `string`):

Choose the kind of record to collect. Posts use a keyword or a tag/category feed. Comments use one public Pikabu post URL.

## `postDiscoveryMethod` (type: `string`):

Choose how to find posts. Use one keyword search or one public tag or category feed URL. This field is used only for Posts and is ignored for Comments.

## `postSearch` (type: `string`):

Enter one value for the selected post source. Use a search word or phrase for Keyword search, or one public tag or category feed URL for Tag or category feed. This field is used only for Posts and is ignored for Comments.

## `postUrl` (type: `string`):

Enter one public Pikabu post URL whose comments you want to collect. This field is used only for Comments and is ignored for Posts.

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

Stop after this many records. Leave it blank to collect all available records until the public source is exhausted. For Posts this counts posts. For Comments this counts comments.

## Actor input object example

```json
{
  "resultType": "posts",
  "postDiscoveryMethod": "keyword",
  "postSearch": "cats",
  "maxItems": 10
}
```

# Actor output Schema

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

Open the collected Pikabu records.

# 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 = {
    "resultType": "posts",
    "postDiscoveryMethod": "keyword",
    "postSearch": "cats",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/pikabu").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 = {
    "resultType": "posts",
    "postDiscoveryMethod": "keyword",
    "postSearch": "cats",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/pikabu").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 '{
  "resultType": "posts",
  "postDiscoveryMethod": "keyword",
  "postSearch": "cats",
  "maxItems": 10
}' |
apify call maximedupre/pikabu --silent --output-dataset

```

## MCP server setup

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

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/Gvjfte9Jb321Dxg0u/builds/wMQEZO7TWTFpt6nFS/openapi.json
