traktorpool API & Scraper
The traktorpool API turns traktorpool.de, a German marketplace for agricultural machinery, into JSON in two actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search browses or searches the catalogue by keyword, machine group and type, manufacturer, model, seller, condition, year of construction, net price, hour meter, engine power, seller country or postal code and radius, in the source's own six sort orders and at 25, 50 or 100 rows a page, and returns the source's exact match count with every page. detail returns one listing in full: the net price, the gross price and the VAT rate as three separate fields, year of construction, hour meter, engine power, condition, location, every row of the technical table the seller filled in, the extras, the description, the photos and the dealer's business block.
One listing, three prices on the same page
Listing 8977177, a 2021 machine with 640 operating hours, read on 2026-10-14. The page states its price three times, at three different precisions. This is what each one says and what the API returns.
| where on the page | value | what the API does with it |
|---|---|---|
| structured product data | 94,957.98 EUR | price_net = 94957.98 (the exact figure) |
| analytics payload | 94,957 (cut to a whole number) | used only to check the other two |
| printed headline | 94.958 € zzgl. 19% MwSt. | price_printed, vat_rate = 19 |
| printed gross | 113,000 EUR | price_gross = 113000 |
The three readings differ by less than one euro, so price_mismatch stays false; a gap above one euro would set it. Read from three different countries, every value above was identical.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/traktorpool/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"manufacturer_id": 159,
"category_id": 24
}
}{
"ok": true,
"meta": {
"api": "traktorpool",
"endpoint": "search",
"mode": "live",
"latency_ms": 1124.7,
"record_count": 30,
"bytes": 811788,
"cache_hit": false,
"top_offers": 6,
"organic_rows": 24,
"source_url": "https://www.traktorpool.de/gebraucht/a-x/24/c-x/159/",
"upstream_requests": 1,
"source_cache_age_s": 182,
"charged_credits": 3,
"version": "1.0.0",
"request_id": "ebb15fef23004894",
"queue_ms": 1.5,
"fetched_at": "2026-10-14T18:57:31.867Z"
},
"data": {
"listings": [
{
"listing_id": "8743233",
"url": "https://www.traktorpool.de/details/Traktoren/Fendt-720-SCR-PROFI-FRONTZAPFWELLE-&-RTK/8743233/",
"title": "Fendt 720 SCR PROFI | FRONTZAPFWELLE & RTK",
"manufacturer": "Fendt",
"model": "720 SCR PROFI | FRONTZAPFWELLE & RTK",
"category_slug": "Traktoren",
"condition": "used",
"price_net": 53885,
"price_printed": "53.885 €",
"price_mismatch": false,
"currency": "EUR",
"price_label": null,
"is_auction": false,
"price_on_request": false,
"vat_note": "zzgl. 19% MwSt.",
"vat_rate": 19,
"location": "27793 Wildeshausen, Deutschland",
"location_zip_city": "27793 Wildeshausen",
"location_country": "Deutschland",
"year": 2014,
"power_kw": 148,
"operating_hours": 14795,
"summary": "Baujahr: 2014, Motorleistung: 148 kW, Betriebsstunden: 14795 h, Allrad, Druckluftbremsanlage, Frontzapfwelle, Gefederte Vorderachse, Klimaanlage, Kabine, Kabinenfederung, Erstzulassung / Inbetriebnahme: 06.03.0014, ...",
"seller_name": "Heinrich Schröder Landmaschinen KG",
"seller_id": "32008",
"image_url": "https://www.traktorpool.de/media/3233/8743233/66764408/1789712780.jpg?width=240&height=180&crop=1",
"image_count": 20,
"badges": [],
"is_top_offer": true,
"rank": 1
},
{
"listing_id": "8979259",
"url": "https://www.traktorpool.de/details/Traktoren/Fendt-720-VARIO-GEN6/8979259/",
"title": "Fendt 720 VARIO GEN6",
"manufacturer": "Fendt",
"model": "720 VARIO GEN6",
"category_slug": "Traktoren",
"condition": "used",
"price_net": null,
"price_printed": null,
"price_mismatch": false,
"currency": null,
"price_label": "Auktion",
"is_auction": true,
"price_on_request": false,
"vat_note": null,
"vat_rate": null,
"location": "94315 Straubing, Deutschland",
"location_zip_city": "94315 Straubing",
"location_country": "Deutschland",
"year": 2023,
"power_kw": 147,
"operating_hours": 1080,
"summary": "Baujahr: 2023, Motorleistung: 147 kW, Betriebsstunden: 1080 h",
"seller_name": "Baywa Niederbayern",
"seller_id": "98832",
"image_url": "https://www.traktorpool.de/media/9259/8979259/67245563/1791750858.jpg?width=240&height=180&crop=1",
"image_count": 10,
"badges": [],
"is_top_offer": true,
"rank": 2
},
{
"listing_id": "8716293",
"url": "https://www.traktorpool.de/details/Traktoren/Fendt-724-VARIO-GEN-6/8716293/",
"title": "Fendt 724 VARIO GEN-6",
"manufacturer": "Fendt",
"model": "724 VARIO GEN-6",
"category_slug": "Traktoren",
"condition": "used",
"price_net": null,
"price_printed": null,
"price_mismatch": false,
"currency": null,
"price_label": "Auktion",
"is_auction": true,
"price_on_request": false,
"vat_note": null,
"vat_rate": null,
"location": "15306 Seelow, Deutschland",
"location_zip_city": "15306 Seelow",
"location_country": "Deutschland",
"year": 2021,
"power_kw": 174,
"operating_hours": 6240,
"summary": "Baujahr: 2021, Motorleistung: 174 kW, Betriebsstunden: 6240 h, Allrad, Fronthubwerk, Klimaanlage, Höchstgeschwindigkeit: 50 km/h",
"seller_name": "AGRAVIS Technik Center GmbH",
"seller_id": "111150",
"image_url": "https://www.traktorpool.de/media/6293/8716293/63845492/1777083032.jpg?width=240&height=180&crop=1",
"image_count": 11,
"badges": [],
"is_top_offer": true,
"rank": 3
}
],
"total": 3413,
"pagination": {
"page": 1,
"page_size": 25,
"last_page": 15,
"has_more": true,
"retrievable_max_rows": 375
},
"query": {
"category_id": 24,
"manufacturer_id": 159
}
}
}What the traktorpool API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search or browse the marketplace by keyword, machine group/type, manufacturer, model, seller, seller type, condition, year, net price, hour meter, engine power, seller country, postal code + radius and listing age; every filter measured to bite against an unfiltered control. An empty call browses all ~150,000 listings. Returns the organic rows plus the paid top-offer cards the page shows (flagged), with the source's own exact total. 25/50/100 rows a page, at most 15 pages. | Price-intelligence teams call search to search or browse the marketplace by keyword, machine group/type, manufacturer, model, seller,…. | query, category_id, subcategory_id, manufacturer_id, model, ... |
| detail | One listing in full by its listing number. | Classifieds aggregators call detail to get one listing in full by its listing number.. | listing_id |
Call search from your stack
curl -X POST https://api.reefapi.com/traktorpool/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"manufacturer_id":159,"category_id":24}'import requests
r = requests.post(
"https://api.reefapi.com/traktorpool/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"manufacturer_id": 159,
"category_id": 24
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/traktorpool/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"manufacturer_id": 159,
"category_id": 24
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.traktorpool.search with {"manufacturer_id":159,"category_id":24}.Who uses this API and why
- Price a used tractor: one manufacturer, machine type 95, a year window and an hour-meter ceiling give the live comparable set, with net price, power and hours side by side.
- Compare dealer offers on a like-for-like basis: price_net is always net of VAT and vat_rate tells you which country's VAT a dealer adds, so German and Dutch offers can be compared without guessing.
- Monitor new stock: sort by newest and poll one manufacturer or machine group; badges carry the source's own "Neues Inserat" marker.
- Map a dealer's inventory: seller_id from any row lists that dealer's stock, and detail returns the dealer's business name, address, verification badge, member-since date and live listing count.
- Feed a parts search: the parts market is one machine group (category_id 23), with manufacturer filters and the same price fields.
Questions developers ask before integrating
Is the price with or without VAT?
Both, in separate fields. traktorpool prints dealer prices net of VAT by default (for example "30.000 € zzgl. 19% MwSt."), so price_net is the net figure, price_gross is the gross figure the listing page prints, and vat_rate is the rate the seller applies. The rate depends on the seller's country: 19 % for German dealers and 21 % for Dutch and Belgian dealers appeared on the same page. Some listings state no VAT at all; then vat_rate is null and the page shows one price.
How many listings can one query return?
Up to 15 pages, so 375 rows at the default page size or 1,500 at page_size 100. Deeper pages are refused by the source (pages 20, 50 and 202 were refused every time we asked), so the API rejects a page above 15 instead of failing slowly. Narrow with a manufacturer, a machine group or a keyword to stay inside that window: Fendt alone is 5,035 listings, Fendt tractors 3,409.
Why does a 25-row page return 30 listings?
Because the source places paid top offers in the grid. On the default sort a 25-row page carried 5 of them. They are real listings, so they are returned, flagged with is_top_offer, and counted in meta.top_offers. A price-sorted page returned none in our sample, and a 100-row page carried 2.
What does a listing without a price mean?
Two different things, and the API keeps them apart. An auction lot shows the word "Auktion" instead of a price: is_auction is true and price_label carries the word. A listing with no price and no auction label has price_on_request true. Across 120 search rows from four categories, between 25 and 28 rows in every 30 carried a price.
Why did a filtered search return fewer rows than the page showed?
When you filter on hours or power, the source lists the real matches and then appends listings that do not state that value at all, under a note saying they might still fit. Those are not matches, so they are removed and counted in meta.padding_rows_dropped. Measured: harvester headers with at most 10 hours had 2 real matches and 100 appended listings.
Which filters are supported?
Keyword, machine group and machine type, manufacturer, model, seller, dealer or private seller, condition, year of construction, net price, hour meter, engine power, seller country, postal code with a radius, listing age, with photos and with video, plus six sort orders and three page sizes. Every one was measured against an unfiltered control in the same run, twice, and 432 returned rows were checked against the filter they were asked for with no row outside it. Examples from 5,035 Fendt listings: 984 built 2015-2020, 587 priced 10,000-50,000 EUR net, 697 new, 565 in the Netherlands; from 2,894 Fendt tractors: 738 with at most 2,000 hours and 986 with 150-250 kW.
How fresh is the data?
As fresh as the source's own pages. The site serves its pages through a cache for up to two hours, and every response carries meta.source_cache_age_s with the age of the page you received, in seconds (we saw between 143 and 596).
How fast is it?
Over two back-to-back runs of the final code, every one of the 26 searches and 2 detail calls succeeded; search had a median of 3.3 s with the slowest three at 11.7, 12.0 and 23.8 s, detail a median of 2.4 s. A search page is about 810 KB at the source and a detail page about 440 KB.
What is the traktorpool API?
traktorpool API is a ReefAPI endpoint group for germany's farm-machinery marketplace as json: about 150,000 tractors, combines, balers, tillage and parts listings with the net price, the gross price and the seller's vat rate kept apart, plus year, hour meter, engine power and the dealer behind each one. It returns live JSON through POST requests under /traktorpool/v1.
Is the traktorpool API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. traktorpool calls use the same shared credit balance as every other ReefAPI engine.
Do I need a traktorpool login or account?
No login to traktorpool is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the traktorpool data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the traktorpool API use?
traktorpool actions currently cost 3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call traktorpool from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call traktorpool actions with the same key, credit pool and JSON envelope used by normal REST requests.