{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper — Posts, Profiles & Followers",
    "description": "Scrape Bluesky (AT Protocol) with no login. Search posts by keyword and filter by date, language, author, hashtag or linked domain. Pull profiles, follower and following lists, single posts and whole accounts — text, likes, reposts, replies, quotes, images. JSON or CSV.",
    "version": "0.0",
    "x-build-id": "PDAUUXv3eqd0K0KKn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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 keywords",
            "type": "array",
            "description": "Keywords to search Bluesky for. By default each keyword returns matching <b>posts</b> with full text and engagement counts — switch \"What keywords return\" below to get accounts instead.",
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "What keywords return",
            "enum": [
              "posts",
              "accounts",
              "both"
            ],
            "type": "string",
            "description": "Whether a keyword returns posts, accounts, or both.",
            "default": "posts"
          },
          "sort": {
            "title": "Sort posts by",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Post search only. <b>Latest</b> is time-ordered, which lets this Actor walk backwards through time and return far more than one page. <b>Top</b> is relevance-ordered, and Bluesky caps logged-out relevance search at a single page of about 100 posts.",
            "default": "latest"
          },
          "since": {
            "title": "Posted after",
            "type": "string",
            "description": "Only posts created on or after this date. Absolute date, e.g. 2026-09-01."
          },
          "until": {
            "title": "Posted before",
            "type": "string",
            "description": "Only posts created before this date. Absolute date, e.g. 2026-09-01."
          },
          "lang": {
            "title": "Language",
            "type": "string",
            "description": "Two-letter language code, e.g. <code>en</code>, <code>de</code>, <code>pt</code>."
          },
          "fromAuthor": {
            "title": "Only from this account",
            "type": "string",
            "description": "Handle or DID — returns only that account's posts matching the keyword."
          },
          "mentionsAuthor": {
            "title": "Mentions this account",
            "type": "string",
            "description": "Handle or DID — returns only posts that mention it. Useful for brand monitoring."
          },
          "domain": {
            "title": "Links to this domain",
            "type": "string",
            "description": "Only posts linking to this domain, e.g. <code>nytimes.com</code>."
          },
          "hashtags": {
            "title": "Hashtags",
            "type": "array",
            "description": "Only posts carrying these hashtags. Write them without the <code>#</code>.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Bluesky URLs",
            "type": "array",
            "description": "Bluesky profile or post URLs, one per line — <code>https://bsky.app/profile/&lt;handle&gt;</code> or <code>https://bsky.app/profile/&lt;handle&gt;/post/&lt;id&gt;</code>. No login needed.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "handles": {
            "title": "Handles or DIDs",
            "type": "array",
            "description": "Bluesky handles (e.g. <code>bsky.app</code>) or DIDs (<code>did:plc:…</code>) — each returns that profile.",
            "items": {
              "type": "string"
            }
          },
          "includePosts": {
            "title": "Also fetch each profile's posts",
            "type": "boolean",
            "description": "When on, every handle/profile above also returns that account's recent posts, not just the profile row.",
            "default": false
          },
          "maxPostsPerProfile": {
            "title": "Max posts per profile",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on posts fetched per profile when \"Also fetch each profile's posts\" is on.",
            "default": 100
          },
          "includeFollowers": {
            "title": "Also export followers",
            "type": "boolean",
            "description": "When on, every handle/profile above also returns the accounts that follow it — handle, display name, avatar and profile URL.",
            "default": false
          },
          "includeFollowing": {
            "title": "Also export following",
            "type": "boolean",
            "description": "When on, every handle/profile above also returns the accounts it follows.",
            "default": false
          },
          "maxFollowsPerProfile": {
            "title": "Max followers/following per profile",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on follower or following rows per profile. Large accounts have millions, so this stops a run from spending your whole budget on one of them.",
            "default": 500
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum rows to scrape across the whole run (posts + profiles + followers combined). Note for post search: Bluesky serves logged-out results one page at a time, so counts above ~100 are reached by stepping back through time and need sort \"Latest\". On the Apify free plan a run returns at most 50 rows regardless of this value.",
            "default": 1000
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Keyword <b>post</b> search is rate-limited per IP by Bluesky, so a rotating proxy is on by default. It reduces but does not eliminate the throttle — roughly a third of heavy search runs still come back short, and the Actor reports the shortfall. Profiles, followers and account search are not rate-limited; turn the proxy off if those are all you use.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}