sessemi
Python client and CLI for the Sessemi web scraping API. Scrape sites protected by Cloudflare, DataDome, and Akamai — one line of code.
Install
pip install sessemi
Quick start
from sessemi import Sessemi
client = Sessemi(key="your_api_key")
result = client.scrape(
"https://www.leboncoin.fr/recherche?category=10",
stealth=True, # residential proxy + challenge solving + auto-retry
country="FR",
)
print(result.content) # page HTML
print(result.status_code) # 200
print(result.solved) # True — challenge was solved
Or from the command line:
export SESSEMI_KEY=your_api_key
sessemi scrape "https://www.idealista.com/en/venta-viviendas/" -c ES
sessemi scrape "https://www.nike.com/w/shoes" -f json -o shoes.json
sessemi credits
Get a free API key at app.sessemi.com.
Client
Sessemi(key, url, timeout, retries)
from sessemi import Sessemi
# From constructor
client = Sessemi(key="your_api_key")
# Or from environment variables
# SESSEMI_KEY, SESSEMI_URL, SESSEMI_TIMEOUT, SESSEMI_RETRIES
client = Sessemi()
client.scrape(url, **kwargs) → ScrapeResult
result = client.scrape(
"https://www.example.com",
stealth=True, # residential proxy + solving + retry (the bypass switch)
country="FR", # geo-target; requires a residential pool (set by stealth)
render=True, # force browser rendering for JS-heavy pages
session="my-session", # persist cookies/IP across requests
headers={"Accept": "application/json"},
solve=True, # enable challenge solving (default with stealth/residential)
block_resources=True, # skip images/fonts/css for speed
wait_for="css:.product-list", # wait for element before returning
screenshot=True, # capture screenshot
)
result.content # page content (HTML or JSON string)
result.ok # True if success and body_size > 0
result.status_code # HTTP status
result.body_size # content size in bytes
result.challenge_provider # "cloudflare", "datadome", "akamai", or ""
result.solved # True if a challenge was solved
result.credits_charged # credits used
result.credits_remaining # credits left this cycle
result.duration_ms # server-side duration
result.cookies # response cookies
result.screenshot # screenshot bytes (if requested)
result.error # error message on failure
client.scrape_batch(urls, **kwargs) → list[ScrapeResult]
Scrape multiple URLs concurrently using async tasks. Submits all URLs, polls until complete.
results = client.scrape_batch(
["https://example.com/1", "https://example.com/2", "https://example.com/3"],
country="US",
timeout=300,
)
for r in results:
print(f"{r.url} — {'OK' if r.ok else r.error}")
client.health() → dict
status = client.health()
# {"status": "healthy"}
CLI
sessemi scrape URL [options]
sessemi credits
sessemi health
Options
-c, --country CODE Country code (FR, US, DE, ES, ...)
-p, --pool POOL Proxy pool: residential | datacenter
-s, --session NAME Named session for cookie persistence
-f, --format FMT Output: html (default) | json
-o, --output FILE Save to file
-q, --quiet Suppress status output
--render Force browser rendering
--screenshot Capture screenshot (use with -o)
--headers JSON Custom headers as JSON string
-m, --method METHOD HTTP method (default: GET)
Examples
# Scrape with geo-targeting
sessemi scrape "https://www.leboncoin.fr/recherche?category=10" -c FR
# JSON output piped to jq
sessemi scrape "https://www.idealista.com/en/" -c ES -f json | jq .
# Save to file
sessemi scrape "https://www.nike.com/w/shoes" -o shoes.html
# Check credits
sessemi credits
Configuration
All config works via constructor args or environment variables:
| Env var | Default | Description |
|---|---|---|
SESSEMI_KEY |
— | API key (required) |
SESSEMI_URL |
https://api.sessemi.com |
API base URL |
SESSEMI_TIMEOUT |
60 |
Default timeout per scrape (seconds) |
SESSEMI_RETRIES |
3 |
Retry count on failure |
SESSEMI_RETRY_ON |
blocked |
Comma-separated failure types to retry |
Links
- Sessemi — web scraping API
- Documentation
- MCP server — use Sessemi from AI agents
- Examples
- Get API key
Metadata
Release files for sessemi 1.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sessemi-1.7.0.tar.gz | 15.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sessemi-1.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.2 kB
Release files / sessemi-1.7.0.tar.gz
| Download URL | sessemi-1.7.0.tar.gz |
|---|---|
| Size | 15.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5af1ba5c5ea647ab51c3abdc1aab103b4674258526dfb0768d5da77a939650ee
|
|
BLAKE2b-256 checksum How to use checksums |
0da58fec347e0507fef33077905f7ac1fcc8a46ddbae89e336e6e37720dea9f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|
Release files / sessemi-1.7.0-py3-none-any.whl
| Download URL | sessemi-1.7.0-py3-none-any.whl |
|---|---|
| Size | 13.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
47c69720385e90bbc819d6d47768e552abebfcb6c59eea9d8be3cf15ccd4ea0c
|
|
BLAKE2b-256 checksum How to use checksums |
5e3be947bfbea72c496068e33ff48d4532ecbe2c39345b1d3a4ca17e02c0acd9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|