# Autoline, Machineryline & Agroline Scraper (`normdata/autoline-scraper`) Actor

Scrape Autoline, Machineryline and Agroline: trucks, trailers, vans, construction and farm machinery from 850k+ listings. Price, year, mileage, hours, power, specs, location, dealer. Every filter. Seller phones, WhatsApp, address and full specs as an add-on.

- **URL**: https://apify.com/normdata/autoline-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** Lead generation, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 listing saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🚛 Autoline, Machineryline & Agroline Scraper

Extract listings from **Autoline**, **Machineryline** and **Agroline**, the LineMedia marketplaces with 850k+ used and new trucks, trailers, vans, buses, construction machinery and farm equipment from dealers across Europe and the world. Search by category, brand, model and country with every filter the sites have, or paste any search link. You get one clean table with typed fields.

Each listing comes with:

- Title, **brand**, **model**, category, site, offer type (sale, rent, auction), **condition**.
- **Price** with currency, **price in EUR**, price on request flag.
- **Year**, **mileage (km)**, **running hours**, **power (HP)**, fuel, **Euro emission class**, axle configuration.
- Every attribute shown on the search card.
- **Country**, city, **dealer name**, verified dealer, years on the site.
- Main photo, photo count, listing link.
- Add-on: **seller contacts and full specs**. **Phone numbers**, **WhatsApp**, **Viber**, contact person, spoken languages, opening hours, **dealer address with latitude and longitude**, dealer page, dealer's ad count, **rating and reviews**, years on the market, gross price (with VAT), first registration, gearbox, **VIN**, **every spec on the listing**, full description, every photo and the date placed.

### 🎯 Who uses it?

#### 🏭 Dealers and traders

See what competitors stock and at what price, by brand, model, year and mileage. Find stock to buy in other countries.

#### 📞 Sales teams and service providers

Build lead lists of truck, machinery and farm equipment dealers with phones, WhatsApp, address and languages spoken: finance, insurance, transport, logistics, spare parts, software.

#### 📈 Analysts, valuers and leasing companies

Track asking prices of used equipment by model, year and hours. Value fleets and residuals with real market data.

#### 🧰 Data teams

Feed a price index, a marketplace or an alert system with typed listings on a schedule.

### ✨ What it does

- **Three sites, one run:**
  - Autoline (trucks, trailers, vans, buses), Machineryline (construction, mining, warehouse, industrial), Agroline (tractors, combines, farm machinery).
  - Categories by name ("truck tractors", "excavators", "combines", "semi-trailers"), searched on every site that has them. Common names work too ("lorries", "diggers", "tippers", "combine harvesters").
- **Brands and models by name:** "Volvo", "Caterpillar", "John Deere", or models such as "DAF XF 106", "Fendt Vario 724", "John Deere 6155R".
- **Countries or regions:** any country by name or two-letter code, or Europe, America, Asia.
- **Or paste links:** any Autoline, Machineryline or Agroline search page in any language. Every filter in the link is kept.
- **Every filter the sites have:**
  - Condition (used, new, demonstration, remanufactured, with defect, crashed, for parts), offer type (sale, rent, auction, leasing, from manufacturer, credit, installments, trade in, exchange), availability (in stock or on request).
  - Price (EUR), year, mileage, running hours, power (HP) ranges.
  - Euro class, fuel, gearbox, drive, colour. Several values per filter.
  - Sort: price, year or mileage, up or down.
- **Extra filter:** keywords in the title, brand, model or attributes.
- **New listings only.** For scheduled runs: saves only listings the same search has not saved before.

### 🏆 Why this scraper

- **Search by name, not only by link.** Type categories, brands, models and countries. No need to build search links by hand.
- **Seller contacts.** The add-on opens each listing for phones, WhatsApp, Viber, contact person, address and coordinates.
- **Full specs.** Every spec on the listing page (gross weight, suspension, retarder, cab, tyres, hydraulics...) as label: value, plus VIN, gearbox and the full description.
- **Fast.** 1,000 listings in about 15 seconds. With seller contacts and full specs, about 450 listings per minute.
- **No page cap.** Leave the maximum empty to get every match.
- **Typed, ready to analyse.** Prices, year, mileage, hours, power and coordinates are numbers. Dates are ISO. No proxy needed.

