{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper - Posts, Search, Profiles & Hashtags API",
    "description": "Search Bluesky posts by keyword, hashtag, author, language and date, read any account's posts, look up profiles and followers counts, or fetch posts by URL. Text, links, hashtags, engagement counts, images. Official public API, no login, no API key.",
    "version": "1.0",
    "x-build-id": "8bWt3ppTN4hSr0tNR"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/teddythebuilder~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-teddythebuilder-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/teddythebuilder~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-teddythebuilder-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/teddythebuilder~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-teddythebuilder-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 posts for keywords",
            "type": "array",
            "description": "One search per line. Words, phrases in quotes and #hashtags work, e.g. web scraping, \"open data\", #rstats. Posts matching all words are returned (up to 100 per query and date window).",
            "default": [
              "web scraping"
            ],
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Sort search results",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Latest first, or the most engaged posts first.",
            "default": "latest"
          },
          "language": {
            "title": "Post language",
            "type": "string",
            "description": "Only posts tagged with this language, as a two-letter code such as en, sv, de, ja, pt. Empty = all languages."
          },
          "fromAuthor": {
            "title": "Only from this account",
            "type": "string",
            "description": "Limit the keyword search to one account (handle such as apify.com)."
          },
          "since": {
            "title": "Posted after",
            "type": "string",
            "description": "Only posts after this date or date-time (YYYY-MM-DD or ISO 8601, UTC)."
          },
          "until": {
            "title": "Posted before",
            "type": "string",
            "description": "Only posts before this date or date-time."
          },
          "linkedDomain": {
            "title": "Only posts linking to a domain",
            "type": "string",
            "description": "Find posts that share links to this website, e.g. nytimes.com. Can be used without keywords."
          },
          "profiles": {
            "title": "Accounts to read",
            "type": "array",
            "description": "Handles or profile URLs, e.g. bsky.app or https://bsky.app/profile/apify.com. Returns each account's latest posts and its profile row.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "profileFeed": {
            "title": "Which posts of an account",
            "enum": [
              "posts_no_replies",
              "posts_with_replies",
              "posts_with_media"
            ],
            "type": "string",
            "description": "Original posts only, posts with replies, or only posts with images or video.",
            "default": "posts_no_replies"
          },
          "includeProfiles": {
            "title": "Add a profile row per account",
            "type": "boolean",
            "description": "For every account in 'Accounts to read', also output its profile (display name, bio, followers, following, posts count, join date).",
            "default": true
          },
          "findAccounts": {
            "title": "Search for accounts",
            "type": "array",
            "description": "Find accounts by name or topic, e.g. data journalism. Returns profile rows.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Fetch specific posts by URL (https://bsky.app/profile/<handle>/post/<id>) or at:// URI.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max results per search or account",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Posts or profiles to return for each account or account search. Keyword searches return up to 100 posts per query and date window (Bluesky does not page keyword search without login): use Posted after / before to collect more. You pay per result.",
            "default": 100
          },
          "maxItemsTotal": {
            "title": "Max results per run",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop the whole run after this many results.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}