{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper — Posts, Profiles & Followers",
    "description": "All-in-one Bluesky data extractor built on the official AT Protocol public API. Search posts by keyword or hashtag with date filters, pull any user's full post feed, fetch profile details, or list followers and following. Clean JSON with engagement counts — no login, no proxies, no HTML parsing.",
    "version": "0.1",
    "x-build-id": "dBIMGMhBcgdOxnZD6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nomad-agent~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nomad-agent-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/nomad-agent~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nomad-agent-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/nomad-agent~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nomad-agent-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": "Mode",
            "enum": [
              "search",
              "authorFeed",
              "profile",
              "followers",
              "following"
            ],
            "type": "string",
            "description": "What to scrape: <b>search</b> — posts matching a keyword/hashtag query; <b>authorFeed</b> — posts from specific accounts; <b>profile</b> — profile details for specific accounts; <b>followers</b> — accounts following the given handles; <b>following</b> — accounts the given handles follow.",
            "default": "search"
          },
          "handles": {
            "title": "Handles",
            "type": "array",
            "description": "Bluesky handles or DIDs to scrape (used in <b>authorFeed</b>, <b>profile</b>, <b>followers</b> and <b>following</b> modes), e.g. <code>bsky.app</code> or <code>jay.bsky.team</code>. The leading <code>@</code> is optional.",
            "items": {
              "type": "string"
            }
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "In <b>authorFeed</b> mode, also include the author's replies (default: original posts, quotes and reposts only).",
            "default": false
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of records to return across the whole run. Set 0 for no limit (paginate until the source is exhausted). Each record returned is billed — see Pricing in the README.",
            "default": 100
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword or hashtag to search posts for (used in <b>search</b> mode). Supports Bluesky search operators typed directly into the query, e.g. <code>#ai</code>, <code>\"exact phrase\"</code> — or use the dedicated <b>From author</b>, <b>Mentions author</b> and <b>Language</b> fields below instead of typing <code>from:</code>/<code>mentions:</code>/<code>lang:</code>."
          },
          "since": {
            "title": "Since",
            "type": "string",
            "description": "Only return posts created at or after this date (used in <b>search</b> mode). Pick a date, or type a precise ISO 8601 timestamp such as <code>2026-06-01T00:00:00Z</code> for finer control."
          },
          "until": {
            "title": "Until",
            "type": "string",
            "description": "Only return posts created before this date (used in <b>search</b> mode). Pick a date, or type a precise ISO 8601 timestamp such as <code>2026-07-01T00:00:00Z</code> for finer control."
          },
          "fromAuthor": {
            "title": "From author",
            "type": "string",
            "description": "Only return posts written by this account (used in <b>search</b> mode). Enter a handle, e.g. <code>bsky.app</code> — same as typing <code>from:</code> into a Bluesky search. The leading <code>@</code> is optional."
          },
          "mentionsAuthor": {
            "title": "Mentions author",
            "type": "string",
            "description": "Only return posts that mention this account (used in <b>search</b> mode). Enter a handle, e.g. <code>bsky.app</code> — same as typing <code>mentions:</code> into a Bluesky search. The leading <code>@</code> is optional."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Only return posts declared in this language (used in <b>search</b> mode). Two-letter ISO 639-1 code, e.g. <code>en</code>, <code>fr</code>, <code>ja</code>."
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Ranking for <b>search</b> mode: newest first or by relevance/engagement.",
            "default": "latest"
          },
          "minLikes": {
            "title": "Min likes",
            "minimum": 0,
            "type": "integer",
            "description": "Drop posts with fewer likes than this before they are returned (applies to <b>search</b> and <b>authorFeed</b> modes; compares against each post's <code>likeCount</code>). 0 = no filter.",
            "default": 0
          },
          "minReposts": {
            "title": "Min reposts",
            "minimum": 0,
            "type": "integer",
            "description": "Drop posts with fewer reposts than this before they are returned (applies to <b>search</b> and <b>authorFeed</b> modes; compares against each post's <code>repostCount</code>). 0 = no filter.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}