{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Search, Replies, Followers",
    "description": "Scrape public Bluesky posts by keyword with date, language and author filters, a profile's posts, a post's replies, profiles with follower counts, and follower lists. Likes, reposts, replies, quotes, links, images. No login or app password. Pay per row.",
    "version": "0.1",
    "x-build-id": "1Nv5cMrnGZmEy85x6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/themineworks~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-themineworks-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/themineworks~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-themineworks-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/themineworks~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-themineworks-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "search",
              "profile_posts",
              "thread_replies",
              "profiles",
              "followers",
              "following"
            ],
            "type": "string",
            "description": "search reads posts matching your search terms. profile_posts reads the posts of the handles you list. thread_replies reads a post and every reply under it. profiles returns one row per handle with follower, following and post counts. followers and following list the accounts that follow, or are followed by, each handle.",
            "default": "search"
          },
          "searchTerms": {
            "title": "Search terms (search mode)",
            "type": "array",
            "description": "One search per line, read the way the Bluesky search box reads it: words, \"exact phrases\", #hashtags, or Bluesky operators such as from:bsky.app, lang:en or since:2026-10-01. Up to 500 per run. A post that matches two of your terms is delivered once.",
            "default": [
              "artificial intelligence"
            ],
            "items": {
              "type": "string"
            }
          },
          "handles": {
            "title": "Handles (profile_posts, profiles, followers, following)",
            "type": "array",
            "description": "One account per line: a handle (bsky.app, jay.bsky.team), @handle, a DID (did:plc:...) or a profile link (https://bsky.app/profile/bsky.app). A bare name without a dot is read as name.bsky.social. Up to 500 per run.",
            "default": [
              "bsky.app"
            ],
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post links (thread_replies)",
            "type": "array",
            "description": "One post per line: a bsky.app post link or an at:// post URI. The post itself comes first (thread_depth 0), then its replies, direct replies first. Up to 500 per run.",
            "default": [
              "https://bsky.app/profile/bsky.app/post/3mv3zcjaijk22"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results per term, account or post",
            "minimum": 10,
            "maximum": 100000,
            "type": "integer",
            "description": "How many rows to collect for each search term, account or post, 10 to 100,000. Bluesky returns up to 100 posts or accounts per request. A top search stops at about 100. Ignored in profiles mode (one row per handle).",
            "default": 50
          },
          "sort": {
            "title": "Search order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "search mode: latest reads newest first and keeps going back in time up to your max (our test read 2,000 posts going back 6 months). top uses Bluesky's own ranking, which a logged out visitor can read one page of, so top returns up to about 100 posts per term.",
            "default": "latest"
          },
          "since": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Optional. A date (2026-10-01), an ISO time (2026-10-01T09:00:00Z) or a window such as \"7 days\" or \"12 hours\". Applies to search and profile_posts."
          },
          "until": {
            "title": "Posted before",
            "type": "string",
            "description": "Optional. Same formats as since. Applies to search and profile_posts."
          },
          "language": {
            "title": "Language (search)",
            "type": "string",
            "description": "Optional. A language code such as en, de, ja or pt. search mode keeps posts Bluesky tags with this language."
          },
          "author": {
            "title": "Only posts by (search)",
            "type": "string",
            "description": "Optional. A handle or DID; search mode then returns only that account's posts that match your terms."
          },
          "domain": {
            "title": "Only posts linking to a domain (search)",
            "type": "string",
            "description": "Optional. For example nytimes.com: search mode keeps posts that link to that site. Useful to track who shares your pages."
          },
          "feedFilter": {
            "title": "Which posts of a profile (profile_posts)",
            "enum": [
              "posts_no_replies",
              "posts_with_replies",
              "posts_with_media",
              "posts_and_author_threads"
            ],
            "type": "string",
            "description": "profile_posts mode: which of the account's posts to read, the same tabs the Bluesky profile page shows.",
            "default": "posts_no_replies"
          },
          "includeReposts": {
            "title": "Include reposts (profile_posts)",
            "type": "boolean",
            "description": "profile_posts mode: also return posts the account reposted, marked is_repost with reposted_at. Skipped reposts are not charged.",
            "default": false
          },
          "includeNestedReplies": {
            "title": "Include replies to replies (thread_replies)",
            "type": "boolean",
            "description": "thread_replies mode: also return replies to replies, up to 1,000 levels deep. Untick for direct replies only.",
            "default": true
          },
          "followerDetails": {
            "title": "Add counts to each follower (followers, following)",
            "type": "boolean",
            "description": "followers and following modes: add followers_count, follows_count and posts_count to every account row. Costs one extra request per 25 accounts, so runs are slower; the price per row is the same.",
            "default": false
          },
          "onlyNewResults": {
            "title": "Only new results (for schedules)",
            "type": "boolean",
            "description": "Skip posts, replies and accounts an earlier run of yours already delivered for the same term, account or post, so a scheduled run returns and charges only new ones. Not used in profiles mode.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}