Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Landwirt.com API page →
E-commerce & Marketplaces

Landwirt.com API & Scraper

The Landwirt.com API turns the Austrian, German and Swiss farm-machinery marketplace into JSON in six actions.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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 reads either the dealer market (about 85,000 listings from roughly 1,300 dealers on 2026-10-14) or the private classified ads, with the filters the source applies itself: free text, category and sub-category, manufacturer, condition (used, demo, new, rental), year of construction, operating hours, horsepower, price band, seller country and region, sorted by date, price, year, hours or power, 6 to 100 rows a page. detail returns one listing in full: manufacturer, model and model series, year, hours, hp and kW, the gross price the site shows with the net price and VAT rate beside it, the full equipment list, every technical field the dealer typed such as tyre sizes and tread depth, every photo, the description and the dealer's address, rating and homepage. categories returns the live category tree with exact counts, manufacturers the manufacturer ids the filters take, and dealer and dealers cover the supply side. The fields are named for what they are: price is the gross number the page prints, price_net is the net, price_entered_as says which one the dealer typed, and placeholder prices like 1 euro are flagged instead of averaged. One ReefAPI key, the standard { ok, data, meta, error } envelope, no Landwirt.com account.

Reference

One price, four numbers — what a Landwirt.com listing actually publishes

Dealers on this marketplace type their price either net or gross, and the page always shows the gross. These are real listings read on 2026-10-14; the right-hand columns are what the API returns.

listingwhat the page showsprice / price_netprice_entered_as · vat_rate_pct
New Holland T6.160, 2016, 2,077 h (DE dealer)75,565 € incl. 19 % VAT75565 / 63500net · 19
Lindner 520 SA, 1978, 52 PS (AT dealer)1 €, VAT not reclaimable1 / 1, price_symbolic: true— · null (vat: not_applicable)
Case IH MX 135, 1997 (CH dealer)36,397 € incl. 8.1 % VAT36397 / 33669.75, price_converted: truegross · 8.1
Fendt 314 Vario Gen5, 2026, 5 h (AT dealer)Price on requestnull / null, price_on_request: true— · null

