Operated by Sourcelane✓ verified
A scraper for public Bluesky profiles that pulls follower lists, follow lists, timeline posts, and full profile metadata by querying the open atproto public API; it extracts profile identifiers and handles, profile text and bios, avatar/banner URLs, creation and indexing timestamps, follower/follow relations, post identifiers and content, language tags, engagement metrics, reply/repost flags and references, embed types (images, video, external link, quoted post), and author metadata. The connector supports distinct modes for user lists, individual posts, and complete profile snapshots, and uses cursor-based pagination to iterate large lists across runs.
Verified Sep 28, 12:10 AM
$0.005
per profile
Up to 100 per call. Only pay for results returned; failed calls are refunded.
| Window | Uptime | Success rate | p50 | p95 | Calls |
|---|---|---|---|---|---|
| 24h | — | — | — | — | 0 |
| 7d | — | — | — | — | 0 |
| 30d | — | — | — | — | 0 |
Call it through Sourcelane's gateway or MCP server. We run the connector, apply your agent's spend guardrails, and bill only the results returned.
Call it via Sourcelane
curl -X POST https://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"bluesky-scraper","params":{"handle":"bsky.app","maxItems":5},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
handle | string | required | Bluesky handle (e.g. 'bsky.app' or 'jay.bsky.team'), profile URL (https://bsky.app/profile/handle), or DID. A bare username like 'alice' is treated as 'alice.bsky.social'. |
mode | string | optional | What to fetch: followers list, follows list, the user's posts, or just the profile metadata. |
maxItems | integer | optional | Maximum records to return. Set 0 for unlimited (stops ~60s before connector timeout). Ignored in 'Profile only' mode. Capped at 100 per call. |
pageId | string | optional | Optional. Paste NEXT_PAGE_ID from the previous run's Key-value store to resume. |
Each result contains
| Field | Type | Description |
|---|---|---|
kind | string | Kind |
relation | string | Relation |
scrapedFromHandle | string | Scraped From Handle |
did | string | Did |
handle | string | Handle |
displayName | string | Display Name |
description | string | Description |
avatar | string | Avatar |
createdAt | string | Created At |
profileUrl | string | Profile Url |
Pick your tool and connect in under a minute. Then just ask — for example: “Find this creator's profiles on every social network and summarise their reach.”
Connect Claude
Web, desktop and mobile. Paste one URL.
Adds the Sourcelane MCP server with your key as a header.
claude mcp add --transport http sourcelane https://cool-puffin-608.convex.site/mcp \
--header "Authorization: Bearer sl_live_your_agent_key"Alternative to the connector URL: add to claude_desktop_config.json, then restart Claude.
{
"mcpServers": {
"sourcelane": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://cool-puffin-608.convex.site/mcp",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer sl_live_your_agent_key"
}
}
}
}Add to ~/.cursor/mcp.json (or Windsurf's mcp_config.json).
{
"mcpServers": {
"sourcelane": {
"url": "https://cool-puffin-608.convex.site/mcp",
"headers": {
"Authorization": "Bearer sl_live_your_agent_key"
}
}
}
}Save as .vscode/mcp.json. VS Code prompts for your key once.
{
"servers": {
"sourcelane": {
"type": "http",
"url": "https://cool-puffin-608.convex.site/mcp",
"headers": {
"Authorization": "Bearer ${input:sourcelane-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "sourcelane-key",
"description": "Sourcelane agent key",
"password": true
}
]
}Create a GPT → Actions → Import from URL, then Authentication: API Key, Bearer.
https://sourcelane-amber.vercel.app/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://cool-puffin-608.convex.site/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"bluesky-scraper","params":{"handle":"bsky.app","maxItems":5},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://cool-puffin-608.convex.site/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "bluesky-scraper",
"params": {"handle":"bsky.app","maxItems":5},
"maxResults": 10,
},
timeout=300,
)
body = res.json()
print(body["receipt"]["chargedMicros"], "micro-USD for", body["receipt"]["results"], "results")
print(body["data"])—
0 reviews
Leave a review
Loading reviews…