### ⚖️ How it compares

Based on each Actor's public README and input options (October 2026).

| Capability | This actor | sn41lz |
|---|:--:|:--:|
| Autoline, Machineryline, Agroline | **yes** | yes |
| Paste search links | **yes** | yes |
| Search by category, brand, model, country name | **yes** | no |
| Condition, offer type, price, year, mileage, hours, power filters | **yes** | only inside a link |
| Several values per filter in one run | **yes** | no |
| Keywords filter | **yes** | no |
| Page limit | **none** | 400 pages per link |
| Opens listing pages | **add-on** | no |
| Phones, WhatsApp, Viber, contact person | **add-on** | no |
| Dealer address, coordinates, rating, reviews | **add-on** | no |
| Full specs, VIN, description, gross price | **add-on** | no |
| New listings only (monitoring) | **yes** | no |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `id`, `autolineRef`, `url` | Listing ID, the sites' own reference (e.g. "RW52717") and the listing page. |
| `title`, `brand`, `model`, `category` | As the site shows them. |
| `site`, `offerType` | Autoline, Machineryline or Agroline; sale, rent or auction. |
| `condition` | used, new, demonstration and so on. |
| `price`, `currency`, `priceEur`, `priceOnRequest` | Asking price in the seller's currency and in EUR. |
| `grossPrice` | Add-on: price with VAT, when the seller gives it. |
| `year`, `firstRegistration` | Year of manufacture; first registration (add-on). |
| `mileageKm`, `runningHours`, `powerHp` | Numbers. |
| `fuel`, `euroClass`, `gearbox`, `axleConfiguration`, `vin` | `gearbox` and `vin` come with the add-on. |
| `attributes` | Every attribute on the search card, as label: value. |
| `specs` | Add-on: every spec on the listing page, as label: value. Ticked features are `true`. |
| `description` | Add-on: the seller's full text. |
| `country`, `city` | Where the vehicle or machine is. |
| `sellerType`, `sellerName`, `verifiedSeller`, `yearsOnSite` | Dealer or private seller. |
| `yearsOnMarket`, `sellerAdsCount`, `sellerRating`, `sellerReviews`, `sellerUrl` | Add-on: dealer profile. |
| `contactPerson`, `phones`, `whatsapp`, `viber`, `languages`, `workingHours` | Add-on: how to reach the seller. |
| `sellerAddress`, `latitude`, `longitude` | Add-on: dealer address and map point. |
| `placedOn` | Add-on: date the listing was placed. |
| `image`, `images`, `imageCount` | Main photo; every photo with the add-on. |
| `searchedFor` | Which of your searches or links found it. |
| `scrapedAt` | When the row was collected (UTC). |
| `error` | Why the details are missing, when a listing page could not be loaded. |

#### Example row (trimmed, with seller contacts and full specs)

```json
{
  "id": "26100620490206528500",
  "autolineRef": "RW52717",
  "title": "Mercedes-Benz Actros 1848 LS ACC AUT KlimaA LM Luft Standh",
  "brand": "Mercedes-Benz",
  "category": "Truck tractor",
  "site": "Autoline",
  "offerType": "sale",
  "condition": "new",
  "price": 99900,
  "currency": "EUR",
  "priceEur": 99900,
  "grossPrice": 118881,
  "year": 2026,
  "mileageKm": 1700,
  "fuel": "diesel",
  "gearbox": "automatic",
  "axleConfiguration": "4x2",
  "specs": { "Gross weight": "19,000 kg", "Suspension": "air/air", "Retarder": true, "Colour": "white" },
  "country": "Germany",
  "city": "Zimmern o.R.",
  "sellerType": "dealer",
  "sellerName": "Riess GmbH & Co. KG Mercedes-Benz und DAF Vertragspartner",
  "verifiedSeller": true,
  "sellerAdsCount": 161,
  "sellerRating": 4.5,
  "sellerReviews": 212,
  "contactPerson": "Stefan Schirmer",
  "phones": ["+491607191060", "+497411743030"],
  "languages": ["English", "Polish", "German"],
  "workingHours": ["Mon - Fri 07:45 - 18:00", "Sat 08:00 - 14:00"],
  "sellerAddress": "Germany, Baden-Wurttemberg, 78658 , Zimmern o.R., Albring 19",
  "latitude": 48.168262,
  "longitude": 8.569562,
  "placedOn": "2026-10-06",
  "imageCount": 16,
  "url": "https://autoline.info/-/sale/truck-tractors/Mercedes-Benz/Actros-1848-LS-ACC-AUT-KlimaA-LM-Luft-Standh--26100620490206528500",
  "searchedFor": "truck tractors · Germany",
  "scrapedAt": "2026-10-06T18:32:57.609Z",
  "error": null
}
```

