Operated by Sourcelane✓ verified
A scraper for historical X (Twitter) posts that retrieves every tweet from one or more accounts across any specified date range using a windowed pagination approach. The connector collects full tweet text, timestamps, language and source app, engagement metrics (likes, reposts/retweets, replies, quotes, view and bookmark counts), conversation context and reply/retweet/quote indicators, referenced tweet identifiers/URLs, hashtags, mentions, expanded links, and best-quality media URLs and types (video/image). It also captures author metadata such as author identifier, display name, verified status, and follower counts. Technical features include date-range windowing to reach older posts beyond timeline limits, keyword filtering with standard X search syntax, language filtering, options to include or exclude replies and reposts, configurable window size for high-activity accounts, concurrent processing of multiple accounts, and operation without authentication, cookies, or API keys.
Verified Sep 28, 3:56 AM
$0.002
per tweet
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://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"x-historical-tweets-scraper","params":{"usernames":["NASA"],"startDate":"2023-01-01"},"maxResults":10}'Request params
| Field | Type | Required | Description |
|---|---|---|---|
usernames | array | required | X / Twitter handles to scrape (with or without @), one per line. Profile URLs are also accepted. |
startDate | string | required | First day to include, in YYYY-MM-DD format (UTC). Can be years in the past. |
endDate | string | optional | Last day to include, in YYYY-MM-DD format (UTC). Leave empty for today. |
keywords | string | optional | Only return tweets matching these words. Standard X search syntax works, e.g. `launch OR rocket`, `"exact phrase"`, `#hashtag`, `-exclude`. |
includeReplies | boolean | optional | Keep the account's replies to other people. Turn off for original posts only. |
includeRetweets | boolean | optional | Also return posts the account reposted. Off by default. |
language | string | optional | Optional two-letter language code (en, es, de,...) to keep only tweets in that language. |
maxTweetsPerUser | integer | optional | Stop after this many tweets for each account, newest first. 0 = everything in the date range. |
windowDays | integer | optional | Advanced. The date range is walked backwards in windows of this many days so very active accounts stay fully reachable. 0 = automatic (30 days). |
Each result contains
| Field | Type | Description |
|---|---|---|
username | string | Username |
tweetId | string | Tweet Id |
url | string | Url |
text | string | Text |
createdAt | string | Created At |
lang | string | Lang |
source | string | Source |
retweetCount | integer | Retweet Count |
replyCount | integer | Reply Count |
likeCount | integer | Like Count |
quoteCount | integer | Quote Count |
viewCount | integer | View Count |
bookmarkCount | integer | — |
isReply | boolean | — |
inReplyToId | null | — |
inReplyToUsername | null | — |
conversationId | string | — |
isQuote | boolean | — |
quotedTweetUrl | null | — |
isRetweet | boolean | — |
retweetedTweetUrl | null | — |
hashtags | array | — |
mentions | array | — |
links | array | — |
mediaUrls | array | — |
mediaTypes | array | — |
authorUserId | string | — |
authorName | string | — |
authorIsBlueVerified | boolean | — |
authorFollowersCount | integer | — |
Pick your tool and connect in under a minute. Then just ask — for example: “Find the 50 most-liked tweets about 'MCP servers' this month and summarise the takes.”
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://api.usesourcelane.com/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://api.usesourcelane.com/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://api.usesourcelane.com/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://api.usesourcelane.com/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://usesourcelane.com/openapi.jsonOne POST. Pass maxResults to cap cost.
curl -X POST https://api.usesourcelane.com/v1/call \
-H "Authorization: Bearer sl_live_your_agent_key" \
-H "Content-Type: application/json" \
-d '{"listing":"x-historical-tweets-scraper","params":{"usernames":["NASA"],"startDate":"2023-01-01"},"maxResults":10}'Wrap the REST call as a tool, or point an MCP client at the endpoint.
import requests
res = requests.post(
"https://api.usesourcelane.com/v1/call",
headers={"Authorization": "Bearer sl_live_your_agent_key"},
json={
"listing": "x-historical-tweets-scraper",
"params": {"usernames":["NASA"],"startDate":"2023-01-01"},
"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…