On 5 of 8 priced listings checked against their own page, the dealer had typed a net price and the page printed the gross. price is always that printed gross, so it matches what a buyer sees; price_net stays beside it. Swiss dealers are converted to euros by the marketplace itself, which is why their net carries odd cents.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/landwirt/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "fendt",
    "subcategory_id": 24,
    "year_min": 2015,
    "sort": "newest"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "landwirt",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 629,
    "record_count": 20,
    "bytes": 42167,
    "cache_hit": false,
    "total": 997,
    "total_is_capped": false,
    "pagination": {
      "page": 1,
      "limit": 20,
      "last_page": 50,
      "has_more": true,
      "retrievable_max": 10000
    },
    "filters_applied": {
      "query": "fendt",
      "subcategory_id": 24,
      "year": "2015,2026",
      "sort": "newest"
    },
    "listing_type": "dealer",
    "warnings": [],
    "charged_credits": 2,
    "version": "1.0.0",
    "request_id": "cf6ce11730d740f1",
    "queue_ms": 1.7,
    "fetched_at": "2026-10-14T18:57:24.779Z"
  },
  "data": {
    "listings": [
      {
        "listing_id": "7658723",
        "listing_type": "dealer",
        "url": "https://www.landwirt.com/detail/fendt-314-vario-gen5-profi-setting2-7658723",
        "title": "Fendt 314 Vario Gen5 Profi Setting2",
        "manufacturer": "Fendt",
        "manufacturer_id": 385,
        "model": null,
        "group": "Landtechnik",
        "group_id": 1,
        "category": "Traktoren",
        "category_id": 1,
        "subcategory": "Standard Traktoren",
        "subcategory_id": 24,
        "condition": "new",
        "condition_label": "Neumaschinen",
        "year": 2026,
        "operating_hours": 5,
        "operating_hours_unit": "h",
        "power_hp": 142,
        "power_kw": 104.44,
        "mileage": null,
        "mileage_unit": null,
        "price": null,
        "currency": null,
        "price_net": null,
        "price_gross": null,
        "price_entered_as": null,
        "vat": null,
        "vat_text": null,
        "vat_rate_pct": null,
        "price_on_request": true,
        "price_previous": null,
        "discount_pct": null,
        "price_symbolic": false,
        "price_converted": false,
        "reserved": false,
        "auction": false,
        "seller_id": "3318",
        "seller_name": "BayWa Vorarlberg HandelsGmbH BayWa Technik",
        "seller_is_dealer": true,
        "location_postcode": "6820",
        "location_city": "Frastanz",
        "location_country_code": "AT",
        "location_lat": 47.210452,
        "location_lng": 9.6575659,
        "image": "https://static.landwirt.com/3318-5941d958b83b8dc49d588385a386c0eb-7658723-0vb.jpg",
        "image_count": 18,
        "has_video": false,
        "description_preview": "Antrieb: Allrad, Getriebeart Landmaschine: Stufenloses Getriebe, Plattform: Kabine, Zapfwellendrehzahl: 540/540E/1000, Höchstgeschwindigkeit in km/h: 40 km/h, Aufladung:",
        "created_at": null
      },
      {
        "listing_id": "7658622",
        "listing_type": "dealer",
        "url": "https://www.landwirt.com/detail/fendt-718-vario-s4-7658622",
        "title": "Fendt 718 VARIO S4",
        "manufacturer": "Fendt",
        "manufacturer_id": 385,
        "model": null,
        "group": "Landtechnik",
        "group_id": 1,
        "category": "Traktoren",
        "category_id": 1,
        "subcategory": "Standard Traktoren",
        "subcategory_id": 24,
        "condition": "used",
        "condition_label": "Gebrauchtmaschinen",
        "year": 2021,
        "operating_hours": 4966,
        "operating_hours_unit": "h",
        "power_hp": 181,
        "power_kw": 133.13,
        "mileage": null,
        "mileage_unit": null,
        "price": 130781,
        "currency": "EUR",
        "price_net": 109900,
        "price_gross": 130781,
        "price_entered_as": "net",
        "vat": "included",
        "vat_text": "inkl. 19% MwSt",
        "vat_rate_pct": 19,
        "price_on_request": false,
        "price_previous": null,
        "discount_pct": null,
        "price_symbolic": false,
        "price_converted": false,
        "reserved": false,
        "auction": false,
        "seller_id": "6540",
        "seller_name": "AGRAVIS Technik Lenne-Lippe GmbH",
        "seller_is_dealer": true,
        "location_postcode": "59872",
        "location_city": "Meschede-Remblinghausen",
        "location_country_code": "DE",
        "location_lat": 51.30668,
        "location_lng": 8.30585,
        "image": "https://static.landwirt.com/platzhalter.png",
        "image_count": 0,
        "has_video": false,
        "description_preview": "Klimaanlage, Fronthydraulik 718 VARIO S4 (0010) Fendt Schlepper (0020) T740 Fendt 718 Vario Grundschlepper (0030) C332 ProfiPlus Version (0040) M038 Kraftstoffvorfilt",
        "created_at": "2026-10-14 12:11:20"
      },
      {
        "listing_id": "7655517",
        "listing_type": "dealer",
        "url": "https://www.landwirt.com/detail/fendt-826-vario-s4-7655517",
        "title": "Fendt 826 Vario S4",
        "manufacturer": "Fendt",
        "manufacturer_id": 385,
        "model": null,
        "group": "Landtechnik",
        "group_id": 1,
        "category": "Traktoren",
        "category_id": 1,
        "subcategory": "Standard Traktoren",
        "subcategory_id": 24,
        "condition": "used",
        "condition_label": "Gebrauchtmaschinen",
        "year": 2019,
        "operating_hours": 4805,
        "operating_hours_unit": "h",
        "power_hp": 260,
        "power_kw": 191.23,
        "mileage": null,
        "mileage_unit": null,
        "price": null,
        "currency": null,
        "price_net": null,
        "price_gross": null,
        "price_entered_as": null,
        "vat": null,
        "vat_text": null,
        "vat_rate_pct": null,
        "price_on_request": true,
        "price_previous": null,
        "discount_pct": null,
        "price_symbolic": false,
        "price_converted": false,
        "reserved": false,
        "auction": false,
        "seller_id": "5479",
        "seller_name": "ZG Raiffeisen Technik GmbH - Gebrauchtmaschinenzentrum",
        "seller_is_dealer": true,
        "location_postcode": "77815",
        "location_city": "Bühl",
        "location_country_code": "DE",
        "location_lat": 48.7197553,
        "location_lng": 8.1194207,
        "image": "https://static.landwirt.com/5479-205a5f821a900b9174ae1190a98d52d5-7655517-0vb.jpg",
        "image_count": 22,
        "has_video": false,
        "description_preview": "Frontzapfwelle, gefederte Vorderachse, Zapfwellendrehzahl: 540/540E/1000/1000E Reifendruckregelanlage - Abgassystem: SCR / AdBlue - automatische Anhängekupplung - hydr",
        "created_at": "2026-10-14 06:08:49"
      }
    ]
  }
}
Actions

