Inside skrapi
One task, from description to delivery.
1Describe it
“Toyota Land Cruiser J200 (V8, 2012–2021) for sale in Germany, under 150,000 km and up to €45,000. Track price, mileage and year, and tell me about new listings, price cuts and cars that sell.”
- suchen.mobile.de/fahrzeuge/search.html?ms=24100%3B32…&ml=%3A150000&p=%3A45000
- autoscout24.de/lst/toyota/land-cruiser?kmto=150000&…sort=age&desc=1
2Get structured items
- 01Land Cruiser V8 Executivemobile.de · Hamburg · 118,400 km · 2016€42,500
- 02Land Cruiser V8 Black Editionautoscout24.de · München · 96,300 km · 2018€44,750
- 03Land Cruiser V8 D-4Dkleinanzeigen.de · Hannover · 138,500 km · 2012€35,900
- 04Land Cruiser V8 VXmobile.de · Köln · 141,200 km · 2013€37,900
46 cars · 3 sources · checked every 15 min
3See what changed
- 01Land Cruiser V8 Executive14:05 · mobile.de · was €44,900€42,500
- 02Land Cruiser V8 D-4D13:50 · mobile.de · New item€39,800
Healthy · mobile.de Blocked · autoscout24.de
4Wherever you need it
€44,900 → €42,500 · 118,400 km · mobile.de
GET …/changes
{ "field": "price",
"previous": 44900,
"current": 42500 }What people watch
Anything a page shows in a list or a table. If you can see it in your browser, you can describe it.
Every price cut across your search
mobile.deautoscout24.dekleinanzeigen.de“Toyota Land Cruiser J200 in Germany under €45,000 and 150,000 km. Track price and mileage.”
- A message for every new listing
- Price cuts shown as before → after
- Sold cars keep their history
Catch the refurb before it sells out
apple.combackmarket.comswappa.com“Refurbished 14-inch MacBook Pro, M3 Pro or better, under $1,600. Track price and condition.”
- New stock the moment it appears
- Lowest price across shops
- History of every change
Know when their pricing changes
acme-analytics.com“Plan names and monthly prices on acme-analytics.com/pricing.”
- Plan and price changes to Slack via webhook
- Old values kept for comparison
- A clear alert if the page is redesigned
A feed of what changed
Every run is compared with the one before. You see new items and changed values, not a dump of the whole page.
- 01Land Cruiser V8 Executivemobile.de · Hamburg · just nowPrice dropwas €44,900now €42,500
- 02Land Cruiser V8 Black Editionautoscout24.de · München · 2 minNew itemnow €44,750
- 03Acme Analytics · Team planacme-analytics.com · 9 minPrice risewas $69now $79
- 04Land Cruiser V8 D-4Dkleinanzeigen.de · Hannover · 24 minNo longer listedwas €35,900now Gone
- 05MacBook Pro 14″ M3 Max · 36 GBbackmarket.com · 41 minBack in stockwas Sold outnow In stock
First run sets a baseline
Everything already listed is recorded quietly. You're only notified about what appears after.
You choose the fields that matter
Track price and mileage, ignore a reworded title. Changes to untracked fields don't create events.
Gone isn't deleted
When an item drops out of the results, it's marked "not in latest results" and its history stays.
Delivered the way you work
Turn on one destination or all three. Each task has its own endpoints and settings.
JSON API
Items and change history at task-specific URLs, with a private token.
GET /v1/tasks/land-cruiser-j200/items
{
"data": [{
"title": "Land Cruiser V8 Executive",
"price": 42500,
"mileage_km": 118400,
"year": 2016,
"first_seen": "2026-10-03T08:10Z"
}]
}Telegram
A short message per event, to a private chat or a group.
€44,900 → €42,500 · Hamburg · mobile.de
€39,800 · 132,000 km · Bremen · mobile.de
Webhooks
Each event POSTed as JSON. Failed deliveries retry automatically, then wait for you.
14:05 · field_changed503 · retry 5/513:50 · item_new200 OK12:32 · field_changed200 OK
Retrying resends the stored event. It never reruns extraction.
One broken page doesn't break the task
Websites change, block bots and go down. skrapi is built so that a failure stays contained and is always visible.
mobile.de results were saved and notified. The other two sources kept their last valid data, marked stale, until they recover.
Sources run independently
A blocked or slow site never holds up the others.
Bad results never overwrite good ones
Every extraction is validated. If prices come back empty, the run is discarded.
Stale data is labeled
You always see when a value was last confirmed.
Scripts repair themselves
When a layout changes we test a fix first, and ask you when we can't.
The public API
Read a task’s items and changes from your own code. Base URL https://api.skrapi.app/v1
Current items
GET /tasks/{task}/itemsThe latest valid values of every item the task has found, newest first. Each item carries first_seen, last_seen and a status: current, stale or absent.
Change history
GET /tasks/{task}/changesEvery change event, newest first: item_new, field_changed with the previous and current value, or item_missing.
Query parameters
- limit
- 1–200 per page, 50 by default.
- cursor
- The next_cursor from the previous page; null on the last one.
- since
- An ISO 8601 date: only items seen or changes detected since then.
- Each task has its own token, shown in the task’s Outputs tab. It reads that task only.
- Read-only, so it can be called from any origin, including the browser.
- 300 requests a minute per token.
curl https://api.skrapi.app/v1/tasks/land-cruiser-j200/changes \ -H "Authorization: Bearer <task token>"
{
"task": "land-cruiser-j200",
"data": [{
"detected_at": "2026-10-03T14:05:12Z",
"type": "field_changed",
"item_id": "382614553",
"source": "mobile.de",
"field": "price",
"previous": 44900,
"current": 42500
}],
"next_cursor": null
}