{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper - posts, profiles, search, no login",
    "description": "Bluesky scraper: search posts by keyword, pull any account's posts and profile, read a post with its replies, or find profiles. Text, likes, reposts, replies, quotes, hashtags, links, images. No login, no API key. $1 per 1,000 posts, $2 per 1,000 profiles.",
    "version": "0.1",
    "x-build-id": "CLI6RXNFdOFFdhXzi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagleaner~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagleaner-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/datagleaner~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datagleaner-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/datagleaner~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datagleaner-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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords or phrases to search posts for. Supports quotes for phrases, #hashtags and Lucene-style terms. Anonymous search returns up to 100 posts per query; add your own Bluesky login below to page further.",
            "items": {
              "type": "string"
            }
          },
          "handles": {
            "title": "Handles",
            "type": "array",
            "description": "Accounts to read: handles (bsky.app, @bsky.app), DIDs, or profile links (https://bsky.app/profile/bsky.app). Returns each account's recent posts, newest first, plus its profile.",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Individual posts, as https://bsky.app/profile/<handle>/post/<id> links. Turn on 'Include replies to post URLs' to also get the replies.",
            "items": {
              "type": "string"
            }
          },
          "profileSearchQueries": {
            "title": "Profile search queries",
            "type": "array",
            "description": "Keywords to search accounts by (name, handle or bio). Returns profiles with follower counts.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerQuery": {
            "title": "Max posts per search query",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Upper bound on posts returned for each search query. Anonymous search is capped at 100 by Bluesky.",
            "default": 100
          },
          "maxPostsPerHandle": {
            "title": "Max posts per handle",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Upper bound on posts returned for each handle, newest first.",
            "default": 100
          },
          "maxProfilesPerQuery": {
            "title": "Max profiles per profile search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper bound on profiles returned for each profile search query.",
            "default": 25
          },
          "searchSort": {
            "title": "Search order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Latest returns the newest posts first; top returns the most engaged posts first.",
            "default": "latest"
          },
          "searchLanguage": {
            "title": "Search language",
            "type": "string",
            "description": "Optional. Only posts in this language, as a two-letter code such as en, ja, pt."
          },
          "searchAuthor": {
            "title": "Search only posts by",
            "type": "string",
            "description": "Optional. Limit the search to posts by one handle, for example bsky.app."
          },
          "since": {
            "title": "Only posts since",
            "type": "string",
            "description": "Optional. Applies to searches and handles. A date or datetime such as 2026-10-01 or 2026-10-01T12:00:00Z, or a relative time such as 7 days, 12 hours, 2 weeks."
          },
          "until": {
            "title": "Only posts before",
            "type": "string",
            "description": "Optional. Applies to searches and handles. Same formats as 'Only posts since'."
          },
          "includeReplies": {
            "title": "Include an account's own replies",
            "type": "boolean",
            "description": "For handles: also return the replies the account wrote to other people. Off returns only its top-level posts.",
            "default": false
          },
          "includeProfile": {
            "title": "Include profile",
            "type": "boolean",
            "description": "For handles: also return one profile item per handle (display name, bio, follower, following and post counts). Billed as one profile event per handle.",
            "default": true
          },
          "includeThreadReplies": {
            "title": "Include replies to post URLs",
            "type": "boolean",
            "description": "For post URLs: also return the replies under each post (nearest first). Each reply is billed as a post.",
            "default": false
          },
          "maxRepliesPerPost": {
            "title": "Max replies per post URL",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Upper bound on replies returned for each post URL when replies are on.",
            "default": 50
          },
          "blueskyHandle": {
            "title": "Your Bluesky handle (optional)",
            "type": "string",
            "description": "Optional. Only needed to search beyond the first 100 posts per query. Bluesky allows anonymous search for one page only, so paging runs through your own account. Use an app password, never your main password."
          },
          "blueskyAppPassword": {
            "title": "Your Bluesky app password (optional)",
            "type": "string",
            "description": "Optional. Create one at bsky.app/settings/app-passwords. Used only to search for your queries; never stored in the results."
          },
          "requestDelaySeconds": {
            "title": "Delay between requests (seconds)",
            "minimum": 0,
            "maximum": 30,
            "type": "number",
            "description": "Base pause between requests to Bluesky; the actual pause is randomised up to 1.4x. Raise it if Bluesky answers with rate limits (HTTP 429).",
            "default": 0.5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The default is no proxy, which works from Apify's servers."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}