{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper",
    "description": "Bluesky Scraper is a Python tool designed to extract public posts, user profiles, feeds, engagement metrics, and follower graphs via the AT Protocol API. It exports structured social data into clean CSV or JSON formats for sentiment analysis, social listening, and trend research.",
    "version": "0.0",
    "x-build-id": "cdEiH7vkR0v8QFAuf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zerobreak~Bluesky-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zerobreak-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/zerobreak~Bluesky-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-zerobreak-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/zerobreak~Bluesky-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zerobreak-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search_posts",
              "author_posts",
              "profiles",
              "search_users",
              "followers",
              "follows",
              "post_thread",
              "post_likes",
              "post_reposts"
            ],
            "type": "string",
            "description": "Choose posts, profiles, search, followers, follows, a thread, likes, or reposts.",
            "default": "search_posts"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Queries for search_posts and search_users. One query per line.",
            "items": {
              "type": "string"
            }
          },
          "searchSort": {
            "title": "Sort search results",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Sort order for search_posts. latest is newest first. top is Bluesky's top ranking. dateFrom only stops early when this is latest.",
            "default": "latest"
          },
          "handles": {
            "title": "Handles, DIDs or profile URLs",
            "type": "array",
            "description": "Profiles, author feeds, followers, and follows. Accepts bsky.app, @jay.bsky.team, did:plc, did:web, or a https://bsky.app/profile/ URL.",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post URLs or at:// URIs",
            "type": "array",
            "description": "Threads, likes, and reposts. A bsky.app post link or an at:// URI.",
            "items": {
              "type": "string"
            }
          },
          "feedFilter": {
            "title": "Author feed filter",
            "enum": [
              "posts_no_replies",
              "posts_with_replies",
              "posts_with_media",
              "posts_and_author_threads"
            ],
            "type": "string",
            "description": "Passed to getAuthorFeed. posts_no_replies still includes reposts of other people's posts. Use Include reposts to drop those.",
            "default": "posts_no_replies"
          },
          "includeReposts": {
            "title": "Include reposts in author feed",
            "type": "boolean",
            "description": "When off, author feeds skip items whose reason is a repost. Search and threads are unchanged.",
            "default": false
          },
          "enrichProfiles": {
            "title": "Enrich users with follower/post counts",
            "type": "boolean",
            "description": "Extra getProfiles call per 25 users for search_users, followers, follows, likes, and reposts. Those lists do not include follower counts on their own.",
            "default": false
          },
          "threadDepth": {
            "title": "Thread reply depth",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many reply levels to walk on a post thread. 0 keeps only the root post.",
            "default": 6
          },
          "dateFrom": {
            "title": "Only posts after",
            "type": "string",
            "description": "Skip older posts and stop paging. Applies to author feeds and to search_posts when sort is latest. YYYY-MM-DD or an ISO timestamp."
          },
          "maxItems": {
            "title": "Max results (total)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many posts or profiles. Free version cap is 5,000 per run. Error rows do not count toward this cap.",
            "default": 100
          },
          "maxItemsPerInput": {
            "title": "Max results per query/user/post",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap for each search query, handle, or post URL. Also limited by max results (total).",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many handles, queries, or posts to fetch at once. Hard cap is 5.",
            "default": 5
          },
          "timeoutSecs": {
            "title": "Run timeout (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Stop starting new requests after this many seconds. The run still saves rows already collected.",
            "default": 300
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for a single Bluesky API response before retrying.",
            "default": 30
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy for Bluesky requests. Leave this off unless your IP is blocked. The public API answered from a datacenter without a proxy in testing.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}