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
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):


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 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 --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 / offer need --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, data or error / error_type / retryable.

    walla instruct --json returns 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 / 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.0

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.0
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)

Table of built distributions (wheels) for walla-cli 0.1.0
File Interpreter ABI Platform Actions
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.

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