Bluesky Scraper
Pricing
$0.50 / 1,000 items
Go to Apify Store
Bluesky Scraper
Scrape Bluesky posts by search, profile, feed, or link: text, likes, reposts, replies, images, links, hashtags, and author stats. No login needed.
Bluesky Scraper
Pricing
$0.50 / 1,000 items
Scrape Bluesky posts by search, profile, feed, or link: text, likes, reposts, replies, images, links, hashtags, and author stats. No login needed.
You can access the Bluesky Scraper programmatically from your own applications by using the Apify API. You can also choose the language preference from below. To use the Apify API, you’ll need an Apify account and your API token, found in API & Integrations in Apify Console.
{ "openapi": "3.0.1", "info": { "version": "0.0", "x-build-id": "aNjk0U6esHVGBQ8vU" }, "servers": [ { "url": "https://api.apify.com/v2" } ], "paths": { "/acts/donjuan_mime~bluesky-scraper/run-sync-get-dataset-items": { "post": { "operationId": "run-sync-get-dataset-items-donjuan_mime-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/donjuan_mime~bluesky-scraper/runs": { "post": { "operationId": "runs-sync-donjuan_mime-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/donjuan_mime~bluesky-scraper/run-sync": { "post": { "operationId": "run-sync-donjuan_mime-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 queries", "type": "array", "description": "Search Bluesky posts for these terms. Bluesky's search syntax works, for example \"#ukraine\", \"from:bsky.app\", or \"\\\"exact phrase\\\"\". Without a Bluesky login, search returns up to 100 posts per query.", "items": { "type": "string" } }, "sort": { "title": "Search sort", "enum": [ "latest", "top" ], "type": "string", "description": "Order of search results.", "default": "latest" }, "since": { "title": "Search posts since", "type": "string", "description": "Only search posts created on or after this date, as YYYY-MM-DD or 2026-10-01T00:00:00Z." }, "until": { "title": "Search posts until", "type": "string", "description": "Only search posts created before this date, as YYYY-MM-DD or 2026-10-15T00:00:00Z." }, "lang": { "title": "Search language", "type": "string", "description": "Only search posts in this language, as a two-letter code such as en, de, or uk." }, "profiles": { "title": "Profiles", "type": "array", "description": "Profiles to take posts from: a handle (bsky.app), an @handle, a DID, or a https://bsky.app/profile/... link. Reposts are left out; the author's own replies are kept.", "items": { "type": "string" } }, "startUrls": { "title": "Start URLs", "type": "array", "description": "Bluesky links: a post, a profile, a custom feed (https://bsky.app/profile/bsky.app/feed/whats-hot), a search page, or a hashtag page.", "items": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "title": "URL of a web page", "format": "uri" } } } }, "maxItems": { "title": "Posts per source", "minimum": 1, "type": "integer", "description": "The maximum number of posts from each search query, profile, or start URL. Replies collected with \"Include replies\" come on top." }, "includeReplies": { "title": "Include replies", "type": "boolean", "description": "Also scrape the reply thread of every post that has replies. Each reply is its own dataset item with its parent and depth.", "default": false }, "maxRepliesPerPost": { "title": "Replies per post", "minimum": 1, "type": "integer", "description": "The maximum number of replies to scrape from each post's thread." }, "includeAuthorStats": { "title": "Include author stats", "type": "boolean", "description": "Add each author's bio, followers, follows, post count, and join date. Costs one extra request per 25 new authors.", "default": true }, "blueskyHandle": { "title": "Bluesky handle", "type": "string", "description": "Optional. Your Bluesky handle, used with an app password to search past the first 100 posts. Everything else works without it." }, "blueskyAppPassword": { "title": "Bluesky app password", "type": "string", "description": "Optional. An app password from Bluesky Settings > Privacy and security > App passwords. Never use your main password." }, "proxyCountryCode": { "title": "Proxy country", "type": "string", "description": "Two-letter country code (US, DE, ...) to use Apify residential proxy in that country. \"None\" uses Apify datacenter proxy.", "default": "None" } } }, "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 } } } } } } } } }}OpenAPI is a standard for designing and describing RESTful APIs, allowing developers to define API structure, endpoints, and data formats in a machine-readable way. It simplifies API development, integration, and documentation.
OpenAPI is effective when used with AI agents and GPTs by standardizing how these systems interact with various APIs, for reliable integrations and efficient communication.
By defining machine-readable API specifications, OpenAPI allows AI models like GPTs to understand and use varied data sources, improving accuracy. This accelerates development, reduces errors, and provides context-aware responses, making OpenAPI a core component for AI applications.
You can download the OpenAPI definitions for Bluesky Scraper from the options below:
If you’d like to learn more about how OpenAPI powers GPTs, read our blog post.
You can also check out our other API clients: