{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Followers, Feeds, Lists & Starter Packs",
    "description": "Scrape Bluesky without login or API keys: posts from topic feeds and accounts, accounts by keyword, followers and following, list and starter pack members, profiles, threads, likes, reposts and quotes. Paste bsky.app URLs or handles. Clean rows with engagement counts.",
    "version": "0.1",
    "x-build-id": "dZ281ZvXrpBchrjyS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/ctriolab~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-ctriolab-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/ctriolab~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-ctriolab-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/ctriolab~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-ctriolab-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": {
          "authorFeeds": {
            "title": "Author feeds: accounts",
            "type": "array",
            "description": "Posts from these accounts, newest first. Use handles (bsky.app, @name.bsky.social), DIDs (did:plc:...) or profile URLs (https://bsky.app/profile/...).",
            "items": {
              "type": "string"
            }
          },
          "feedUrls": {
            "title": "Topic feeds (custom feed URLs)",
            "type": "array",
            "description": "Posts from Bluesky custom feeds, the topic feeds people pin in the app (Science, News, Artists, Discover...). Paste the feed URL https://bsky.app/profile/<handle>/feed/<id> or at://<did>/app.bsky.feed.generator/<id>. The easiest way to follow a topic without keyword search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "accountSearch": {
            "title": "Find accounts by keyword",
            "type": "array",
            "description": "Accounts whose name, handle or bio match these keywords (for example: climate scientist, indie game dev). One profile row per account. This searches accounts, not posts.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "authorFeedFilter": {
            "title": "Author feed: which posts",
            "enum": [
              "posts_no_replies",
              "posts_with_replies",
              "posts_and_author_threads",
              "posts_with_media",
              "posts_with_video"
            ],
            "type": "string",
            "description": "Same tabs as on a Bluesky profile page.",
            "default": "posts_no_replies"
          },
          "includeReposts": {
            "title": "Author feed: include reposts",
            "type": "boolean",
            "description": "Also save posts the account reposted (postType = repost, with repostedBy fields).",
            "default": false
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "One row per account with bio, follower, following and post counts. Handles, DIDs or profile URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "followersOf": {
            "title": "Followers of",
            "type": "array",
            "description": "List the followers of these accounts (newest first). Handles, DIDs or profile URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "followingOf": {
            "title": "Following of",
            "type": "array",
            "description": "List the accounts these accounts follow. Handles, DIDs or profile URLs.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "listUrls": {
            "title": "List members (list URLs)",
            "type": "array",
            "description": "Every account in these Bluesky lists. Paste https://bsky.app/profile/<handle>/lists/<id> or at://<did>/app.bsky.graph.list/<id>.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "starterPackUrls": {
            "title": "Starter pack members (starter pack URLs)",
            "type": "array",
            "description": "Every account in these starter packs. Paste https://bsky.app/starter-pack/<handle>/<id> (open go.bsky.app short links in a browser first to get this URL).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post threads (post URLs)",
            "type": "array",
            "description": "Post URLs (https://bsky.app/profile/<handle>/post/<id>) or at:// URIs. Saves the post and its replies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeThreadRoot": {
            "title": "Thread: include the post itself",
            "type": "boolean",
            "description": "Save the post you entered as the first row (threadDepth 0). Turn off to get replies only.",
            "default": true
          },
          "threadDepth": {
            "title": "Thread: reply depth",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many levels of replies to follow. 1 = direct replies only.",
            "default": 10
          },
          "likesOf": {
            "title": "Likes of posts (post URLs)",
            "type": "array",
            "description": "List the accounts that liked these posts, with likedAt.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "repostsOf": {
            "title": "Reposts of posts (post URLs)",
            "type": "array",
            "description": "List the accounts that reposted these posts.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "quotesOf": {
            "title": "Quotes of posts (post URLs)",
            "type": "array",
            "description": "List the posts that quote these posts.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "enrichProfiles": {
            "title": "Add counts to follower, like, list and search results",
            "type": "boolean",
            "description": "Followers, following, likers, reposters, list and starter pack members and account search results come with handle, name, bio and avatar. Turn this on to also get followersCount, followsCount and postsCount (one extra request per 25 accounts, slower).",
            "default": false
          },
          "maxItemsPerInput": {
            "title": "Max results per input",
            "minimum": 0,
            "type": "integer",
            "description": "Cap for each query, account or post. 0 = no cap.",
            "default": 100
          },
          "maxItems": {
            "title": "Max results in total",
            "minimum": 0,
            "type": "integer",
            "description": "Cap for the whole run. 0 = no cap (the run still stops at your max charge).",
            "default": 1000
          },
          "maxRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries on HTTP 429 and 5xx with exponential backoff. The actor waits as long as Bluesky asks (Retry-After and RateLimit headers).",
            "default": 6
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}