# Machineryline Scraper — Heavy Equipment & Dealer Contacts (`crawloop/machineryline-scraper`) Actor

Scrape Machineryline, Autoline, and Agroline listings: specs, prices, company phones, WhatsApp when published, website, address, and map coordinates. Listings or details mode. Lightweight HTTP scraper on Apify.

- **URL**: https://apify.com/crawloop/machineryline-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Automation, Integrations, Developer tools
- **Features:** Limited permissions
- **Stats:** 8 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 scraped machinery full details

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Machineryline Scraper — Heavy Equipment & Dealer Contacts

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Machineryline, Autoline, Agroline, or any of their subsidiaries or its affiliates. Data is read from publicly accessible pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

> **Contact-data controls:** Phone/WhatsApp/fax fields are omitted from the dataset by default. Enable `includePhones` only for numbers already published on public pages and only when you have a lawful basis. Any contact-field examples below assume that explicit opt-in; otherwise those fields are absent.

> **Crawloop Used Machinery Marketplace Suite** — Structured extraction for heavy machinery, commercial vehicles, and agricultural equipment. Built for market research, inventory monitoring, and pricing workflows.

| Exapro | Resale.info | Machineseeker | Machineryline | Troostwijk | Surplex |
| :--- | :--- | :--- | :--- | :--- | :--- |
| [Exapro Scraper](https://apify.com/crawloop/exapro-scraper) | [Resale.info Scraper](https://apify.com/crawloop/resale-scraper) | [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper) | Machineryline Scraper ◄── you are here | [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper) | [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) |

**Farm classifieds**

| TractorHouse | Machineryline | Nettikone |
| :--- | :--- | :--- |
| [TractorHouse Scraper](https://apify.com/crawloop/tractorhouse-scraper) | Machineryline Scraper ◄── you are here | [Nettikone Scraper](https://apify.com/crawloop/nettikone-scraper) |

| US independent boards | Fastline | MachineryPete | EquipmentTrader |
| :--- | :--- | :--- | :--- |
| Non-Sandhills US | [Fastline Scraper](https://apify.com/crawloop/fastline-scraper) | [MachineryPete Scraper](https://apify.com/crawloop/machinerypete-scraper) | [EquipmentTrader Scraper](https://apify.com/crawloop/equipmenttrader-scraper) |

| Agrofy | Mascus | Traktorpool | Landwirt |
| :--- | :--- | :--- | :--- |
| [Agrofy Scraper](https://apify.com/crawloop/agrofy-scraper) | [Mascus Scraper](https://apify.com/crawloop/mascus-scraper) | [Traktorpool Scraper](https://apify.com/crawloop/traktorpool-scraper) | [Landwirt Scraper](https://apify.com/crawloop/landwirt-scraper) |

| IronPlanet | GovPlanet | Ritchie Bros | BidSpotter | NetBid | AuctionTime | Purple Wave |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| [IronPlanet Scraper](https://apify.com/crawloop/ironplanet-scraper) | [GovPlanet Scraper](https://apify.com/crawloop/govplanet-scraper) | [Ritchie Bros Auction Scraper](https://apify.com/crawloop/rbauction-scraper) | [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper) | [NetBid Scraper](https://apify.com/crawloop/netbid-scraper) | [AuctionTime Scraper](https://apify.com/crawloop/auctiontime-scraper) | [Purple Wave Auctions Scraper](https://apify.com/crawloop/purplewave-scraper) |

Extract heavy equipment listings from Machineryline regional domains into clean JSON datasets on Apify. Also works on **Autoline** (trucks) and **Agroline** (agriculture) via the same layout engine.

Supports category URLs, keyword `searchQuery`, company inventory pages, and direct product pages. Use `listings` mode for fast catalog scans and `details` mode for product specs, images, and **company-level** dealer contacts (phones, WhatsApp when published, website, address, map coordinates). Enable `monitorMode` with an Apify Schedule to track **new listings** and **price changes**, optionally via Telegram.

### When to use this Actor

Use this Actor when you need excavators, loaders, cranes, trucks, or agricultural equipment with pricing, specs, images, and company dealer context for market dashboards or outreach workflows.

For used CNC and metalworking on Exapro, use the [Exapro Scraper](https://apify.com/crawloop/exapro-scraper). For Resale.info, use the [Resale.info Scraper](https://apify.com/crawloop/resale-scraper). For Machineseeker / Maschinensucher, use the [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper). For industrial auctions, see [Troostwijk](https://apify.com/crawloop/troostwijk-scraper) and [Surplex](https://apify.com/crawloop/surplex-scraper). For US classifieds, use [Fastline Scraper](https://apify.com/crawloop/fastline-scraper), [MachineryPete Scraper](https://apify.com/crawloop/machinerypete-scraper), or [EquipmentTrader Scraper](https://apify.com/crawloop/equipmenttrader-scraper).

### Used Machinery Marketplace Workflow

```
Multi-platform intelligence          Per-platform enrichment
──────────────────────────          ─────────────────────────

  Machineryline Scraper ◄── you are here ──► EU heavy equipment & dealer contacts
  TractorHouse Scraper  ──────────────────► Sandhills US + EU farm
  Fastline / Pete / ET  ──────────────────► US independent classifieds
  Exapro / Machineseeker ─────────────────► CNC & industrial boards
  Troostwijk / Surplex  ──────────────────► auction lots & bids

  Join datasets by manufacturer + model ──► price comparison & inventory routing
```

### Key Features

- **Regional domains and sister platforms** — Any Machineryline TLD plus Autoline and Agroline URLs in `startUrls`; `platform` is set automatically.
- **Two extraction modes** — `listings` for card-level specs and pricing; `details` for images, full spec tables, and company contacts.
- **Company-level dealer contacts (details)** — Public phones (`sellerPhone` / `sellerPhones`), WhatsApp when the dealer publishes a messenger button (`sellerWhatsapp`), website (`sellerWebsite`), company address, and map coordinates. Personal contact-person names are not collected.
- **Seller inventory pages** — Pass a dealer profile URL (e.g. company slug page) in `startUrls` to crawl that seller’s stock with pagination.
- **Keyword search** — Optional `searchQuery` (+ `baseUrl`) without hand-building search URLs.
- **Normalized model & brand** — Separate `brand` / `model` fields for cross-marketplace joins.
- **Lightweight and concurrent** — HTTP extraction with `curl_cffi`; `concurrencyLimit` parallelizes PDP fetches in details mode.
- **Monitor mode** — Schedule the Actor on category, search, or dealer inventory URLs; only **new** listings and **price changes** go to the dataset, with optional Telegram alerts.

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | `[]` | Category, search, dealer inventory, or product page URLs. |
| `searchQuery` | String | — | Optional keyword search appended as a start URL on `baseUrl`. |
| `baseUrl` | String | `https://machineryline.info` | Origin used with `searchQuery` (regional TLD / Autoline / Agroline). |
| `runMode` | String | `"listings"` | `"listings"` for catalog cards or `"details"` for PDP enrichment + contacts. |
| `maxItems` | Integer | `100` | Maximum equipment items to scrape (or emit in monitor mode). |
| `maxPagesPerUrl` | Integer | `10` | Pagination depth per start URL. |
| `concurrencyLimit` | Integer | `5` | Parallel PDP workers in details mode. |
| `monitorMode` | Boolean | `false` | Delta tracking: first run seeds state; later runs output new / price-changed rows only. |
| `monitorStoreName` | String | `machineryline-monitor-state` | Named KV store so fingerprints survive Apify Schedules. Use one name per watch target. |
| `telegramToken` | String | — | Telegram bot token for monitor alerts. |
| `telegramChatId` | String | — | Telegram chat ID for monitor alerts. |
| `resetMonitorState` | Boolean | `false` | Clear stored fingerprints and force a fresh seed run. |
| `proxyConfiguration` | Object | `{}` | Apify Proxy settings (residential recommended). |

Provide at least one of `startUrls` or `searchQuery`.

#### Input Example

```json
{
  "startUrls": [
    { "url": "https://machineryline.info/-/crawler-cranes--c123" }
  ],
  "searchQuery": "Liebherr crawler crane",
  "runMode": "details",
  "maxItems": 50,
  "maxPagesPerUrl": 3,
  "concurrencyLimit": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Seller inventory example

```json
{
  "startUrls": [
    { "url": "https://machineryline.info/kiesel/" }
  ],
  "runMode": "details",
  "maxItems": 100,
  "maxPagesPerUrl": 20
}
```

#### Monitor mode example (Schedule + Telegram)

```json
{
  "startUrls": [
    { "url": "https://machineryline.info/-/crawler-cranes--c123" }
  ],
  "runMode": "listings",
  "monitorMode": true,
  "monitorStoreName": "machineryline-monitor-cranes",
  "maxItems": 200,
  "maxPagesPerUrl": 15,
  "telegramToken": "123456:ABC...",
  "telegramChatId": "123456789",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

With `monitorMode: true`, listing fingerprints are stored in a **named** Key-Value store (`monitorStoreName`, key `MONITOR_STATE`) so Apify Schedules keep state across runs. The first run seeds the cache and writes no dataset rows. Later scheduled runs emit only `changeType: "new"` or `"price_change"` (and send Telegram when token + chat ID are set). Use a distinct `monitorStoreName` per category/dealer watch. Use `resetMonitorState: true` to wipe the cache.

### Output Format

Schema depends on `runMode`:

- **`listings`** — card fields: `id`, `title`, `brand`, `model`, `platform`, price, year, location, `sellerName` / `sellerUrl` when present on the card. No phones or website (not published on listing cards).
- **`details`** — merges the card with the PDP: `technicalSpecs`, description, images, plus company-level contacts when the dealer card publishes them (`sellerPhone`, `sellerPhones`, `sellerWhatsapp`, `sellerWebsite`, `sellerAddress`, `sellerLatitude` / `sellerLongitude`).
- **`monitorMode`** — same fields as above, plus delta metadata: `changeType` (`new` | `price_change`), `previousPrice` / `previousCurrency` / `previousPriceFormatted`, `monitoredAt`.

```json
{
  "id": "25112614422468508400",
  "title": "Liebherr LR 1400-2 crawler crane",
  "url": "https://machineryline.info/-/sale/crawler-cranes/Liebherr/LR-1400-2--25112614422468508400",
  "platform": "machineryline",
  "brand": "Liebherr",
  "model": "LR 1400-2 crawler crane",
  "category": "Crawler crane",
  "price": 1255000,
  "currency": "USD",
  "year": "2000",
  "runningHours": "2,100 m/h",
  "location": "USA, Miami",
  "country": "US",
  "sellerName": "Omnia Machinery",
  "sellerUrl": "https://machineryline.info/omnia_machinery/",
  "sellerPhone": "+13054818056",
  "sellerPhones": ["+13054818056", "+447718654899"],
  "sellerWhatsapp": "+13054818056",
  "sellerWebsite": "https://www.omniamachinery.com",
  "sellerAddress": "USA, Florida, 33129, MIAMI, OMNIA MACHINERY USA, INC.,151 SE 15th ROAD",
  "sellerLatitude": 25.757885,
  "sellerLongitude": -80.191978,
  "isVerifiedSeller": false,
  "technicalSpecs": {
    "Load capacity": "400,000 kg",
    "Condition": "used"
  },
  "changeType": "price_change",
  "previousPrice": 1290000,
  "previousCurrency": "USD",
  "previousPriceFormatted": "$1,290,000",
  "monitoredAt": "2026-07-28T11:24:00+00:00"
}
```

### Typical Workflow

1. Filter or search on Machineryline in your browser, **or** set `searchQuery` / a company inventory URL.
2. Put category, search, or dealer URLs into `startUrls`.
3. Set `runMode` to `listings` (bulk index) or `details` (specs + company phones / website / WhatsApp when published).
4. Export the Apify dataset as JSON, CSV, or Excel.

#### Inventory / price monitoring

1. Set `startUrls` to a category, search, or dealer inventory page.
2. Enable `monitorMode` (prefer `runMode: "listings"` for cheaper scans).
3. Set a distinct `monitorStoreName` per watch target (category vs dealer).
4. Add Telegram bot token + chat ID if you want alerts.
5. Create an Apify Schedule (e.g. every 1–6 hours). The named KV store keeps fingerprints across runs; the first run is a silent seed.

### Use cases

| Use case | What you get |
| :--- | :--- |
| **Dealer outreach** | Company phones, WhatsApp, website, address from details mode |
| **Price benchmarking** | Asking prices + brand/model for excavators, trucks, ag equipment |
| **Inventory monitoring** | New listing / price-change deltas with optional Telegram |
| **Cross-platform joins** | Normalized `brand` / `model` for Exapro, Resale, Surplex comps |
| **AI / MCP workflows** | Run via Apify API, clients, or MCP and summarize dealer stock |

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/machineryline-scraper').call({
  searchQuery: 'Liebherr crawler crane',
  runMode: 'details',
  maxItems: 50,
  proxyConfiguration: { useApifyProxy: true },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient(token)
run = client.actor("crawloop/machineryline-scraper").call(
    run_input={
        "startUrls": [{"url": "https://machineryline.info/-/crawler-cranes--c123"}],
        "runMode": "listings",
        "maxItems": 100,
        "proxyConfiguration": {"useApifyProxy": True},
    }
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(len(items), items[:3])
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~machineryline-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQuery": "Liebherr",
    "runMode": "listings",
    "maxItems": 50,
    "proxyConfiguration": {"useApifyProxy": true}
  }'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp). Connect your Apify account, then call `crawloop/machineryline-scraper`.

Example prompts:

- "Run Machineryline Scraper for Liebherr crawler cranes in details mode, max 30, and return title, price, sellerPhone, and url"
- "Scrape Machineryline listings for excavators and summarize the median asking price by brand"
- "Chain Machineryline Scraper then Fastline Scraper or Surplex Scraper for similar models and compare EU dealer ask vs US classifieds or auction starts"

### Suite next step

After European dealer stock, pull US boards with [Fastline Scraper](https://apify.com/crawloop/fastline-scraper), [MachineryPete Scraper](https://apify.com/crawloop/machinerypete-scraper), or [EquipmentTrader Scraper](https://apify.com/crawloop/equipmenttrader-scraper), Sandhills farm with [TractorHouse Scraper](https://apify.com/crawloop/tractorhouse-scraper), Sandhills construction with [MachineryTrader Scraper](https://apify.com/crawloop/machinerytrader-scraper), US auctions with [IronPlanet Scraper](https://apify.com/crawloop/ironplanet-scraper) or [Ritchie Bros Auction Scraper](https://apify.com/crawloop/rbauction-scraper), DACH farm with [Traktorpool Scraper](https://apify.com/crawloop/traktorpool-scraper) or [Landwirt Scraper](https://apify.com/crawloop/landwirt-scraper), or EU auctions with [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) or [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper).

### Related Actors

| Actor | Apify Store |
| :--- | :--- |
| **Machineryline Scraper** ◄── you are here | heavy equipment & dealer contacts |
| [Exapro Scraper](https://apify.com/crawloop/exapro-scraper) | European CNC & metalworking |
| [Resale.info Scraper](https://apify.com/crawloop/resale-scraper) | European listings & categories |
| [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper) | regional CNC & metalworking |
| [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper) | multi-country industrial auctions |
| [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) | plant closures & Surplex lots |
| [TractorHouse Scraper](https://apify.com/crawloop/tractorhouse-scraper) | US + EU Sandhills farm equipment |
| [Fastline Scraper](https://apify.com/crawloop/fastline-scraper) | US Fastline farm & construction classifieds |
| [MachineryPete Scraper](https://apify.com/crawloop/machinerypete-scraper) | US MachineryPete ZIP/FSBO farm classifieds |
| [EquipmentTrader Scraper](https://apify.com/crawloop/equipmenttrader-scraper) | US EquipmentTrader construction & farm |
| [MachineryTrader Scraper](https://apify.com/crawloop/machinerytrader-scraper) | Sandhills US heavy equipment |
| [Nettikone Scraper](https://apify.com/crawloop/nettikone-scraper) | Finland used machinery |
| [Agrofy Scraper](https://apify.com/crawloop/agrofy-scraper) | Brazil + Argentina farm marketplace |
| [Mascus Scraper](https://apify.com/crawloop/mascus-scraper) | Global used machinery classifieds |
| [Traktorpool Scraper](https://apify.com/crawloop/traktorpool-scraper) | DACH / Central Europe farm machinery |
| [Landwirt Scraper](https://apify.com/crawloop/landwirt-scraper) | AT/DE agrar classifieds + dealer machinery |
| [Truck1 Scraper](https://apify.com/crawloop/truck1-scraper) | commercial trucks |
| [IronPlanet Scraper](https://apify.com/crawloop/ironplanet-scraper) | US weekly online equipment auctions |
| [GovPlanet Scraper](https://apify.com/crawloop/govplanet-scraper) | US government and military surplus |
| [Ritchie Bros Auction Scraper](https://apify.com/crawloop/rbauction-scraper) | Sold hammer prices and regional auctions |
| [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper) | US/UK industrial auction catalogues |
| [NetBid Scraper](https://apify.com/crawloop/netbid-scraper) | European insolvency auctions |
| [Machinio Scraper](https://apify.com/crawloop/machinio-scraper) | Global used-equipment aggregator |
| [Machines4U Scraper](https://apify.com/crawloop/machines4u-scraper) | Australian used machinery |
| [Plant and Equipment Scraper](https://apify.com/crawloop/plantandequipment-scraper) | MEA heavy machinery and auctions |

# Actor input Schema

## `includePhones` (type: `boolean`):

Off by default. Include phone, mobile, WhatsApp, or fax fields already published on public pages only when you have a lawful basis.

## `startUrls` (type: `array`):

Category pages, search results, company inventory pages (e.g. https://machineryline.info/kiesel/), or direct product detail pages. Autoline and Agroline URLs work with the same layout.

## `searchQuery` (type: `string`):

Optional keyword search. Builds a search URL on baseUrl and appends it to startUrls (e.g. Liebherr crane).

## `baseUrl` (type: `string`):

Site origin used when searchQuery is set. Use a regional Machineryline / Autoline / Agroline domain.

## `runMode` (type: `string`):

listings = fast card fields. details = visit each PDP for full specs, images, and company-level dealer contacts (phones, website, address, coordinates when published).

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

Maximum number of equipment items to scrape in total.

## `maxPagesPerUrl` (type: `integer`):

Maximum number of pagination pages to crawl per category, search, or company inventory URL.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify Residential Proxies are recommended for stable runs at scale.

## `concurrencyLimit` (type: `integer`):

Maximum parallel PDP requests in details mode. Keep moderate to avoid rate limits.

## `monitorMode` (type: `boolean`):

Delta tracking for category, search, or dealer inventory URLs. First run seeds a named Key-Value store (no dataset rows / alerts). Later runs output only new listings and price changes. Pair with an Apify Schedule.

## `monitorStoreName` (type: `string`):

Named Key-Value store for fingerprints across scheduled runs. Use a distinct name per watch target (e.g. dealer or category).

## `telegramToken` (type: `string`):

Bot token for real-time alerts on new listings and price changes (monitorMode only). Create a bot via @BotFather.

## `telegramChatId` (type: `string`):

Telegram user or group chat ID that receives monitor alerts.

## `resetMonitorState` (type: `boolean`):

Clear stored listing fingerprints before this run (forces a fresh seed run).

## Actor input object example

```json
{
  "includePhones": false,
  "startUrls": [
    {
      "url": "https://machineryline.info/-/crawler-cranes--c123"
    }
  ],
  "searchQuery": "Liebherr crawler crane",
  "baseUrl": "https://machineryline.info",
  "runMode": "listings",
  "maxItems": 100,
  "maxPagesPerUrl": 10,
  "concurrencyLimit": 5,
  "monitorMode": false,
  "monitorStoreName": "machineryline-monitor-state",
  "resetMonitorState": false
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items: equipment listings with specs, prices, and company-level dealer contacts (details mode).

# 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 = {
    "startUrls": [
        {
            "url": "https://machineryline.info/-/crawler-cranes--c123"
        }
    ],
    "baseUrl": "https://machineryline.info",
    "monitorStoreName": "machineryline-monitor-state"
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/machineryline-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 = {
    "startUrls": [{ "url": "https://machineryline.info/-/crawler-cranes--c123" }],
    "baseUrl": "https://machineryline.info",
    "monitorStoreName": "machineryline-monitor-state",
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/machineryline-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 '{
  "startUrls": [
    {
      "url": "https://machineryline.info/-/crawler-cranes--c123"
    }
  ],
  "baseUrl": "https://machineryline.info",
  "monitorStoreName": "machineryline-monitor-state"
}' |
apify call crawloop/machineryline-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/machineryline-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/hDQcprb8fjrcFVjIs/builds/J9JLaxaaeOo7j4CCc/openapi.json
