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 this clone:
</code></pre> </li> </ol> <p>pipx install 'walla-cli[mcp]'</p> <h1 id="user-content-from-clone-pipx-install--e-mcp">from clone: pipx install -e '.[mcp]'<a href="#user-content-from-clone-pipx-install--e-mcp" aria-label="Link to heading 'from clone: pipx install -e '.[mcp]''" data-heading-content="from clone: pipx install -e '.[mcp]'" class="anchor"></a></h1> <pre><code>2. `walla doctor --json` — read `auth.session` and `network.reachable`. **Never** print tokens or cookies. 3. If no session: ask the human to run `walla login` and paste `__Secure-next-auth.session-token` from es.wallapop.com (Cookie-Editor). Agents may pass it non-interactively: `walla login --cookie '<value>' --json`. 4. Do the ask with `walla … --json` and narrate in prose. Optional MCP: ```json { "mcpServers": { "walla": { "command": "walla-mcp" } } }
Operating loop
Ask Command Look walla search "tabla kite" --max 40 --jsonthenwalla item <id> --jsonTalk walla inbox --json·walla thread <id> --json·walla say <id> "…" --yesOffer walla offer <id> --eur 180 --yesRules:
- 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 --jsonreturns this recipe.
Install
git clone git@github.com:berendgort/wallapop-cli.git cd wallapop-cli pipx install 'walla-cli[mcp]' # or: pipx install -e '.[mcp]' 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/profileHome point, radius, budget walla search/item/categoriesLook walla watch add|list|checkLocal saved searches walla login/logout/whoamiSession (paste cookie; optional --password)walla inbox/thread/sayTalk walla offerOffer (prints total, needs --yes)walla fav list|add|rmFavorites walla instruct/doctorAgent 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.mdbefore extending.Disclaimer
Unofficial. Not affiliated with Wallapop. Personal / research use.
License
MIT
- Reads are safe.
Metadata
Release files for walla-cli 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| walla_cli-0.1.0.tar.gz | 153.9 kB | Without provenance | Details for walla_cli-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| walla_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for walla_cli-0.1.0-py3-none-any.whl |
Total release size: 192.0 kB
Release files / walla_cli-0.1.0.tar.gz
| Download URL | walla_cli-0.1.0.tar.gz |
|---|---|
| Size | 153.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
deff1763a6756a858185577e48c693e8ddca8fda78fa42d029bcb4ed243c32f9
|
|
BLAKE2b-256 checksum How to use checksums |
f4ad9118876bfaee4fb740059628884c569e766a4ce8f0a0ff3c93e3f103b1fe
|
| 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.0-py3-none-any.whl
| Download URL | walla_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 38.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00f1cc4a4b8b64f985366cefd3ebc2c42bf9b3a7243994ace9f821eb2d21abc2
|
|
BLAKE2b-256 checksum How to use checksums |
d4f3c59346a679c7ad80f321399afb34a6ba7368af0bde9944af3bfd423fb14c
|
| 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.0
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.