Pikabu Scraper - Stories, Comments, Communities, Search avatar

Pikabu Scraper - Stories, Comments, Communities, Search

Pricing

from $1.50 / 1,000 result records

Go to Apify Store
Pikabu Scraper - Stories, Comments, Communities, Search

Pikabu Scraper - Stories, Comments, Communities, Search

Scrape Pikabu (Пикабу): keyword search, hot/new/best feeds, communities, tags, full story details with media, all comments, creator profiles. Monitoring (NEW, UPDATED, REAPPEARED, EXPIRED), incremental runs, resume, MCP export.

Pricing

from $1.50 / 1,000 result records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

6

Total users

3

Monthly active users

12 days ago

Last modified

Categories

Security

Limited permissions

Share

Collect public Pikabu stories, comments and creator profiles. Search by keyword, walk feeds and community or tag listings, or supply individual story links. Story details include text, images, videos, tags, authors and vote counts where the source supplies them. Comments are separate records, so their parent IDs can be used to reconstruct threads. Export the results as JSON, CSV or Excel, or read them through the API.

Why This Scraper?

  • Keyword search. Search by keyword with relevance, rating or newest ordering.
  • Mixed inputs. Combine feed links and individual stories in the same collection.
  • Full media. Return full-size images and video sources, posters and dimensions.
  • Threaded comments. Collect comments with author information, votes and parent IDs.
  • Profile data. Read profile counters, registration dates, avatars and awards.
  • Cost control. Set shared item limits and individual comment limits.
  • Recurring runs. Resume story collection and suppress unchanged records in recurring runs.

Use Cases

  • Content and trend research: track which stories, tags and communities are gaining rating, comments and reposts, sorted by relevance, rating or date.
  • Community and sentiment research: collect comments with author, vote and parent-thread data on chosen posts, tags or communities to study discussion patterns.
  • Creator and account scouting: pull profile counters, registration dates, awards and recent stories to evaluate an account's history and reach.
  • Content aggregation and republishing: feed stories, images and videos from specific tags, communities or user blogs into your own site, bot or digest.
  • Recurring monitoring: watch a search, tag or community on a schedule and collect only the new and updated posts since the last run.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
kindstory, comment or profile
id00000001
urlStory, comment permalink or profile URL
titleSample Story
textSample public text
authorPublic ID, nickname, profile URL and optional avatar/subscriber count
communityCommunity name, slug and URL when present
tags["Sample tag"]
tagUrlsTag page links
rating120
pluses130 positive votes
minuses10 negative votes
commentsCount11
viewsStory view count from Pikabu's public counter; null when the counter cannot be read
publishedAt2026-01-01T00:00:00+03:00
blocksOrdered text, image and video content
imagesFull-size story URLs; image objects on comments
videosSources, poster, duration, dimensions and video identifiers
mediaStory image and video counts
storyId, parentId, depthComment fields: parent story ID, parent comment ID (0 for a root comment) and nesting depth
registeredAtProfile registration date
statsExact profile rating, comment, story and subscriber counts
awardsPublic profile awards with image and optional link
changeTypeNEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED in incremental runs