What the Landwirt.com API does

ActionDescriptionConcrete use caseKey params
searchSearch the dealer market or the private classifieds with the filters the source applies natively: free text, category, sub-category, manufacturer, condition, year of construction, operating hours, horsepower, price band, seller country and region. 1-100 rows a page. 🔴 The source's total stops at 10,000 (`total_is_capped`) and it serves at most 10,000 rows per query; exact per-category counts come from `categories`.Pricing teams call search to search the dealer market or the private classifieds with the filters the source applies natively.listing_type, query, group_id, category_id, subcategory_id, ...
detailOne listing in full by its id: manufacturer, model and series, year, operating hours, hp and kW, price net and gross with the VAT rate and the previous price, the full equipment list grouped the way the source groups it, every technical field the dealer typed (tyres, tread depth, spool valves …), all photos, the description, the location, and the seller block (dealer address, homepage, rating, contact person, phone as the source masks it). Private ads return the seller's own price in the seller's own currency next to the source's EUR value.Marketplace operators call detail to get one listing in full by its id.listing_id, listing_type, language
categoriesThe live category tree (group → category → sub-category) with exact listing counts for the dealer market or the private index — these counts are NOT capped at 10,000 like a search total — plus the condition split and the countries with their regions and counts. Ids feed `search`'s category_id / subcategory_id / group_id / region.Catalog enrichment teams call categories to get the live category tree (group → category → sub-category) with exact listing counts for the de….listing_type, query, country, language
manufacturersManufacturers with live listing counts, optionally inside one category or sub-category — the ids `search` takes as manufacturer_id. 🔴 The source lists at most the 69 biggest manufacturers for a scope (`meta.truncated`); narrow by category to reach the long tail.Retail analysts call manufacturers to get manufacturers with live listing counts, optionally inside one category or sub-category.listing_type, category_id, subcategory_id, query, country, ...
dealerOne dealer's profile: address, region, country, coordinates, homepage, phone as the source masks it, year on Landwirt.com, listings online, rating and the reviews the page shows, opening hours, contact persons, other branches and awards.Pricing teams call dealer to get one dealer's profile.dealer_id, language
dealersThe dealer directory, 1-100 dealers a page, optionally by country or by part of the name, with address, coordinates and listings online.Marketplace operators call dealers to get the dealer directory, 1-100 dealers a page, optionally by country or by part of the name, wit….country, query, page, limit, language
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/landwirt/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"fendt","subcategory_id":24,"year_min":2015,"sort":"newest"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.landwirt.search with {"query":"fendt","subcategory_id":24,"year_min":2015,"sort":"newest"}.
Use cases

Who uses this API and why

  • Price a used tractor: narrow to a sub-category and manufacturer, a year window and an hours band, drop price_symbolic rows, and compare gross prices that all mean the same thing.
  • Watch new stock: sort by newest inside a category and country and poll — every row carries the dealer, the town and coordinates.
  • Source across borders: the same filters over Austrian, German, Swiss and Italian dealers, with the VAT rate on every row so net and gross never get mixed.
  • Build a filter UI from live data: categories returns the group, category and sub-category tree with exact counts, manufacturers the ids, and both are what the search filters take.
  • Map the dealer network: dealers lists dealers by country with address, coordinates and listings online, and dealer adds their rating, reviews, contacts and other branches.
FAQ

Questions developers ask before integrating

Is the price net or gross?