### 💡 Use cases

#### 🚚 Euro 6 truck tractors in Germany and Poland, newest first

```json
{ "categories": ["truck tractors"], "locations": ["Germany", "Poland"], "euroClasses": ["euro6"], "sortBy": "yearNew", "maxItems": null }
```

#### 🏗️ Used Caterpillar and Komatsu excavators under 5,000 hours

```json
{ "categories": ["excavators"], "brands": ["Caterpillar", "Komatsu"], "condition": ["used"], "maxRunningHours": 5000, "maxItems": null }
```

#### 🚜 Fendt Vario 724 tractors with prices

```json
{ "models": ["Fendt Vario 724"], "minPrice": 1, "sortBy": "priceLow", "maxItems": null }
```

#### 📞 Lead list: semi-trailer dealers in Europe with phones and WhatsApp

```json
{ "categories": ["semi-trailers"], "locations": ["Europe"], "includeDetails": true, "maxItems": 5000 }
```

#### 🔔 New combines every morning

```json
{ "categories": ["combines"], "onlyNew": true, "maxItems": null }
```

#### 🔗 A search you already made on the site, narrowed to used Euro 6 from 2019

```json
{ "urls": [{ "url": "https://autoline.de/-/Sattelzugmaschinen/DAF--c42tm2525?sort=price-desc" }], "condition": ["used"], "euroClasses": ["euro6"], "minYear": 2019, "maxItems": null }
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum listings** | Always first: caps the whole run, shared across your searches. Empty means no limit. |
| **What** | Categories, sites, brands, models, search links. |
| **Where** | Countries or regions. |
| **Condition and deal** | Condition, offer type, availability. |
| **Price, year and use** | Price, year, mileage, running hours ranges. |
| **Engine and equipment** | Power, Euro class, fuel, gearbox, drive, colour, keywords. |
| **Sort** | Price, year or mileage. |
| **Add-ons** | Seller contacts and full specs. |
| **Monitoring** | New listings only, with an optional monitor name. |

The sites take one value per filter, so several categories, brands, countries or filter values run as one search per combination, with duplicates removed.

#### 🔗 Links and filters together

| You fill in | What runs |
| --- | --- |
| Only categories, brands, models or countries | A search for each, with every filter you set. |
| Only links | Each link exactly as it is on the site. |
| Links + filters (condition, price, year, mileage, hours, power, Euro class, fuel, gearbox, drive, colour, availability, keywords) | Each link, narrowed by your filters. A price or year range replaces the same range in the link. A filter the link already has in its address (for example "Euro-6" in the path) stays as the link has it. |
| Links + categories, brands, models or countries | The links and the name searches both run, each with your filters. A listing found by both is saved once. |

Sort applies to links that have no sort of their own. The maximum is shared across all links and searches.

### 💰 Pricing

Pay-per-event: a one-time **$0.005** when the run starts, plus a price per listing saved to your dataset. The price depends on your Apify plan tier:

| Your Apify plan | Price per listing |
| --- | --- |
| Free | $0.004 |
| Bronze | $0.0035 |
| Silver | $0.003 |
| Gold / Platinum / Diamond | $0.0025 |

Approximate total cost:

| Listings collected | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| 100 | $0.40 | $0.35 | $0.30 | $0.25 |
| 1,000 | $4.00 | $3.50 | $3.00 | $2.50 |
| 10,000 | $40.00 | $35.00 | $30.00 | $25.00 |

**Seller contacts and full specs add-on.** Only when the add-on is on, each listing saved with its details costs a little extra:

| Your Apify plan | Add-on per listing |
| --- | --- |
| Free | $0.008 |
| Bronze | $0.007 |
| Silver | $0.006 |
| Gold / Platinum / Diamond | $0.005 |

Leave it off and you pay only the base price; its fields are then left out of the rows. Listings dropped by your filters are not charged. New Apify accounts start with $5 in free credit. On the Free plan a run saves up to 10 listings.

**Speed:** 1,000 listings in about 15 seconds; with seller contacts and full specs, about 450 listings per minute.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Autoline, Machineryline & Agroline Scraper.
3. Type a category (or keep "truck tractors"), pick your filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

You can also:

- Run it programmatically through the Apify API (`run-sync-get-dataset-items`) or the ApifyClient for JavaScript and Python.
- Schedule it with Apify's built-in Scheduler, with **New listings only** on, to catch new listings every day.

### 🤖 Use with AI agents (MCP)

Give an AI agent live access to truck, machinery and farm equipment listings through the Model Context Protocol:

```
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/autoline-scraper"
```

Then prompt it in plain language, for example "what does a 2019 Volvo FH 500 cost in Poland right now?".

### 🔧 Troubleshooting

**A category, brand or model was ignored.**
The log says why. Use the names the sites use ("truck tractors", "excavators", "tractors") and write models as brand plus model ("DAF XF 106").

**Some listings have WhatsApp or Viber but no phone.**
Some dealers hide their phone numbers on the site and show only WhatsApp or Viber. Those are saved in `whatsapp` and `viber`.

**The default order differs from what I see in my browser.**
The sites' default order favours sellers near the visitor. Pick a sort (price, year or mileage) for a stable order.

**Some rows have an `error` and no details.**
The listing was sold or removed between the search and the page visit. The search fields are still there and the add-on is not charged for it.

**A scheduled "New listings only" run saved nothing.**
Nothing new matched since the last run. Changing searches or filters starts a fresh memory; set a **Monitor name** to keep it.

### ❓ FAQ

| Question | Answer |
| --- | --- |
| Do I need an account on the sites? | No. Only public listing data is read. |
| Is there a result limit? | No. Leave the maximum empty to get every match. |
| Which currency are prices in? | `price` in the seller's currency, `priceEur` in EUR. |
| Do I get seller phone numbers? | Yes, with the add-on, when the seller shows them. |
| Does it need a proxy? | No. |
| Can I track new listings? | Yes. Turn on **New listings only** and schedule the run. |

### 🛡️ Limits & responsible use

This Actor reads only public listing data shown on Autoline, Machineryline and Agroline. It never signs in and never contacts sellers. Use the data in line with the sites' terms and data protection law, including rules on contacting businesses.

### 📧 Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

### 🧪 Local development

```powershell
bun install
bun run typecheck
bun test/qa.mjs
apify run
```

Local results are stored in `storage/datasets/default`.

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many listings in total. Leave empty for no limit (every matching listing). The Apify Free plan is always capped at 10.

## `categories` (type: `array`):

One per line, in English as on the site, e.g. "truck tractors", "semi-trailers", "vans", "dump trucks", "excavators", "wheel loaders", "cranes", "tractors", "combines", "balers". Main categories and subcategories both work. Each category is searched on the site that has it. Leave empty for every category.

## `sites` (type: `array`):

Which marketplaces to search. Autoline: trucks, trailers, vans, buses, cars. Machineryline: construction, mining, material handling and industrial machinery. Agroline: tractors, harvesters and farm machinery. Leave empty for all three (categories are found on the site that has them).

## `brands` (type: `array`):

One per line, e.g. "DAF", "Volvo", "Mercedes-Benz", "Scania", "Caterpillar", "Komatsu", "John Deere", "Claas". Each brand is a separate search. Leave empty for all brands.

## `models` (type: `array`):

Brand and model on one line, e.g. "DAF XF", "Scania R 450", "Caterpillar 320", "John Deere 6155R". A model replaces its brand in the Brands list.

## `urls` (type: `array`):

Search pages from Autoline, Machineryline or Agroline in any language (autoline.info, autoline.de, …), e.g. https://autoline.info/-/truck-tractors/DAF/Germany--c42tm2525cntDE?ym=2018%3A. Every filter in the link is kept. The filters below (condition, price, year, mileage, fuel...) narrow the link further; a filter the link already sets in its address wins. Categories, brands, models and countries run as separate searches next to the link.

## `locations` (type: `array`):

One per line: a country name or two-letter code ("Germany", "NL", "Poland", "USA") or a region ("Europe", "America", "Asia"). Each is a separate search. Leave empty for the whole world.

## `condition` (type: `array`):

Keep only ANY of these. Each value is a separate search. Leave empty for all.

## `adType` (type: `array`):

Sale, rent, auction, leasing and other offer types. Each value is a separate search. Leave empty for all.

## `availability` (type: `string`):

In stock now, or on request (ordered from the maker).

## `minPrice` (type: `integer`):

At least this price, in euros (the site converts other currencies).

## `maxPrice` (type: `integer`):

At most this price, in euros.

## `minYear` (type: `integer`):

Made in this year or later, e.g. 2018.

## `maxYear` (type: `integer`):

Made in this year or earlier.

## `minMileage` (type: `integer`):

At least this many kilometres.

## `maxMileage` (type: `integer`):

At most this many kilometres, e.g. 500000.

## `minRunningHours` (type: `integer`):

At least this many engine hours (machinery and tractors).

## `maxRunningHours` (type: `integer`):

At most this many engine hours, e.g. 5000.

## `minPowerHp` (type: `integer`):

At least this much engine power, in horsepower.

## `maxPowerHp` (type: `integer`):

At most this much engine power, in horsepower.

## `euroClasses` (type: `array`):

Keep only ANY of these Euro classes. Each value is a separate search.

## `fuels` (type: `array`):

Keep only ANY of these. Each value is a separate search.

## `gearboxes` (type: `array`):

Keep only ANY of these. Each value is a separate search.

## `driveTypes` (type: `array`):

Keep only ANY of these. Each value is a separate search.

## `colors` (type: `array`):

Keep only ANY of these. Each value is a separate search.

## `keywords` (type: `array`):

Keep only listings whose title, category or features contain ANY of these words, e.g. "retarder", "ADR", "4x4", "low deck". Leave empty for all.

## `sortBy` (type: `string`):

Order of the results. Matters most when you set a Maximum.

## `includeDetails` (type: `boolean`):

Open each listing page for the seller's phone numbers, WhatsApp and Viber, contact person, spoken languages, opening hours, full address with coordinates, dealer page, stock size, rating and reviews, plus the full spec sheet (every feature), VIN, gross price, first registration, gearbox, the seller's description, placed-on date and every photo. Charged as an add-on per listing. Slower, since each listing is one more page.

## `onlyNew` (type: `boolean`):

For scheduled runs: save only listings this same search has not saved before. The first run saves everything; later runs save just what is new. Kept per search (categories, brands, links and filters).

## `monitorName` (type: `string`):

Optional. Give "New listings only" a fixed name to keep its memory even after you change the filters.

## Actor input object example

```json
{
  "maxItems": 10,
  "categories": [
    "truck tractors"
  ],
  "includeDetails": false,
  "onlyNew": false
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "maxItems": 10,
    "categories": [
        "truck tractors"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/autoline-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "maxItems": 10,
    "categories": ["truck tractors"],
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/autoline-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "categories": [
    "truck tractors"
  ]
}' |
apify call normdata/autoline-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/autoline-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DIUkzVvfVqzRMN1kE/builds/qzyKuecT3zZVS3nX8/openapi.json
