{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper",
    "description": "Scrapes Bluesky posts from profiles, single posts and threads, custom feeds, lists and keyword searches, with likes, reposts, replies, quotes, images, link cards and hashtags. Optionally adds profile rows and follower or following lists. No login needed.",
    "version": "0.0",
    "x-build-id": "safHf8HAgwRJaPb5X"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mina_safwat~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mina_safwat-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/mina_safwat~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-mina_safwat-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/mina_safwat~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-mina_safwat-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": {
          "startUrls": {
            "title": "Bluesky links or handles",
            "type": "array",
            "description": "One per line. A profile (https://bsky.app/profile/bsky.app, @bsky.app, a bare handle such as jay.bsky.team, or a did:plc:… id) gives that account's newest posts. A post link (…/profile/<handle>/post/<id>) gives that post, plus its replies if you turn them on below. A custom feed (…/profile/<handle>/feed/<name>) or a list (…/profile/<handle>/lists/<id>) gives its newest posts. A bsky.app search or hashtag link works too.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search posts",
            "type": "array",
            "description": "Words to search all of Bluesky for, one search per line. Bluesky's search operators work: from:handle (posts by an account), mentions:handle, #hashtag, \"exact phrase\", domain:example.com. Fill this, the links above, or both.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerInput": {
            "title": "Max posts per input",
            "minimum": 0,
            "type": "integer",
            "description": "Stops after this many posts for each link or search, newest first (top searches in Bluesky's ranking). For a post link it is the most replies saved under the post. Set 0 to save only profile, follower and following rows.",
            "default": 100
          },
          "includeReplies": {
            "title": "Include profiles' replies",
            "type": "boolean",
            "description": "For profiles and lists, also save the account's replies to other people's posts. Off: only its own posts and its own threads.",
            "default": false
          },
          "includeReposts": {
            "title": "Include profiles' reposts",
            "type": "boolean",
            "description": "For profiles, also save the posts the account reposted, marked with repostedBy and repostedAt.",
            "default": false
          },
          "includeThreadReplies": {
            "title": "Include replies under post links",
            "type": "boolean",
            "description": "For post links, also save every reply in the thread under the post (up to the max posts above), each with its parent and root post.",
            "default": false
          },
          "searchSort": {
            "title": "Search order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Latest pages back through time as far as the limit allows. Top returns Bluesky's best-ranked posts, at most 100 per search.",
            "default": "latest"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Only posts tagged with this language, as a code such as en, es, ja or pt-BR. Applies to every input; leave empty for all languages."
          },
          "since": {
            "title": "Only posts since",
            "type": "string",
            "description": "Skips posts older than this date (for example 2026-09-01, in UTC) or age (for example 7 days). Applies to profiles, feeds, lists and searches; post links are always saved."
          },
          "until": {
            "title": "Only posts before",
            "type": "string",
            "description": "Skips posts from this date (UTC) or age onwards, for example 2026-10-01. Together with the field above it sets a date range."
          },
          "includeProfiles": {
            "title": "Save profile rows",
            "type": "boolean",
            "description": "For each profile link, adds one row with the account's follower, following and post counts, bio, avatar, banner and join date.",
            "default": false
          },
          "includeFollowers": {
            "title": "Save followers",
            "type": "boolean",
            "description": "For each profile link, adds one row per follower (newest first), up to the limit below.",
            "default": false
          },
          "includeFollowing": {
            "title": "Save followed accounts",
            "type": "boolean",
            "description": "For each profile link, adds one row per account it follows (newest first), up to the limit below.",
            "default": false
          },
          "maxFollowsPerProfile": {
            "title": "Max followers / following per profile",
            "minimum": 1,
            "type": "integer",
            "description": "Stops each follower list and each following list after this many accounts.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave this empty: Bluesky's public API answers the Actor directly, and if it ever refuses, the Actor retries through Apify's datacenter and then residential proxies on its own.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}