{
  "openapi": "3.0.1",
  "info": {
    "title": "Bluesky Scraper: Posts, Profiles & Followers",
    "description": "Scrape Bluesky posts by keyword or hashtag, profiles with their posts, followers and following, people search and post replies. Emails and links from bios, likes, reposts, media, quotes. Only-new mode for scheduled monitoring. Public API, no login.",
    "version": "1.0",
    "x-build-id": "AtKxXPcJp3RoP5HdW"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/digital_influx~bluesky-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-digital_influx-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/digital_influx~bluesky-scraper/runs": {
      "post": {
        "operationId": "runs-sync-digital_influx-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/digital_influx~bluesky-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-digital_influx-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": {
          "searchTerms": {
            "title": "Search posts",
            "type": "array",
            "description": "Words, phrases or hashtags to find posts, one per line, e.g. 'web scraping' or '#ai'. Bluesky's search syntax works too: from:handle, mentions:handle, domain:example.com, \"exact phrase\".",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerSearch": {
            "title": "Posts per search term",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1 to 100. Bluesky gives apps that are not logged in the first 100 posts of each search; run on a schedule with 'Only new' to collect more over time.",
            "default": 100
          },
          "searchSort": {
            "title": "Sort search results by",
            "enum": [
              "latest",
              "top"
            ],
            "type": "string",
            "description": "Latest posts first, or Bluesky's top posts for the search.",
            "default": "latest"
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "Bluesky accounts, one per line: a handle (jay.bsky.team), a profile link (https://bsky.app/profile/jay.bsky.team) or a DID. You get one row per profile with its bio, emails and links in the bio, counts and verification, then its posts, followers and following as set below.",
            "items": {
              "type": "string"
            }
          },
          "postsPerProfile": {
            "title": "Posts per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Newest posts of each profile. 0 for none.",
            "default": 20
          },
          "includeReplies": {
            "title": "Include the profile's replies",
            "type": "boolean",
            "description": "Also save the replies a profile wrote to other posts.",
            "default": false
          },
          "includeReposts": {
            "title": "Include the profile's reposts",
            "type": "boolean",
            "description": "Also save the posts a profile reposted (each row says who reposted it and when).",
            "default": false
          },
          "followersPerProfile": {
            "title": "Followers per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Newest followers of each profile, each as a full profile row (bio, emails, links, counts). 0 for none.",
            "default": 0
          },
          "followingPerProfile": {
            "title": "Following per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Accounts each profile follows, as full profile rows. 0 for none.",
            "default": 0
          },
          "searchProfiles": {
            "title": "Search people",
            "type": "array",
            "description": "Find accounts by name or bio, one search per line, e.g. 'marketing agency' or 'data engineer'. Each result is a full profile row.",
            "items": {
              "type": "string"
            }
          },
          "maxProfilesPerSearch": {
            "title": "Profiles per people search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "1 to 1000.",
            "default": 50
          },
          "onlyProfilesWithContact": {
            "title": "Only profiles with an email or link in the bio",
            "type": "boolean",
            "description": "For people searches, followers and following: skip accounts whose bio has no email address and no web link. The profiles you list above are always saved.",
            "default": false
          },
          "postUrls": {
            "title": "Posts and their replies",
            "type": "array",
            "description": "Post links, one per line (https://bsky.app/profile/…/post/…). You get the post and its replies, level by level.",
            "items": {
              "type": "string"
            }
          },
          "repliesPerPost": {
            "title": "Replies per post",
            "minimum": 0,
            "type": "integer",
            "description": "0 for only the post.",
            "default": 50
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Only posts from the last N days, for searches, profile posts and replies. 0 for any date.",
            "default": 0
          },
          "languages": {
            "title": "Languages",
            "type": "array",
            "description": "Only posts tagged with one of these languages, as two-letter codes (en, es, pt, de, ja…). Posts without a language tag are left out when this is set.",
            "items": {
              "type": "string"
            }
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only posts with at least this many likes. 0 for any.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new (for scheduled runs)",
            "type": "boolean",
            "description": "Save only posts and followers that earlier runs with this option did not save, so an hourly or daily schedule gives you just what is new (mentions of your brand, new posts of an account, new followers) and you pay only for those. The profiles you list are saved on every run. The memory is one record per search, profile and post, in a key-value store named \"bluesky-state\" in your account; entries not seen for 90 days are dropped.",
            "default": false
          },
          "stateKey": {
            "title": "Memory name (optional)",
            "type": "string",
            "description": "Give a name to keep a separate memory (for example one per client or per task), or a new name to start over. Letters, digits, dot, dash and underscore."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}