Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.11.1"
".": "0.11.2"
}
14 changes: 9 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 0.11.2 (2026-08-21)

Full Changelog: [v0.11.1...v0.11.2](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.11.1...v0.11.2)

### Documentation

* remove repeated Python SDK copy and clarify examples

## 0.11.1 (2026-08-20)

Full Changelog: [v0.11.0...v0.11.1](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.11.0...v0.11.1)
Expand Down Expand Up @@ -151,7 +159,7 @@ Full Changelog: [v0.4.0...v0.4.1](https://github.com/Xquik-dev/x-twitter-scraper

### Documentation

* add Contributor Covenant 2.1 Code of Conduct ([#2192](https://github.com/Xquik-dev/x-twitter-scraper-python/issues/2192)) ([06635a2](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/06635a2a9951934ecca52515211dbcec2714e46f))
* add Contributor Covenant 2.1 Code of Conduct ([06635a2](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/06635a2a9951934ecca52515211dbcec2714e46f))

## 0.4.0 (2026-04-22)

Expand Down Expand Up @@ -248,16 +256,12 @@ Full Changelog: [v0.1.1...v0.1.2](https://github.com/Xquik-dev/x-twitter-scraper

## 0.1.1 (2026-03-30)

Full Changelog: [v0.1.0...v0.1.1](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.1.0...v0.1.1)

### Chores

* update SDK settings ([3ff9848](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/3ff98489454de0a9bcd2378c214e5407a7c04f53))

## 0.1.0 (2026-03-30)

Full Changelog: [v0.0.1...v0.1.0](https://github.com/Xquik-dev/x-twitter-scraper-python/compare/v0.0.1...v0.1.0)

### Features

* **api:** api update ([3e4e51b](https://github.com/Xquik-dev/x-twitter-scraper-python/commit/3e4e51bfa74558e9d38d3b1aba5ff55785f638d3))
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ title: Xquik Python SDK for Twitter Search & X Automation
type: software
authors:
- name: Xquik
version: 0.11.1
date-released: 2026-08-20
version: 0.11.2
date-released: 2026-08-21
url: https://github.com/Xquik-dev/x-twitter-scraper-python
repository-code: https://github.com/Xquik-dev/x-twitter-scraper-python
license: Apache-2.0
Expand Down
24 changes: 7 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,14 @@
[![PyPI version](https://img.shields.io/pypi/v/x_twitter_scraper.svg?label=pypi%20(stable))](https://pypi.org/project/x_twitter_scraper/)

Use the Xquik Python SDK for Twitter search, timelines, profiles & followers.
Manage media, webhooks & X automation with sync or async clients.
It provides a Twitter API alternative through documented Xquik REST routes.
Manage media, webhooks & X automation through documented Xquik REST routes.

[Python SDK Guide](https://docs.xquik.com/sdks/python) | [API Map](api.md) | [REST API](https://docs.xquik.com/api-reference/overview) | [Webhooks](https://docs.xquik.com/api-reference/webhooks/create) | [MCP Guide](https://docs.xquik.com/mcp/overview)

[Stainless](https://www.stainless.com/) generates this SDK.

## Common Twitter & X Tasks

Map each task to its REST route.

| Task | REST Route | Usage |
| --- | --- | --- |
| Search tweets without the X API | `GET /x/tweets/search` | Use keyword or advanced operator queries. |
Expand All @@ -25,6 +22,7 @@ Map each task to its REST route.
| Scrape following accounts | `GET /x/users/{id}/following` | Use an extraction for complete datasets. |
| Read a home timeline | `GET /x/timeline` | Approve this private read. |
| Export large X datasets | `POST /extractions` | Poll status, then download results. |
| Run giveaway draws | `POST /draws` | Pick winners from post replies. |
| Download or upload media | `/x/media/*` | Use typed file helpers. |
| Monitor an account | `POST /monitors` | Deliver events through HMAC webhooks. |
| Post or reply | `POST /x/tweets` | Confirm the account and payload. |
Expand All @@ -34,10 +32,6 @@ Map each task to its REST route.
Use the typed REST SDK in application code. Add `https://xquik.com/mcp` to MCP clients.
Follow the [MCP guide](https://docs.xquik.com/mcp/overview) for current authentication support.

## Giveaway Draws & Extractions

Run giveaway draws and export extraction results from Python pipelines.

## Package & Registry Trust

- Package: [PyPI `x_twitter_scraper`](https://pypi.org/project/x_twitter_scraper/)
Expand All @@ -49,7 +43,6 @@ Run giveaway draws and export extraction results from Python pipelines.
## Installation

```sh
# Install from PyPI.
pip install x_twitter_scraper
```

Expand All @@ -62,7 +55,7 @@ import os
from x_twitter_scraper import XTwitterScraper

client = XTwitterScraper(
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # Optional; the client reads this variable.
)

response = client.x.tweets.search(
Expand All @@ -84,7 +77,7 @@ import asyncio
from x_twitter_scraper import AsyncXTwitterScraper

client = AsyncXTwitterScraper(
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # Optional; the client reads this variable.
)


Expand All @@ -105,7 +98,6 @@ Both clients expose the same resources and methods.
The async client uses `httpx`. Install `aiohttp` for an alternative backend:

```sh
# Install from PyPI.
pip install x_twitter_scraper[aiohttp]
```

Expand All @@ -120,7 +112,7 @@ from x_twitter_scraper import AsyncXTwitterScraper

async def main() -> None:
async with AsyncXTwitterScraper(
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # This is the default and can be omitted
api_key=os.environ.get("X_TWITTER_SCRAPER_API_KEY"), # Optional; the client reads this variable.
http_client=DefaultAioHttpClient(),
) as client:
response = await client.x.tweets.search(
Expand All @@ -140,7 +132,6 @@ Responses use [Pydantic models](https://docs.pydantic.dev) with these helpers:
- Serialize to JSON with `model.to_json()`.
- Convert to a dictionary with `model.to_dict()`.

Typed requests and responses provide editor completion and documentation.
Set `python.analysis.typeCheckingMode` to `basic` in VS Code to catch type errors.

## File Uploads
Expand Down Expand Up @@ -184,7 +175,7 @@ except x_twitter_scraper.APIConnectionError as e:
except x_twitter_scraper.RateLimitError as e:
print("Rate limited. Retry later.")
except x_twitter_scraper.APIStatusError as e:
print("The server returned another non-2xx status.")
print("Server returned a non-2xx status.")
print(e.status_code)
print(e.response)
```
Expand Down Expand Up @@ -214,7 +205,6 @@ from x_twitter_scraper import XTwitterScraper

# Set the client default:
client = XTwitterScraper(
# default is 2
max_retries=0,
)

Expand All @@ -235,7 +225,7 @@ from x_twitter_scraper import XTwitterScraper

# Set the client default:
client = XTwitterScraper(
# 20 seconds (default is 1 minute)
# 20 seconds; default: 1 minute.
timeout=20.0,
)

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "x_twitter_scraper"
version = "0.11.1"
version = "0.11.2"
description = "Python SDK for Twitter search, followers, webhooks & X automation through Xquik. Not affiliated with X Corp."
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/x_twitter_scraper/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "x_twitter_scraper"
__version__ = "0.11.1" # x-release-please-version
__version__ = "0.11.2" # x-release-please-version
4 changes: 2 additions & 2 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.