{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Search & Profiles, No Account Needed",
    "description": "Scrape Bluesky posts and profiles with no account or API key, from the official public API. Search posts, any account's posts, replies and custom feeds, with likes, reposts, images and videos. Schedule it to get only new posts.",
    "version": "0.1",
    "x-build-id": "lsmd3pSRyGfhi4TIM"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/subtleasianmerch~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-subtleasianmerch-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/subtleasianmerch~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-subtleasianmerch-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/subtleasianmerch~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-subtleasianmerch-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",
            "type": "array",
            "description": "Words to search for, one search per line, using Bluesky's own post search. Without an account, Bluesky returns one page per search: up to 100 posts (the newest, or the top ones).",
            "items": {
              "type": "string"
            }
          },
          "handles": {
            "title": "Accounts",
            "type": "array",
            "description": "Accounts whose profile and posts you want: a handle (nytimes.com, name.bsky.social), @handle, a DID or a profile link (https://bsky.app/profile/nytimes.com).",
            "items": {
              "type": "string"
            }
          },
          "postUrls": {
            "title": "Posts (with their replies)",
            "type": "array",
            "description": "Post links (https://bsky.app/profile/<handle>/post/<id>). Each gives the post and its replies.",
            "items": {
              "type": "string"
            }
          },
          "feedUrls": {
            "title": "Custom feeds",
            "type": "array",
            "description": "Custom feed links (https://bsky.app/profile/<handle>/feed/<id>), such as Discover. Each gives the feed's posts in its own order.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerSource": {
            "title": "Most posts per search, account, post or feed",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Newest first for accounts and searches. Searches are capped at 100 by Bluesky. With a monitor ID, this caps the new posts per source per run.",
            "default": 100
          },
          "postedAfter": {
            "title": "Posted on or after (YYYY-MM-DD)",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Leave out posts older than this date (UTC). Accounts' posts stop paging here."
          },
          "postedBefore": {
            "title": "Posted on or before (YYYY-MM-DD)",
            "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
            "type": "string",
            "description": "Leave out posts newer than this date (UTC). For searches, Bluesky applies both dates itself."
          },
          "searchSort": {
            "title": "Search order",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Newest posts first, or Bluesky's top posts.",
            "default": "latest"
          },
          "searchLanguage": {
            "title": "Search language (optional)",
            "type": "string",
            "description": "Only posts in this language, as a code such as en, ja or pt."
          },
          "authorFeedFilter": {
            "title": "Which posts from accounts",
            "enum": [
              "posts_no_replies",
              "posts_with_replies",
              "posts_with_media",
              "posts_and_author_threads"
            ],
            "type": "string",
            "description": "Bluesky's own filter for an account's posts.",
            "default": "posts_no_replies"
          },
          "includeReposts": {
            "title": "Include accounts' reposts",
            "type": "boolean",
            "description": "Also output posts the accounts reposted from others (marked with repostedBy).",
            "default": false
          },
          "includeProfiles": {
            "title": "Output account profiles",
            "type": "boolean",
            "description": "One profile row per account: name, bio, followers, following, posts count and verification.",
            "default": true
          },
          "replyDepth": {
            "title": "Reply depth for posts",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "For post links: 1 gives direct replies, 2 also replies to those, and so on. 0 gives only the post.",
            "default": 1
          },
          "monitorId": {
            "title": "Monitor ID (for scheduled runs)",
            "pattern": "^[A-Za-z0-9-]{0,60}$",
            "type": "string",
            "description": "Runs with the same ID remember the posts they delivered, for 60 days. Use letters, digits and dashes. Schedule the Actor with it for a new-post feed."
          },
          "onlyNew": {
            "title": "Output only new posts",
            "type": "boolean",
            "description": "With a monitor ID: output only posts not delivered by earlier runs. Turn off to output every post, with isNew marking the new ones.",
            "default": true
          },
          "requestDelaySecs": {
            "title": "Seconds between requests",
            "minimum": 0.2,
            "maximum": 10,
            "type": "number",
            "description": "Pause between requests to Bluesky, from 0.2 to 10.",
            "default": 0.5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}