{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper – Posts, Search, Profiles & Followers",
    "description": "Bluesky scraper without login: search posts, author feeds, profiles, followers and follows, custom feeds and lists, full reply threads and trending topics. Flat output with likes, reposts, replies, quotes, hashtags, mentions, links, images and video.",
    "version": "1.0",
    "x-build-id": "pGL7wv5wKyTbzqdYR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/openharvest~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-openharvest-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/openharvest~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-openharvest-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/openharvest~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-openharvest-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": [
              "searchPosts",
              "authorFeed",
              "profiles",
              "followers",
              "follows",
              "customFeed",
              "postThread",
              "trending"
            ],
            "type": "string",
            "description": "<b>searchPosts</b>: posts matching <i>Search query</i>. <b>authorFeed</b>: posts of the <i>Handles</i>. <b>profiles</b>: profile details of the <i>Handles</i> (or profiles matching the <i>Search query</i>). <b>followers</b> / <b>follows</b>: who follows / is followed by the <i>Handles</i>. <b>customFeed</b>: posts of custom feeds or lists in <i>Feed URLs</i>. <b>postThread</b>: a post and all its replies from <i>Post URLs</i>. <b>trending</b>: Bluesky's current trending topics.",
            "default": "searchPosts"
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "For <b>searchPosts</b> (and <b>profiles</b> when no handles are given). Supports Bluesky search syntax: <code>\"exact phrase\"</code>, <code>#hashtag</code>, <code>from:handle</code>, <code>mentions:handle</code>, <code>domain:nytimes.com</code>. Default: <code>artificial intelligence</code>."
          },
          "handles": {
            "title": "Handles",
            "type": "array",
            "description": "For <b>authorFeed</b>, <b>profiles</b>, <b>followers</b> and <b>follows</b>. Accepts <code>jay.bsky.team</code>, <code>@jay.bsky.team</code>, <code>https://bsky.app/profile/jay.bsky.team</code> or a DID. A bare name like <code>alice</code> becomes <code>alice.bsky.social</code>.",
            "items": {
              "type": "string"
            }
          },
          "feedUrls": {
            "title": "Feed URLs",
            "type": "array",
            "description": "For <b>customFeed</b>. Custom feed or list URLs, e.g. <code>https://bsky.app/profile/bsky.app/feed/whats-hot</code>, <code>https://bsky.app/profile/bsky.app/lists/3lvpca43j5z26</code> or <code>at://</code> URIs.",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "For <b>postThread</b>. Post URLs like <code>https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l</code> (or <code>at://</code> URIs). The post and all its replies (nested, with <code>threadDepth</code>) are returned.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items per input",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum results per query / handle / feed / post thread (for trending: max topics). You pay per result, so this also caps your cost.",
            "default": 50
          },
          "sort": {
            "title": "Search sort",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "For <b>searchPosts</b>: <b>latest</b> (newest first, pages back until Max items is reached) or <b>top</b> (most engaging). Without a login, Bluesky returns only the first ~100 <i>top</i> results.",
            "default": "latest"
          },
          "since": {
            "title": "Posts since",
            "type": "string",
            "description": "Only posts created at or after this date. Absolute (<code>2025-01-31</code>) or relative (<code>7 days</code>, <code>24 hours</code>). Applies to searchPosts, authorFeed and customFeed."
          },
          "until": {
            "title": "Posts until",
            "type": "string",
            "description": "Only posts created before this date. Absolute or relative, like <i>Posts since</i>."
          },
          "lang": {
            "title": "Language",
            "type": "string",
            "description": "For <b>searchPosts</b>: only posts in this language (ISO code such as <code>en</code>, <code>de</code>, <code>ja</code>, <code>pt</code>)."
          },
          "authorFeedFilter": {
            "title": "Author feed content",
            "enum": [
              "posts_and_author_threads",
              "posts_no_replies",
              "posts_with_replies",
              "posts_with_media",
              "posts_with_video"
            ],
            "type": "string",
            "description": "For <b>authorFeed</b>: which posts to include.",
            "default": "posts_and_author_threads"
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "For <b>authorFeed</b>: also return posts the account reposted (marked <code>isRepost: true</code>).",
            "default": false
          },
          "postsPerTrend": {
            "title": "Posts per trending topic",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "For <b>trending</b>: also fetch this many top posts for each trending topic (0 = topics only).",
            "default": 0
          },
          "blueskyHandle": {
            "title": "Your Bluesky handle (optional)",
            "type": "string",
            "description": "Optional and normally NOT needed. Only used for post search if Bluesky refuses anonymous search, or to page beyond the first ~100 <i>top</i> results. Use together with an app password."
          },
          "blueskyAppPassword": {
            "title": "Bluesky app password (optional)",
            "type": "string",
            "description": "An app password (Bluesky Settings -> Privacy and security -> App passwords), never your main password. Stored encrypted and used only for post search."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}