{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Profiles, Followers",
    "description": "Scrape Bluesky without a login or API key. Search posts, get an account's posts, profiles, followers, follows, threads and replies, likes and reposts. Text, images, links, counts and dates. $0.40 per 1,000 results.",
    "version": "1.0",
    "x-build-id": "dgro1N1fyibYwptzw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cyber1nj3ct0r~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cyber1nj3ct0r-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/cyber1nj3ct0r~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cyber1nj3ct0r-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/cyber1nj3ct0r~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cyber1nj3ct0r-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": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Words, phrases or hashtags to search for, one search per line, such as <code>climate</code>, <code>\"good morning\"</code> (the exact phrase) or <code>#cats</code>. Use <code>*</code> to search by the filters below alone, for example every post that links to one website (not together with a period). Bluesky shows a search without a login only its first page, up to 100 posts: for more, search shorter periods one after the other.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerSearch": {
            "title": "Maximum posts per search",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep at most this many posts of each search term. You pay per post returned, so this also caps the cost. At most 100 come from one search without a login (see the search terms).",
            "default": 100
          },
          "searchSort": {
            "title": "Sort search results by",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "<b>Latest</b> lists the newest posts first. <b>Top</b> lists the posts Bluesky ranks highest, which are mostly the most liked.",
            "default": "latest"
          },
          "postedFrom": {
            "title": "Posted from",
            "type": "string",
            "description": "Keep only posts created on or after this date. Pick a date or a period such as <code>7 days</code> or <code>24 hours</code>. It applies to searches and to the posts of accounts."
          },
          "postedUntil": {
            "title": "Posted until",
            "type": "string",
            "description": "Keep only posts created on or before this date (a plain date includes the whole day). It applies to searches and to the posts of accounts. To read more than a search shows at once, set a short period here and in <b>Posted from</b>, and repeat with the next one."
          },
          "language": {
            "title": "Language of the posts",
            "type": "string",
            "description": "Search only posts that their authors marked as written in this language, as a language code such as <code>en</code>, <code>fr</code> or <code>pt</code>. Searches only."
          },
          "searchAuthor": {
            "title": "Only posts by",
            "type": "string",
            "description": "Search only the posts of this account: a handle such as <code>alice.bsky.social</code>, with or without @, or a DID. Searches only."
          },
          "searchMentions": {
            "title": "Only posts mentioning",
            "type": "string",
            "description": "Search only posts that mention this account (a handle or DID). Searches only."
          },
          "searchDomain": {
            "title": "Only posts linking to this domain",
            "type": "string",
            "description": "Search only posts that link to this website, for example <code>nytimes.com</code>. Searches only."
          },
          "searchLink": {
            "title": "Only posts linking to this address",
            "type": "string",
            "description": "Search only posts that link to exactly this web address, for example <code>https://example.com/article</code>. Searches only."
          },
          "accounts": {
            "title": "Accounts",
            "type": "array",
            "description": "Bluesky accounts, one per line: a handle such as <code>bsky.app</code> or <code>@jay.bsky.team</code>, a profile link such as <code>https://bsky.app/profile/bsky.app</code>, or a DID such as <code>did:plc:z72i7hdynmk6r22z27h6tvur</code>.",
            "items": {
              "type": "string"
            }
          },
          "accountData": {
            "title": "What to get for each account",
            "uniqueItems": true,
            "type": "array",
            "description": "<b>Profile</b>: name, description, follower, follow and post counts, picture, labels. <b>Posts</b>: the account's posts, replies and reposts, newest first. <b>Followers</b>: the accounts that follow it. <b>Following</b>: the accounts it follows.",
            "items": {
              "type": "string",
              "enum": [
                "profile",
                "posts",
                "followers",
                "following"
              ],
              "enumTitles": [
                "Profile",
                "Posts",
                "Followers",
                "Following (accounts it follows)"
              ]
            },
            "default": [
              "profile",
              "posts"
            ]
          },
          "maxPostsPerAccount": {
            "title": "Maximum posts per account",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep at most this many posts of each account, newest first. You pay per post returned, so this also caps the cost. Bluesky gives 100 posts per request.",
            "default": 100
          },
          "feedFilter": {
            "title": "Which posts of an account",
            "enum": [
              "posts_with_replies",
              "posts_no_replies",
              "posts_and_author_threads",
              "posts_with_media",
              "posts_with_video"
            ],
            "type": "string",
            "description": "Which of an account's posts to read. Reposts of other people's posts come with every choice except the last two; switch them off below if you do not want them.",
            "default": "posts_with_replies"
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "Include the posts an account reposted. These rows carry the original author's post and, in <code>repostedBy</code>, the account that reposted it. Switch off to get only what the account wrote itself.",
            "default": true
          },
          "maxPeoplePerAccount": {
            "title": "Maximum followers and follows per account",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep at most this many followers, and this many accounts followed, of each account. You pay per person returned, so this also caps the cost.",
            "default": 100
          },
          "posts": {
            "title": "Posts",
            "type": "array",
            "description": "Single posts, one per line: the link from the Bluesky app or website (<code>https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l</code>) or the <code>at://</code> address of the post. To find the link, open the post, then Share, Copy link to post.",
            "items": {
              "type": "string"
            }
          },
          "postData": {
            "title": "What to get for each post",
            "uniqueItems": true,
            "type": "array",
            "description": "<b>The post</b>: text and counts as they are now. <b>Replies</b>: the answers below it. <b>Posts above</b>: the conversation it replies to, back to the first post. <b>Likes</b> and <b>reposts</b>: the accounts that liked or reposted it.",
            "items": {
              "type": "string",
              "enum": [
                "post",
                "replies",
                "parents",
                "likes",
                "reposts"
              ],
              "enumTitles": [
                "The post",
                "Replies",
                "Posts above (the conversation it replies to)",
                "Who liked it",
                "Who reposted it"
              ]
            },
            "default": [
              "post",
              "replies"
            ]
          },
          "replyDepth": {
            "title": "How deep to read replies",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "1 reads the answers to the post, 2 also the answers to those, and so on. Bluesky gives the replies it ranks highest, so a post with thousands of replies shows only part of them.",
            "default": 3
          },
          "maxRepliesPerPost": {
            "title": "Maximum replies per post",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Keep at most this many replies of each post, over all levels.",
            "default": 100
          },
          "maxPeoplePerPost": {
            "title": "Maximum likes and reposts per post",
            "minimum": 1,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep at most this many accounts that liked, and this many that reposted, each post.",
            "default": 100
          },
          "skipAdultContent": {
            "title": "Skip adult content",
            "type": "boolean",
            "description": "Leave out posts and accounts that Bluesky or their authors label as adult (porn, sexual, nudity). Left-out rows are not charged. Accounts that asked not to be shown to people who are not logged in are always left out.",
            "default": true
          },
          "requestTimeoutSecs": {
            "title": "Time limit per request",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one answer from Bluesky before giving up.",
            "default": 30
          },
          "userAgent": {
            "title": "User-Agent",
            "type": "string",
            "description": "The name the tool sends with each request. Leave empty to use the tool's own name, which tells Bluesky what is visiting. Set your own only if you have permission to use it."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}