price is the gross — the number the listing page prints as its headline and in its structured data — on every row, whatever the dealer typed. price_net is the net, price_gross repeats the gross, vat_rate_pct is the rate (19 for Germany, 20 for Austria, 8.1 for Switzerland in the rows measured) and price_entered_as says whether the dealer typed net or gross. Checked against the listing's own page on 12 listings across seven categories and both indexes: 48 of 48 comparisons agreed.

Why do some machines cost 1 euro?

Because the dealer typed 1 as a stand-in for 'ask us', and the marketplace prints it as 1 €. These listings sort first when you order by price: 8 of the first 100 tractors by ascending price were under 10 euros. They are returned as published with price_symbolic: true, so you can drop them from an average without losing the listing. Real 'price on request' listings come back with price null and price_on_request: true.

Does a price filter include price-on-request listings?

No. The marketplace stores 'price on request' as 0, so a price range starting at 0 would quietly mix every one of them in — for tractors, a 0 to 50,000 range is 6,058 listings and 1 to 50,000 is 3,762. A price filter here always starts at 1. Hours and horsepower filters work the same way: they return only listings that state hours or horsepower. One thing to know: the marketplace compares the price the way the dealer typed it, so a dealer who typed a net price can appear slightly above your price_max in gross terms; every price-filtered call says so in meta.warnings.

How many results can one query return?

Up to 10,000 rows, 6 to 100 per page. The marketplace's own total also stops at 10,000 — an unfiltered tractor search says 10,000 while the category tree says 10,862 — so search marks that with total_is_capped and categories gives the exact per-category counts. A call that would page past 10,000 rows is refused with a clear message rather than returning nothing.

What is the difference between dealer and private listings?

listing_type=dealer reads the machinery market of commercial dealers, with a condition (used, demo, new or rental), net and gross price and a full dealer profile. listing_type=private reads private classified ads, which carry the seller's own price and currency, a price option such as 'Preis auf Anfrage', and the date the ad went up. The private index also holds livestock, feed and jobs, so pass group_id=1 to keep to agricultural machinery. detail takes the listing_id and listing_type from any search row as they are.

Which countries are covered?

Mostly Austria and Germany, then Switzerland, Italy, Slovenia and a long tail across Europe; the directory lists dealers in 24 countries. Filter with country (ISO code such as AT, DE or CH) and region by its own name (Bayern, Oberösterreich, Bern). categories lists the countries and their regions with live counts for any query.

Are Swiss prices in francs?

The marketplace shows Swiss dealer prices in euros, converted by itself, and does not offer the original franc figure. Those rows carry price_converted: true. The search index and the listing page can hold slightly different conversions — on six Swiss listings the search row was exactly 1 euro below the detail record — so use detail when you need the figure to the euro. Private ads do carry the seller's own currency, with price_eur beside it.

How fast is it?

One upstream request per call — two only for a private ad looked up without its listing_type. Over two identical runs of 27 calls across all six actions, every call returned what it should, with a median of 1.2 seconds and the slowest single call 2.4 seconds.

What is the Landwirt.com API?

Landwirt.com API is a ReefAPI endpoint group for the austrian, german and swiss farm-machinery market as json: ~85,000 dealer listings and ~50,000 private ads with manufacturer, model, year, operating hours, horsepower, the gross and net price with its vat rate, and the dealer behind every machine. It returns live JSON through POST requests under /landwirt/v1.

Is the Landwirt.com API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Landwirt.com calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Landwirt.com login or account?

No login to Landwirt.com 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 Landwirt.com 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 Landwirt.com API use?

Landwirt.com actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Landwirt.com from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call landwirt actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / landwirt

Landwirt.com

The Austrian, German and Swiss farm-machinery market as JSON: ~85,000 dealer listings and ~50,000 private ads with manufacturer, model, year, operating hours, horsepower, the gross and net price with its VAT rate, and the dealer behind every machine.

base /landwirt/v16 endpoints
post/landwirt/v1/detail1 credit

One listing in full by its id: manufacturer, model and series, year, operating hours, hp and kW, price net and gross with the VAT rate and the previous price, the full equipment list grouped the way the source groups it, every technical field the dealer typed (tyres, tread depth, spool valves …), all photos, the description, the location, and the seller block (dealer address, homepage, rating, contact person, phone as the source masks it). Private ads return the seller's own price in the seller's own currency next to the source's EUR value.

