Sessemi — web scraping API that solves DataDome, Cloudflare, and Akamai.
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sessemi-1.3.3.tar.gz.
File metadata
- Download URL: sessemi-1.3.3.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aabe68bc045448613e4c9d26620c55970e1f7f6571057fb7db987356dbe69f51
|
|
| MD5 |
f093ac1d2daf3b23dc0f38d161330b3e
|
|
| BLAKE2b-256 |
4e965858ddcbd1a1f535d4590fa06f8442987708c6e3035bd20249c2fc54b226
|
File details
Details for the file sessemi-1.3.3-py3-none-any.whl.
File metadata
- Download URL: sessemi-1.3.3-py3-none-any.whl
- Upload date:
- Size: 12.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7ed07960ce95118313a3681299de37e5bed269859ade33e6bf7b923f26cbb01
|
|
| MD5 |
ea1eddbb238f808e29bb69e5ca1ac504
|
|
| BLAKE2b-256 |
9672298549cbb31a64a92673a360228ba22135e19deadd92615f85acaa2dda8c
|