Skip to main content

walla

██╗    ██╗  █████╗  ██╗      ██╗       █████╗            ██████╗ ██╗      ██╗
██║    ██║ ██╔══██╗ ██║      ██║      ██╔══██╗          ██╔════╝ ██║      ██║
██║ █╗ ██║ ███████║ ██║      ██║      ███████║  █████╗  ██║      ██║      ██║
██║███╗██║ ██╔══██║ ██║      ██║      ██╔══██║  ╚════╝  ██║      ██║      ██║
╚███╔███╔╝ ██║  ██║ ███████╗ ███████╗ ██║  ██║          ╚██████╗ ███████╗ ██║
 ╚══╝╚══╝  ╚═╝  ╚═╝ ╚══════╝ ╚══════╝ ╚═╝  ╚═╝           ╚═════╝ ╚══════╝ ╚═╝
  look · offer · talk
  Dr. Berend Gort  ·  www.berendgort.dev

walla banner

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 --aggression fair --must "kite cabrinha"
walla search "tabla kite Cabrinha" --max 40 --json
# agent: GRAB · Cabrinha Moto 10m · €320 · 4 km
#        https://es.wallapop.com/item/...

walla search "…" --export md,csv,html,pdf --out ./shortlist --json
# or later: walla export --format md,csv,html,pdf --out ./shortlist --json

walla login                         # paste session cookie once
walla negotiate <id> --json         # draft only; you approve text + EUR
walla say <id> "…" --yes            # only after you approve
walla offer <id> --eur 280 --yes    # only after you approve; never pays

That is the product: a Cursor agent that can look, draft, talk, and offer up to the point of payment. You finish pay/meet in the Wallapop app.

Quality bar (enforced in CI):


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

  1. Install from PyPI (preferred):
    pipx install 'walla-cli[mcp]'
    
    From a clone only when hacking: pipx install -e '.[mcp]'.
  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. walla instruct --json — read mandate + hitl. If mandate.budget is null, ask once for budget / aggression / must words, then walla setup ….
  5. Do the ask with walla … --json and narrate in prose.

Optional MCP:

{
  "mcpServers": {
    "walla": { "command": "walla-mcp" }
  }
}

Operating loop

Ask Command
Mandate walla setup --budget 400 --aggression fair --must "kite"
Look walla search "tabla kite" --max 40 --json then walla item <id> --json
Draft walla negotiate <id> --json (win-win Spanish draft; never sends)
Talk walla inbox --json · walla thread <id> --json · walla say <id> "…" --yes
Offer walla offer <id> --eur 180 --yes

HITL (ask once per decision)

Step Agent alone Ask human
Search inside mandate yes if query vague or budget unset
Shortlist show GRABs if more than one GRAB, pick the id
Negotiate draft yes approve Spanish text
say --yes never yes to that exact text
offer --yes never; refuse if EUR > budget yes to that exact EUR
Pay / buy / reserve never human finishes in the Wallapop app

Rules:

  • Reads and negotiate drafts are safe. say / offer need --yes.
  • --yes means send chat or price offer only. It never completes a purchase.
  • If they only asked to look, do not send.
  • Ambiguous match or multiple GRABs: ask once with candidates.
  • In-person offers outside pickup radius: refuse.
  • Envelope: ok, api_version, data or error / 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 negotiate Win-win Spanish draft (never sends)
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.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for walla-cli 0.1.4
File Size Uploaded Provenance Actions
walla_cli-0.1.4.tar.gz 166.8 kB Without provenance Details for walla_cli-0.1.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for walla-cli 0.1.4
File Interpreter ABI Platform Actions
walla_cli-0.1.4-py3-none-any.whl Python 3 none any Details for walla_cli-0.1.4-py3-none-any.whl

Total release size: 215.5 kB

Release files / walla_cli-0.1.4.tar.gz

Download URL walla_cli-0.1.4.tar.gz
Size 166.8 kB
Tags Source
SHA-256 checksum
How to use checksums
4e277b9c7d6bf56efe281ee47d75329ac80cdd197c87b7928a11eaf768e3b9fa
BLAKE2b-256 checksum
How to use checksums
e8faae808aa30576a9f98f18d3f35a293c57fd136632532c2ba52aba9226a94f
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.4-py3-none-any.whl

Download URL walla_cli-0.1.4-py3-none-any.whl
Size 48.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ed2b19c159b943150b0c7bb696de1bf56062df79fbd58a48d08e13f398c9e76e
BLAKE2b-256 checksum
How to use checksums
244e9a1a63457255f214004adcdc7697561f0aaa28f700c760be7b44688a3b66
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.4

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page