ParameterAllowed / rangeDescription
listing_idrequired—The `listing_id` of a search row, passed as is.
listing_typeoptionaldealer · privateThe `listing_type` of the search row. If omitted, the dealer market is tried first and then the private index (one extra request when the id is a private ad).
language = deoptionalde · en · fr · itLanguage of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.
Try in playground →
post/landwirt/v1/categories2 credits

The live category tree (group → category → sub-category) with exact listing counts for the dealer market or the private index — these counts are NOT capped at 10,000 like a search total — plus the condition split and the countries with their regions and counts. Ids feed `search`'s category_id / subcategory_id / group_id / region.

ParameterAllowed / rangeDescription
listing_type = dealeroptionaldealer · privateWhich side of the marketplace to read. 'dealer' = the machinery market of ~1,300 commercial dealers (used, demo, new and rental machines; the bulk of the machinery). 'private' = private classified ads; that index also carries livestock, feed and jobs, so pass group_id=1 for farm machinery only.
queryoptional—Free text as typed into the site's search box: a manufacturer, a model, a machine type ('Mähdrescher', 'Rundballenpresse') or any word in the listing.
countryoptional—Seller country, ISO-3166 two-letter code (AT, DE, CH, IT, SI, …). A code with no listings is an honest empty answer (total 0), never the whole catalogue.
language = deoptionalde · en · fr · itLanguage of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.
Try in playground →
post/landwirt/v1/manufacturers2 credits

Manufacturers with live listing counts, optionally inside one category or sub-category — the ids `search` takes as manufacturer_id. 🔴 The source lists at most the 69 biggest manufacturers for a scope (`meta.truncated`); narrow by category to reach the long tail.

ParameterAllowed / rangeDescription
listing_type = dealeroptionaldealer · privateWhich side of the marketplace to read. 'dealer' = the machinery market of ~1,300 commercial dealers (used, demo, new and rental machines; the bulk of the machinery). 'private' = private classified ads; that index also carries livestock, feed and jobs, so pass group_id=1 for farm machinery only.
category_idoptional1–Category id from the `categories` action (e.g. 1 = Traktoren / tractors).
subcategory_idoptional1–Sub-category id from the `categories` action (e.g. 24 = Standard Traktoren).
queryoptional—Free text as typed into the site's search box: a manufacturer, a model, a machine type ('Mähdrescher', 'Rundballenpresse') or any word in the listing.
countryoptional—Seller country, ISO-3166 two-letter code (AT, DE, CH, IT, SI, …). A code with no listings is an honest empty answer (total 0), never the whole catalogue.
language = deoptionalde · en · fr · itLanguage of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.
Try in playground →
post/landwirt/v1/dealer1 credit

One dealer's profile: address, region, country, coordinates, homepage, phone as the source masks it, year on Landwirt.com, listings online, rating and the reviews the page shows, opening hours, contact persons, other branches and awards.

ParameterAllowed / rangeDescription
dealer_idrequired—Dealer id: `seller_id` of a dealer search row, `seller.dealer_id` of a detail, or `dealer_id` of `dealers`.
language = deoptionalde · en · fr · itLanguage of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.
Try in playground →
post/landwirt/v1/dealers1 credit

The dealer directory, 1-100 dealers a page, optionally by country or by part of the name, with address, coordinates and listings online.

ParameterAllowed / rangeDescription
countryoptionalAT · BA · BE · BG · CH · CZ · DE · DK · EE · FR · GB · HR · HU · IT · LV · NL · NO · PL · RO · RS · SE · SI · SK · UADealer country, ISO-3166 two-letter code (the countries the directory itself lists).
queryoptional—Part of the dealer's name.
page = 1optional1–500Page number. The source serves at most 10,000 rows per query (page × limit ≤ 10,000; page 501 at limit 20 is refused), so narrow instead of paging deeper.
limit = 20optional6–100Rows per page, 6-100 (the source refuses fewer than 6).
language = deoptionalde · en · fr · itLanguage of the category, condition and VAT labels the source returns. The listing itself (title, description) is the seller's own text in the seller's language.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.