walla
██╗ ██╗ █████╗ ██╗ ██╗ █████╗ ██████╗ ██╗ ██╗
██║ ██║ ██╔══██╗ ██║ ██║ ██╔══██╗ ██╔════╝ ██║ ██║
██║ █╗ ██║ ███████║ ██║ ██║ ███████║ █████╗ ██║ ██║ ██║
██║███╗██║ ██╔══██║ ██║ ██║ ██╔══██║ ╚════╝ ██║ ██║ ██║
╚███╔███╔╝ ██║ ██║ ███████╗ ███████╗ ██║ ██║ ╚██████╗ ███████╗ ██║
╚══╝╚══╝ ╚═╝ ╚═╝ ╚══════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═╝
look · offer · talk
Dr. Berend Gort · www.berendgort.dev
walla is an unofficial Wallapop.es CLI + MCP + Python library for Cursor agents and humans: search listings, read inbox, send a message, make an offer.
Not affiliated with Wallapop. Respect ToS and rate limits.
What this unlocks
You tell Cursor: “Find me a used kite near Barcelona under €400, message the seller, and offer if it’s a GRAB.”
The agent runs walla — ranks listings GRAB / LOOK / PASS, links you the
item, asks before sending, then talks and offers on your behalf:
walla setup --lat 41.39 --lon 2.17 --km 30 --label Barcelona --budget 400
walla search "tabla kite Cabrinha" --max 40 --json
# agent: GRAB · Cabrinha Moto 10m · €320 · 4 km
# https://es.wallapop.com/item/...
walla login # paste session cookie once
walla say <id> "Hola, ¿sigue disponible? Puedo pasar hoy." --yes
walla offer <id> --eur 280 --yes # prints total; needs your confirm
walla inbox --json # catch the reply
That is the product: a Cursor agent that can look, talk, and offer on Wallapop without opening the website for every step.
Quality bar (enforced in CI):
docs/code_quality.md— Korotkevich / Tourist bardocs/data_engineering_standards.md— Gray / Stonebraker bardocs/WIRE.md— captured consumer APIdocs/rate_limit_analysis.md— polite spacing
For AI agents (mandatory protocol)
If the user pasted this GitHub link (or this README), follow this section exactly.
Goal
Look, offer, and talk on wallapop.es using the walla package. Speak briefly.
Link listings as https://es.wallapop.com/item/<web_slug>. Verdicts:
GRAB / LOOK / PASS.
Bootstrap
- Install from PyPI (preferred):
pipx install 'walla-cli[mcp]'
From a clone only when hacking:pipx install -e '.[mcp]'. walla doctor --json— readauth.sessionandnetwork.reachable. Never print tokens or cookies.- If no session: ask the human to run
walla loginand paste__Secure-next-auth.session-tokenfrom es.wallapop.com (Cookie-Editor). Agents may pass it non-interactively:walla login --cookie '<value>' --json. - Do the ask with
walla … --jsonand narrate in prose.
Optional MCP:
{
"mcpServers": {
"walla": { "command": "walla-mcp" }
}
}
Operating loop
| Ask | Command |
|---|---|
| Look | walla search "tabla kite" --max 40 --json then walla item <id> --json |
| Talk | walla inbox --json · walla thread <id> --json · walla say <id> "…" --yes |
| Offer | walla offer <id> --eur 180 --yes |
Rules:
- Reads are safe.
say/offerneed--yes/confirm=true. Name listing + euros. - If they only asked to look, do not send.
- Ambiguous match: ask once with candidates.
- In-person offers outside pickup radius: refuse.
- Envelope:
ok,api_version,dataorerror/error_type/retryable.
walla instruct --json returns this recipe.
Install
pipx install 'walla-cli[mcp]' # PyPI: https://pypi.org/project/walla-cli/
walla setup --lat 41.39 --lon 2.17 --km 30 --label Barcelona --json
walla login # paste __Secure-next-auth.session-token
walla doctor --json
CLI
| Command | Role |
|---|---|
walla setup / profile |
Home point, radius, budget |
walla search / item / categories |
Look |
walla watch add|list|check |
Local saved searches |
walla login / logout / whoami |
Session (paste cookie; optional --password) |
walla inbox / thread / say |
Talk |
walla offer |
Offer (prints total, needs --yes) |
walla fav list|add|rm |
Favorites |
walla instruct / doctor |
Agent recipe + health |
Develop
pip install -e '.[dev,mcp]'
pytest -q -m 'not live'
pytest -m live # hits Wallapop; needs network
ruff check .
mypy walla
python scripts/check_code_quality.py
| Layer | Path | Role |
|---|---|---|
| Models | walla/models/ |
Pydantic only |
| HTTP | walla/http/ |
curl_cffi + polite |
| Core | walla/core/ |
Envelope, errors, human_fix |
| Search | walla/search/ |
Look |
| Account | walla/account/ |
Session, inbox, offer |
| Hunter | walla/hunter/ |
Profile, watches, verdicts |
| CLI / MCP | walla/cli/ · walla/mcp/ |
Entrypoints |
Read AGENTS.md before extending.
Disclaimer
Unofficial. Not affiliated with Wallapop. Personal / research use.
License
MIT
Metadata
Release files for walla-cli 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| walla_cli-0.1.1.tar.gz | 154.1 kB | Without provenance | Details for walla_cli-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| walla_cli-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for walla_cli-0.1.1-py3-none-any.whl |
Total release size: 192.5 kB
Release files / walla_cli-0.1.1.tar.gz
| Download URL | walla_cli-0.1.1.tar.gz |
|---|---|
| Size | 154.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
531f974f010eb2f4ef67cc71e8920a504aaa0590e1678252a60a5638cb3fa468
|
|
BLAKE2b-256 checksum How to use checksums |
0a60527d28e87ca865f62228f4ee50d89bfc9d0a33fe49b5d3b71010ab44c8b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / walla_cli-0.1.1-py3-none-any.whl
| Download URL | walla_cli-0.1.1-py3-none-any.whl |
|---|---|
| Size | 38.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f7710e52fcb5ae27e6c55854c0d1a03ed2656ce0a4b85e47bd116a626eb2583c
|
|
BLAKE2b-256 checksum How to use checksums |
05c269221894502b870c5b6bceb7d23189d9aa63e2b810544f2bb1bbb64a1f5d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for walla-cli 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.