{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Profiles, Posts & Followers",
    "description": "Scrape Bluesky without an account: profiles with follower counts, posts with engagement stats, follower and following lists, people search, and post lookups with likers. One clean JSON row per item via the public API. No login, no API key, no browser.",
    "version": "0.1",
    "x-build-id": "PhAQsHOcUvL1kRKKv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapemint~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapemint-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/scrapemint~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapemint-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/scrapemint~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapemint-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": {
          "handles": {
            "title": "Accounts",
            "type": "array",
            "description": "Bluesky accounts to scrape, one per line. Accepts handles (\"nytimes.com\", \"@user.bsky.social\"), profile URLs (\"https://bsky.app/profile/bsky.app\") or DIDs.",
            "items": {
              "type": "string"
            }
          },
          "includeProfile": {
            "title": "Include profile row",
            "type": "boolean",
            "description": "Emit one profile row per account: display name, bio, follower/following/post counts, join date, avatar.",
            "default": true
          },
          "includePosts": {
            "title": "Include posts",
            "type": "boolean",
            "description": "Emit the account's recent posts with text, timestamps, like/repost/reply/quote counts, links and hashtags.",
            "default": true
          },
          "maxPostsPerHandle": {
            "title": "Posts per account",
            "minimum": 1,
            "maximum": 3000,
            "type": "integer",
            "description": "How many recent posts to fetch for each account (newest first).",
            "default": 15
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "Also emit posts the account reposted (marked with repostedByHandle). Off = original posts only.",
            "default": false
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "Also emit the account's replies to other posts. Off = top-level posts only.",
            "default": false
          },
          "includeFollowers": {
            "title": "Include followers",
            "type": "boolean",
            "description": "Emit one profile row per follower of each account, with full follower/post counts and bio.",
            "default": false
          },
          "includeFollows": {
            "title": "Include following",
            "type": "boolean",
            "description": "Emit one profile row per account each handle follows, with full counts and bio.",
            "default": false
          },
          "maxFollowersPerHandle": {
            "title": "Followers / following per account",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on follower and following rows fetched per account.",
            "default": 200
          },
          "searchQueries": {
            "title": "People search",
            "type": "array",
            "description": "Find accounts by keyword, one search per line (\"data journalist\", \"indie hacker\"). Each match becomes a full profile row - a lead list of accounts in a niche.",
            "items": {
              "type": "string"
            }
          },
          "maxAccountsPerQuery": {
            "title": "Accounts per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many matching accounts to return for each people search.",
            "default": 25
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Individual posts to look up, one URL per line (\"https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l\"). Returns the post with its engagement counts.",
            "items": {
              "type": "string"
            }
          },
          "includeLikers": {
            "title": "Include post likers",
            "type": "boolean",
            "description": "For each post URL, also emit one profile row per account that liked it - see exactly who engages with a post.",
            "default": false
          },
          "maxLikersPerPost": {
            "title": "Likers per post",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on liker rows fetched per post URL.",
            "default": 100
          },
          "maxRows": {
            "title": "Max rows",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many rows in total.",
            "default": 2000
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}