{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper — Posts, Search, Profiles, Comments & Followers",
    "description": "Collect public Bluesky posts, keyword search results, profiles, replies, followers and following without logging in. Get text, likes, reposts, quotes, media and links as JSON or CSV for social listening, brand monitoring and research.",
    "version": "0.1",
    "x-build-id": "jUioL6Xol1a7y9P9h"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s-r~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s-r-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/s-r~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-s-r-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/s-r~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-s-r-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 handles, DIDs or profile URLs. Each account produces a profile and the requested feed or relations.",
            "items": {
              "type": "string"
            }
          },
          "post_urls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Public bsky.app post URLs or at:// post URIs. Replies are returned as separate comment rows.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Search queries",
            "type": "array",
            "description": "Search terms or operators such as from:bsky.app and #photography. Latest search supports time-window pagination.",
            "items": {
              "type": "string"
            }
          },
          "include_posts": {
            "title": "Include posts",
            "type": "boolean",
            "description": "Fetch author feeds for handles.",
            "default": true
          },
          "include_reposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "Include reposts in author feeds, retaining the original author and marking the repost.",
            "default": true
          },
          "include_comments": {
            "title": "Include comments",
            "type": "boolean",
            "description": "Fetch available replies for post_urls. Large threads may be incomplete at the source.",
            "default": true
          },
          "include_followers": {
            "title": "Include followers",
            "type": "boolean",
            "description": "Fetch followers as profile rows.",
            "default": false
          },
          "include_following": {
            "title": "Include following",
            "type": "boolean",
            "description": "Fetch accounts followed by each handle as profile rows.",
            "default": false
          },
          "enrich_profiles": {
            "title": "Enrich profiles",
            "type": "boolean",
            "description": "Fetch profile counts for followers and following in batches of up to 25. Unavailable counts remain absent.",
            "default": false
          },
          "feed_filter": {
            "title": "Feed filter",
            "enum": [
              "posts_with_replies",
              "posts_no_replies",
              "posts_with_media",
              "posts_and_author_threads"
            ],
            "type": "string",
            "description": "Author feed filter. posts_no_replies still includes reposts when include_reposts is enabled.",
            "default": "posts_no_replies"
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Search order. top returns at most 100 posts per query. latest continues through time windows.",
            "default": "latest"
          },
          "since": {
            "title": "Since",
            "type": "string",
            "description": "Search lower bound, an ISO 8601 date or timestamp. Must be earlier than until."
          },
          "until": {
            "title": "Until",
            "type": "string",
            "description": "Initial search upper bound, an ISO 8601 date or timestamp."
          },
          "lang": {
            "title": "Lang",
            "type": "string",
            "description": "Search language, a two-letter language code."
          },
          "author": {
            "title": "Author",
            "type": "string",
            "description": "Restrict searches to this Bluesky handle or DID."
          },
          "max_items": {
            "title": "Results per input and phase",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Limit per input and per phase: posts per account or query, replies per post, followers and following per account. Anchor profiles and posts are additional rows.",
            "default": 100
          },
          "cursor": {
            "title": "Continuation cursor",
            "minLength": 1,
            "maxLength": 2000000,
            "type": "string",
            "description": "Opaque continuation from a previous response. Send the same input and options, with this cursor."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}