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 --allWhat 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 24hSinks
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 eventTest the sink before you rely on it
Run sink test once when you add a sink, so you know the watch notifies you.