wallapop-cli

Watches

Turn a search, an item or a seller into a stream of events.

A watch is a saved query the CLI re-runs on demand and diffs against what it saw last time. What comes out is events, not results: only what changed since the previous check.

wallapop watch add search "vinilos" --max-price 20 --distance 30 --name vinilos
wallapop watch add item 8j38qg58w8z9 --name couch
wallapop watch add seller npj9yx8o406e --name fran
wallapop watch check --all

What you get

Search watches diff the first --pages pages: hashes they have not seen, and price changes on hashes they have. Item watches diff the item detail. Seller watches diff the seller's listings.

Event types are item.new, item.price_changed, item.reserved, item.unreserved, item.sold, item.removed, item.edited and seller.new_item.

{
  "type": "item.price_changed",
  "watch": "iphone",
  "profile": "default",
  "at": "2026-09-14T10:40:00Z",
  "item": {
    "hash": "...",
    "title": "...",
    "price": { "amount": 250, "currency": "EUR" },
    "url": "..."
  },
  "change": { "from": 300, "to": 250 }
}

Delivery to sinks is best-effort. A sink that fails is logged and the check still commits, so the event is not retried. The diff pipeline is guaranteed: the CLI commits state after delivery is attempted, so a check that crashes before committing re-runs and re-reports what it saw. Deduplicate on the event fields if that matters for your sink.

wallapop watch events iphone --since 24h

Sinks

By default events go to stdout. Sinks send them somewhere else, and live in config.toml rather than the database so they are easy to review and version.

[sinks.phone]
type = "ntfy"
url = "https://ntfy.sh"
topic = "wallapop"
token_file = "~/.config/wallapop-cli/ntfy-token"
wallapop sink list
wallapop sink test phone   # sends a synthetic event

Test the sink before you rely on it

Run sink test once when you add a sink, so you know the watch notifies you.

On this page