{
  "openapi": "3.0.1",
  "info": {
    "title": "Pikabu Scraper - Stories, Comments, Communities, Search",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "72Sc15kvhpffyvFP3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~pikabu-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-pikabu-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~pikabu-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-pikabu-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~pikabu-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-pikabu-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "feed",
              "story",
              "profile"
            ],
            "type": "string",
            "description": "Search runs keyword search. Feed walks hot/new/best feeds, communities, tags or user blogs. Story reads full detail (text, media, comments) for pasted story links. Profile reads creator headers plus their stories.",
            "default": "search"
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Search mode: keyword or phrase (Russian or English). Leave empty with Order set to walk the whole site feed."
          },
          "searchOrder": {
            "title": "Order",
            "enum": [
              "relevance",
              "rating",
              "date"
            ],
            "type": "string",
            "description": "Search mode: result ordering on the site's own search.",
            "default": "relevance"
          },
          "searchUrl": {
            "title": "Search results URL (optional)",
            "type": "string",
            "description": "Paste a pikabu.ru search results URL, for example https://pikabu.ru/search?q=iphone&st=3, and it is scraped as a feed link (the st sort and page parameters are kept). When set it replaces Mode, Search query and Order. Leave empty to use the fields above."
          },
          "feedLinks": {
            "title": "Feed, community, tag or user links",
            "type": "array",
            "description": "Pikabu home/new/best feeds (optionally ?page=N), tags (with /hot|/new|/best), communities, user blogs, search result URLs (q, n, st, page), story links (including m.pikabu.ru) or bare story IDs. Feed and Story modes accept links from either link field; listings are paginated and individual stories receive full detail. Leave the field untouched to scrape one example per shape.",
            "default": [
              "https://pikabu.ru/",
              "https://pikabu.ru/?page=2",
              "https://pikabu.ru/new",
              "https://pikabu.ru/best",
              "https://pikabu.ru/tag/steam",
              "https://pikabu.ru/tag/steam/hot?page=2",
              "https://pikabu.ru/community/gamedev",
              "https://pikabu.ru/@admin",
              "https://pikabu.ru/story/_14366779",
              "https://m.pikabu.ru/story/_14366779",
              "https://pikabu.ru/search?q=steam",
              "https://pikabu.ru/search?q=steam&n=3&page=2"
            ],
            "items": {
              "type": "string"
            }
          },
          "storyUrls": {
            "title": "Story links or IDs",
            "type": "array",
            "description": "Pikabu story links or bare numeric story IDs. Feed and Story modes also accept listing links here. Duplicate stories are collected once.",
            "default": [
              "https://pikabu.ru/story/_14366779",
              "https://m.pikabu.ru/story/_14461062"
            ],
            "items": {
              "type": "string"
            }
          },
          "profileUrls": {
            "title": "Profile links or names",
            "type": "array",
            "description": "Profile mode: pikabu.ru/@name links or bare account names. Each entry returns one profile record with stats and recent stories.",
            "default": [
              "https://pikabu.ru/@admin"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Open each story for full detail",
            "type": "boolean",
            "description": "Feed and search modes: open every collected story for its full text, media and tags. Each successfully returned detailed story has one enrichment event. With Collect comments enabled, additional comment enrichment events use round(returned comments / 10) per story. Off returns cards only.",
            "default": true
          },
          "fetchComments": {
            "title": "Collect comments (story mode or with full detail)",
            "type": "boolean",
            "description": "Collect comments of each opened story as separate records, including author, text, rating, media and parent comment. Every returned comment has the result-item charge. Additional enrichment events per story equal round(returned comments / 10), on top of its story-detail event. For example, 11 returned comments add one enrichment event. Exact halves round to the nearest even integer; suppressed comments are excluded.",
            "default": true
          },
          "maxCommentsPerStory": {
            "title": "Max comments per story",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum comment records to return per story; Default 100; 0 is accepted and means the hard cap of 10000 comments per story. Max items still applies. Comment enrichment charges use round(actual returned comments / 10) per story, not this limit. Exact halves round to the nearest even integer.",
            "default": 100
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many records (0 = no limit; the run then stops when listings run out). Comments count towards this cap too.",
            "default": 20
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Connection settings for collecting public Pikabu pages. Use the Console connection editor to configure your run."
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed).",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the mode and scope settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED (each is reported once and counts toward Max items; one that comes back is marked REAPPEARED). Only produced once a run has fully scanned the tracked scope.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names that must not mark a record as UPDATED, for example author or tags. Rating, comment count, pluses, minuses, views and subscribers (including the author's subscriber count and avatar) are always ignored for change detection but still returned. The author is compared on id, name and profile link, the community on name and link. Only used with incremental mode.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Send results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}