Story rows also carry flat alias fields next to the nested ones, so exports from other Pikabu search scrapers keep working: searchUrl (the listing URL the story came from), scrapedAt, content, detailPageUrl, createdAt, createdAtHuman (the site's relative time text), coverImage, authorId, authorName, authorLink, authorAvatar, communityName and communityLink.

Other fields include comment links, edited and story-author appreciation flags, long-story and pinned flags, profile user ID, avatar, background image, following count and verified badge. Profile rows include recent story cards. Optional fields may be null or empty when absent from the source.

Community links collect the community's stories; they do not produce a separate community-header record. Feed and search cards can contain partial text or media. Enable fetchDetails for the full story page, and fetchComments to collect its available comments. A story opened in full from a feed, search, community, tag or user listing also carries channel, the community from its original listing card, kept as a fallback alongside the detail page's own community value; pasted story links do not have a listing card, so they carry no channel.

How to Use

  1. Pick a mode: search (keyword search), feed (feeds, communities, tags and user blogs), story (pasted story links or IDs) or profile (creator profiles).
  2. Fill in the query or links for that mode, and choose whether to open full story details and collect comments.
  3. Set Max items to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Choose a mode and set maxItems. This cap includes stories, comments and profile rows together. 0 means no item limit, so collection continues until the available results end.

Search uses its own query and ordering fields. An empty query searches the general result listing. Feed, story and profile link fields are ignored in this mode.

Search by keyword:

{
"mode": "search",
"searchQuery": "games",
"searchOrder": "date",
"fetchDetails": false,
"fetchComments": false,
"maxItems": 20
}

Mixed feed and story links

Feed and Story link fields have their own input sections, but in either feed or story mode, either field accepts feeds, communities, tags, user blogs, individual story URLs and numeric story IDs. Individual stories are read first, then listings are walked; duplicate story IDs are skipped. Supported link shapes: home feed (also ?page=2), /new, /best, tags (also /tag/<name>/hot?page=2), communities, user blogs, story links (also m.pikabu.ru), and search result URLs with q, n, st and page. A pasted page number is the page the walk starts from. If you omit feedLinks in Feed or Story mode (and give no story links), the scraper now scrapes one example of each shape (twelve links) instead of only the home feed; set maxItems to bound the run, or pass your own links.

Walk feeds and story links:

{
"mode": "feed",
"feedLinks": ["https://pikabu.ru/new"],
"storyUrls": ["https://pikabu.ru/story/sample_story_00000001"],
"fetchDetails": false,
"fetchComments": false,
"maxItems": 20
}

Story detail and comments

Individual story links always open full detail. The story is returned before its comments, so a small item cap does not omit the parent story. maxCommentsPerStory limits returned comments for each story (default 100, never more than 10000); the shared maxItems limit still applies.

Read a story with comments:

{
"mode": "story",
"storyUrls": ["00000001"],
"fetchComments": true,
"maxCommentsPerStory": 11,
"maxItems": 12
}

Creator profiles

Profile mode returns the header, then walks the creator's stories. Turn off details and comments when you need profile counters and story cards only.

Read a creator profile:

{
"mode": "profile",
"profileUrls": ["https://pikabu.ru/@sample_creator"],
"fetchDetails": false,
"fetchComments": false,
"maxItems": 5
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/pikabu-scraper").call(run_input={"mode": "search", "searchQuery": "games", "maxItems": 20})
for story in client.dataset(run["defaultDatasetId"]).iterate_items():
print(story["title"], story["rating"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/pikabu-scraper').call({ mode: 'search', searchQuery: 'games', maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Recurring collections and resume

Use resumeFromRunId to skip stories already present in a previous run or dataset. Use incrementalMode for recurring collections with the same scope. The initial run marks records NEW; later runs suppress unchanged records unless emitUnchanged is enabled. Changes are detected per field (title, text, content blocks, tags, author, community, media; profile description and story count). Rating, pluses, minuses, comment count, views and subscribers move on almost every scrape, so they are still returned but never mark a record UPDATED. The author is compared on id, name and profile link only (the author's subscriber count and avatar are returned but never mark a record UPDATED), and the community on name and community link without any query string. changedFields lists the field names that changed (record for records tracked before this version, compared on title, text and content blocks only). Use ignoreFieldsForChanges to exclude more fields, for example tags; it is part of the 🔁 Resume section and does not reset your saved state. State saved by earlier versions of this actor for the same task is picked up automatically, so the first run after an update does not return the whole catalogue as new.

stateKey names a monitoring scope. emitExpired fires only once a run has walked its whole configured scope. A run that stops early never reports anything EXPIRED and never marks a record as gone: this covers reaching Max items, the per-story comment limit while comments remain, a refused page, and the page limit. Records the run did not reach keep their saved state, so they come back as UNCHANGED (not returned, not billed) when a later run sees them again. Only records actually returned as EXPIRED are marked absent; with emitExpired off no record is marked absent and nothing is billed for it. A record that returns after being reported EXPIRED comes back as REAPPEARED. Returned unchanged or expired rows are billed as result items; expired placeholders do not trigger detail or comment enrichment.

Input Parameters

ParameterTypeDefaultDescription
modestringsearchSearch, feed or story/profile reading.
searchQuerystring-Search keyword or phrase.
searchOrderstringrelevanceSearch result ordering: relevance, rating or date (sent to Pikabu as its st sort).
searchUrlstring-Optional pasted Pikabu search URL such as https://pikabu.ru/search?q=iphone&st=3. When set, it is walked like a feed link, with its st sort and page kept, and replaces the mode and search fields.
feedLinksstringListone example per shapeFeed, tag, community, user-blog, search-result or story links to walk. Default: one example per shape.
storyUrlsstringList-Story links or numeric IDs read for full detail.
profileUrlsstringList-Creator links or names for profile records.
fetchDetailsbooleantrueOpen each story for its full detail page.
fetchCommentsbooleantrueCollect each opened story's comments as separate rows.
maxCommentsPerStoryinteger100Cap on comment rows per story; 0 is accepted and means the hard cap of 10000.
maxItemsinteger20Stop after this many records (0 = unlimited).
resumeFromRunIdstring-Continue a previous run without repeating its items.
ignoreFieldsForChangesarray-Extra field names that must not mark a record UPDATED (incremental mode only).
incrementalModebooleanfalseReturn only NEW and UPDATED records on later runs.
stateKeystring-Name this monitoring campaign's state.
emitUnchangedbooleanfalseAlso return unchanged records (billed).
emitExpiredbooleanfalseAlso return records no longer found (billed).
mcpConnectorsstringList-Optional MCP connector export.
notionParentPageUrlstring-Notion connector only: parent page for item pages.
maxNotifyListingsinteger50Cap on items written per connector per run.
proxyConfigurationobject-Apify Proxy settings for all requests.

Charges

Every returned record has a result-item charge. The detail-enrichment event is shared by story details and comment collection: one event per returned detailed story, plus round(returned comments / 10) events per story. These enrichment events are additional to result-item charges.

Rounding uses the nearest integer, with exact halves going to the nearest even integer: 5 comments add 0 events, 6 or 11 add 1, 15 add 2, and 25 add 2. Suppressed comments and failed writes do not count. Counts are based on actual returned comments, not the configured maximum.

Rates per result item, enrichment event and actor start are listed on the Pricing tab for your subscription tier. Empty pages and refused requests do not trigger result or enrichment charges; actor start still applies.

One detailed story with 11 comments produces 12 result-item events + 2 enrichment events + actor start.

Output tabs: Results (all rows), plus Stories, Comments and Profiles views that show only the columns of that record kind (?view=stories, ?view=comments, ?view=profiles). Views select columns, they do not filter rows, so filter on kind for a single-kind export.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"kind": "story",
"id": "00000001",
"title": "Sample Story",
"url": "https://pikabu.ru/story/sample_story_00000001",
"author": {"id": "0000", "name": "Sample Author", "url": "https://pikabu.ru/@sample_creator"},
"community": null,
"tags": ["Sample tag"],
"tagUrls": ["https://pikabu.ru/tag/sample"],
"rating": 120,
"pluses": 130,
"minuses": 10,
"commentsCount": 11,
"publishedAt": "2026-01-01T00:00:00+03:00",
"timestamp": 1700000000,
"seriesId": null,
"isLong": false,
"isPinned": false,
"blocks": [{"type": "text", "text": "Sample public story text", "links": []}],
"text": "Sample public story text",
"images": [],
"videos": [],
"media": {"images": 0, "videos": 0},
"detailFetched": true
}

Send results into your apps (MCP connectors)

Authorize an app connector under Apify Settings, API & Integrations. In the input, open Export to your apps (MCP connectors, optional) and select it. Notion requires notionParentPageUrl; maxNotifyListings limits how many records each connector receives.

Each exported record is a condensed, human-readable summary containing a title and key fields. Nested objects are flattened and arrays are shortened; the full JSON always remains in the dataset. Notion gets a page per record, while other connectors use a best-effort write or digest. Leaving connectors empty skips exports. Export failures preserve the scraped dataset.

Plan Requirement

An Apify account is required to run the actor. Pikabu sits behind a DDoS-Guard browser check that the Apify datacenter proxy passes only on some pages and some attempts, so residential proxies (the Apify residential group, country RU) are the reliable choice and the proxy field defaults to Apify Proxy. Apify free plans do not include residential proxies: there the run continues on a backup connection, some pages may still be unavailable, and a run where every page is refused fails with a plain message instead of returning an empty dataset. Only publicly available source content is collected; unavailable or removed pages may produce fewer records, and a run where every requested page is refused fails.

FAQ

How much does it cost?

You pay per result record returned (stories, comments and profiles alike), plus the detail and comment enrichment charges described in the Charges section above when those features are on. Actor start is a one-time charge per run. The Pricing tab shows the current rates for your subscription tier. Use Max items to cap the cost of any run.

This actor collects only publicly available Pikabu pages: stories, comments and profile pages that anyone can open in a browser. You are responsible for how you use the data: follow Pikabu's terms and the laws that apply to you, and get legal advice before any commercial redistribution. Story and comment text, images and videos may belong to their original posters.

Can I get only new stories and comments on a schedule?

Yes. Schedule the actor from the Schedules tab with the same search, feed, story or profile inputs each time, and turn on Incremental mode. The first scheduled run returns everything as NEW; later runs return only NEW and UPDATED records, and unchanged ones are suppressed, and not billed, unless Emit unchanged is on.

Why does my scheduled run not report expired records?

A run that stopped early (reached Max items, the comment limit with comments left, a refused page) never reports EXPIRED rows, because it cannot tell "removed from the site" from "not reached". Run again with Max items 0 (or high enough to cover the whole scope) on a bounded scope such as a community, tag, user blog or search; EXPIRED rows then appear only for records a complete walk did not find.

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

If every page the run tried to read was refused, the run stops with a clear failure message instead of quietly shipping zero results, so "nothing new today" is never confused with "nothing could be read". Run it again in a few minutes. If only some pages were refused, you still get whatever was read successfully.

Can I use it with AI agents or MCP?

Yes. Call the actor from any Apify integration or MCP client, and use the Send results into your apps field to send a summary of each record into Notion, Linear or Airtable when the run finishes, up to Max items to export per connector.

🔗 More scrapers you might like

Pair this actor with these related scrapers from the same team:

🧩 OK.ru Scraper
Scrape public OK.ru users, groups, topics, posts, videos, games and greetings by keyword...
🧩 Dzen.ru Scraper
Scrape Dzen.ru (ex Yandex.Zen): articles, videos and channels. Full article text with...
📱 Wattpad Scraper
Scrape Wattpad stories by keyword, tag, category, language or URL. Extract authors...
🏷️ Wildberries Scraper
Scrape Wildberries marketplace: product search with prices (wallet vs retail), discounts...
🧩 TikTok Comments Scraper
Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment...
🛒 Ozon.ru Scraper
Extract structured product data from Ozon.ru, Russia’s largest marketplace. Search by...

👉 Browse all abotapi scrapers

💬 Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.