{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Search, Profiles, Followers",
    "description": "Scrape Bluesky without a login: posts from any profile, keyword and hashtag search, single posts with their reply threads, and profiles with follower, following and post counts. Each post has text, likes, reposts, replies, quotes, hashtags, mentions, links, full-size images and quoted posts.",
    "version": "1.0",
    "x-build-id": "RTpWXO4IzyI3MraBw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fernandosord~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fernandosord-bluesky-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/fernandosord~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-fernandosord-bluesky-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/fernandosord~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-fernandosord-bluesky-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",
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "posts",
              "profiles",
              "followers",
              "following"
            ],
            "type": "string",
            "description": "Posts: posts from profiles, search queries and post URLs (one item per post). Profiles: one item per profile with follower, following and post counts. Followers or Following: one item per account that follows, or is followed by, each profile.",
            "default": "posts"
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "Handles (bsky.app, @jay.bsky.team, or just jay for jay.bsky.social), DIDs (did:plc:...) or profile URLs (https://bsky.app/profile/bsky.app). In Posts mode the Actor reads each profile's posts, newest first.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search queries (Posts mode)",
            "type": "array",
            "description": "Keywords, phrases in quotes or hashtags (#python) to search across all of Bluesky. Bluesky's search syntax works too, for example from:bsky.app or domain:github.com.",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post URLs (Posts mode)",
            "type": "array",
            "description": "Single posts, as https://bsky.app/profile/<handle>/post/<id> links or at:// URIs. Turn on thread replies below to also get the replies under them.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerSource": {
            "title": "Max posts per profile or search query",
            "minimum": 1,
            "type": "integer",
            "description": "The Actor stops at this many posts for each profile and each search query. Replies fetched with thread replies are counted separately.",
            "default": 50
          },
          "maxItems": {
            "title": "Max items in total",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on items saved by the whole run, posts, replies and profiles together. 0 means no cap.",
            "default": 1000
          },
          "onlyPostsNewerThan": {
            "title": "Only posts newer than",
            "type": "string",
            "description": "Optional. A date (2026-01-31) or a relative period (7 days, 3 months). Older posts are skipped and paging stops. Reposts count from the time they were reposted."
          },
          "includeReplies": {
            "title": "Include the profile's replies",
            "type": "boolean",
            "description": "When on, posts the profile wrote as replies to other people are included. Off by default, so you get the profile's own top-level posts.",
            "default": false
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "When on, posts the profile reposted are included, with isRepost and the repost time.",
            "default": false
          },
          "searchSort": {
            "title": "Search order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Latest returns posts newest first and can page through thousands of results. Top returns Bluesky's most engaging matches, at most 100 per query.",
            "default": "latest"
          },
          "searchLanguage": {
            "title": "Search language",
            "type": "string",
            "description": "Optional two-letter language code (en, ja, pt, de) to keep only search results in that language."
          },
          "includeThreadReplies": {
            "title": "Also get the replies under each post",
            "type": "boolean",
            "description": "Adds the reply thread under every post the Actor collects, as extra items marked sourceType reply. Costs one extra request per post that has replies, and every reply is an item.",
            "default": false
          },
          "maxRepliesPerPost": {
            "title": "Max replies per post",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on replies saved under each post when thread replies are on, nested replies included.",
            "default": 50
          },
          "maxProfilesPerAccount": {
            "title": "Max followers or follows per profile",
            "minimum": 1,
            "type": "integer",
            "description": "In Followers or Following mode, the Actor stops at this many accounts for each input profile. Bluesky lists the most recent follows first.",
            "default": 200
          },
          "includeProfileCounts": {
            "title": "Add counts and bio to followers and follows",
            "type": "boolean",
            "description": "Bluesky's follower lists leave out follower, following and post counts. When on, the Actor looks them up (one extra request per 25 accounts).",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Bluesky's public API works without a proxy. Turn on Apify Proxy only if you see repeated HTTP 429 retries in the log.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}