# Machines4U Scraper — Used Machinery Australia (`crawloop/machines4u-scraper`) Actor

Scrape Machines4U used and new machinery listings across Australia: construction, farm, forklifts, and metalworking. Extract AUD prices (ex GST / inc GST), hours, year, brand, location, dealer phones, and images.

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

## Pricing

from $1.99 / 1,000 scraped machines4u listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Machines4U Scraper — Used Machinery Australia

> **Crawloop Used Equipment / Machinery Suite** — Australian industrial classifieds: construction, farm, forklifts, metalworking, mining, and workshop machinery plus dealer contacts.

| Machineryline | Agriaffaires | Machineseeker | Exapro | Machines4U |
| :--- | :--- | :--- | :--- | :--- |
| [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) | [Agriaffaires Scraper](https://apify.com/crawloop/agriaffaires-scraper) | [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper) | [Exapro Scraper](https://apify.com/crawloop/exapro-scraper) | Machines4U Scraper ◄── you are here |

> **Disclaimer:** Unofficial tool for publicly accessible Machines4U pages. Not affiliated with, sponsored by, or endorsed by Machines4U. Trademarks belong to their respective owners.
>
> For informational and research use only (market research, dealer intelligence, procurement comps). You are responsible for compliance with applicable laws, site terms, and your organization policies.
>
> No warranty as to accuracy, completeness, or continued availability of third-party data.

**Machines4U scraper** for Australia’s industrial machinery marketplace — construction plant, farm equipment, forklifts, metalworking, mining machines, trucks, and workshop stock. Extract **AUD asking prices with GST split** (ex GST / inc GST), hours, year, brand, model, state, hot-deal flags, seller/dealer names, public phones, and image galleries. Run category or keyword crawls, dealer directory pages, or direct listing URLs — a practical **Machines4U API alternative** for Python, Node.js, cURL, and MCP on Apify.

Built for **equipment traders**, **fleet buyers**, **finance desks**, and **market-intel teams** covering Australia and AU vs EU/US comps. Choose `listings` for fast tile-level catalogs or `details` for full advert pages with JSON-LD + HTML specs.

### When to use this Actor

Use the **Machines4U Scraper** when you need:

- **Australian machinery inventory** — construction, farm, forklift, metalworking, mining, workshop, trucks, hire, hot deals
- **GST-aware AUD prices** — ex-GST ask plus inc-GST when the advert publishes both
- **Hours, year, brand/model**, condition (new/used), and “delivers nationally”
- **Dealer directory** rows with public phones and inventory links
- **Discovery** — search keyword (e.g. excavator), category shortcuts, or pasted start URLs

Ideal for traders comparing Australian asking prices against EU Machineryline / Agriaffaires comps.

#### When not to use

- You need **EU dealer stock** → [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) or [Exapro Scraper](https://apify.com/crawloop/exapro-scraper)
- You need **European farm machinery** → [Agriaffaires Scraper](https://apify.com/crawloop/agriaffaires-scraper)
- You need **global machine-tool classifieds** → [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper)
- You need **industrial auction lots** → [Surplex Scraper](https://apify.com/crawloop/surplex-scraper)

### Data pipeline

```
Input                              Mode                         Output
─────────────────────────         ────────────────────         ──────────────────────────

  Browse / search / dealer  ──►   listings (fast tiles)  ──►  title, AUD price, GST, state
  Keyword                   ──►   details  (full PDP)   ──►  specs, gallery, dealer phone
  Listing / directory URLs  ──►                           ──►  hours, year, brand, POA

  Join by brand + model     ──►   comps with Machineryline / Agriaffaires
```

### Key Features

- **Two extraction modes** — `listings` for tile-level stubs; `details` for JSON-LD Product + HTML specs
- **GST-aware AUD prices** — `price` (ex GST), `priceIncGst`, `priceStatus` (`listed` / `poa` / `negotiable`)
- **Category shortcuts** — construction, farm, forklift, metalworking, mining, hire, hot deals, and more
- **Dealer profiles** — optional directory rows with phone; details mode can enrich listing phones from the dealer page
- **Lightweight HTTP** — Chrome TLS impersonation, no headless browser
- **Export-ready JSON** — Apify dataset for CSV / Excel / API / MCP

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | Construction browse | Browse, search, brand, dealer, hire, hot-deals, or listing URLs. |
| `searchKeyword` | String | — | Builds `/search/{keyword}/` (e.g. excavator, forklift). |
| `categories` | Array | `[]` | Built-in roots: `construction`, `farm`, `forklift`, `metalworking`, `mining`, `trucks`, `hire`, `hotdeals`, and more. |
| `conditions` | Array | `[]` | Optional filter: `new`, `used`. |
| `includeDealerProfiles` | Boolean | `true` | Push dealer profile rows for dealer start URLs. |
| `enrichDealerContacts` | Boolean | `true` | In details mode, attach public dealer phone from the directory page. |
| `runMode` | String | `"listings"` | `"listings"` or `"details"`. |
| `maxItems` | Integer | `10` | Cap on emitted records (`0` = unlimited). |
| `maxPagesPerUrl` | Integer | `1` | Pagination depth per start URL. |
| `concurrencyLimit` | Integer | `3` | Parallel detail workers. |
| `proxyConfiguration` | Object | Residential AU | Apify Residential recommended if blocked. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.machines4u.com.au/browse/construction-equipment/" }
  ],
  "runMode": "listings",
  "maxItems": 25,
  "maxPagesPerUrl": 1,
  "conditions": ["used"],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "AU"
  }
}
```

### Output

| Field | Type | Description |
| :--- | :--- | :--- |
| `listingId` | String | Advert ID |
| `title` | String | Listing title |
| `manufacturer` / `model` / `year` / `hours` | — | Core equipment fields (richer on details) |
| `category` / `stockId` | — | Category leaf and seller stock code |
| `condition` | String | `new` or `used` |
| `price` / `priceIncGst` / `priceCurrency` | — | AUD ask; GST split when published |
| `priceStatus` | String | `listed`, `poa`, or `negotiable` |
| `gstFlag` | String | e.g. `ex_gst` when the tile/PDP shows Ex GST |
| `state` / `location` / `deliversNationally` | — | Australian location signals |
| `sellerName` / `sellerPhone` / `dealerUrl` | — | Seller surfaces (phone from directory / details enrich) |
| `hotDeal` | Boolean | Hot-deal tile when present |
| `images` / `imageUrl` | — | Gallery URLs |
| `url` | String | Canonical advert URL |
| `recordType` | String | `dealer` for dealer profile rows |

#### Example output (details)

```json
{
  "listingId": "1167376",
  "url": "https://www.machines4u.com.au/view/advert/2018-HITACHI-ZX360-LC-5B-PB81/1167376/",
  "title": "2018 HITACHI ZX360 LC-5B PB81",
  "listingType": "listing",
  "condition": "used",
  "category": "Excavator",
  "manufacturer": "Hitachi",
  "model": "ZX360LC-5B",
  "year": 2018,
  "hours": 5532,
  "stockId": "PB81",
  "location": "Brisbane City, QLD",
  "state": "QLD",
  "price": 180000,
  "priceIncGst": 198000,
  "priceCurrency": "AUD",
  "priceStatus": "listed",
  "gstFlag": "ex_gst",
  "sellerName": "Hannaford-Equipment",
  "dealerUrl": "https://www.machines4u.com.au/directory/Hannaford-Equipment/2385/"
}
```

### Use cases

- **AU price comps** for excavators, forklifts, tractors, and metalworking machines
- **GST-aware valuation** — track ex-GST asks vs inc-GST display prices
- **Dealer prospecting** across the Machines4U directory (public phones)
- **Export / import desks** comparing Australian stock to EU Machineryline inventory
- **Hot-deal and hire monitoring** for priced-to-move or rental plant
- **Python / Node / MCP pipelines** that treat Machines4U as a structured dataset

### 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/machines4u-scraper').call({
  startUrls: [{ url: 'https://www.machines4u.com.au/browse/construction-equipment/' }],
  runMode: 'listings',
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("crawloop/machines4u-scraper").call(
    run_input={
        "searchKeyword": "excavator",
        "runMode": "details",
        "maxItems": 20,
        "enrichDealerContacts": True,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("price"), item.get("sellerPhone"))
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~machines4u-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.machines4u.com.au/browse/forklift/"}],"runMode":"listings","maxItems":15}'
```

### 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 this Actor by its Store ID / name.

Example prompts:

- "Run Machines4U Scraper for used excavators in Queensland and return the top 20 rows as JSON"
- "Scrape forklift listings with Machines4U Scraper and summarize brand, hours, and ex-GST price"
- "Chain Machines4U Scraper then Machineryline Scraper to compare AU vs EU tracked excavator comps"

### Suite next step

After Australian Machines4U inventory, pull European heavy-equipment stock and dealer contacts with [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper), or farm machinery comps with [Agriaffaires Scraper](https://apify.com/crawloop/agriaffaires-scraper).

### FAQ

**Are prices always present?**\
Priced ads usually expose an ex-GST ask. POA / “Ask for Price” rows set `priceStatus: "poa"`. JSON-LD may publish `0` for those — the Actor prefers the HTML price block.

**How does GST work?**\
When both figures are published, `price` is ex GST and `priceIncGst` is the inc-GST display. `gstFlag` records the on-page label (typically `ex_gst`).

**Where do dealer phones come from?**\
Listing pages use an enquiry form. Public telephone numbers sit on `/directory/{dealer}/{id}/`. Enable `enrichDealerContacts` in details mode, or pass dealer start URLs with `includeDealerProfiles`.

**Listings vs details?**\
Use `listings` for fast catalog scans (title, AUD price, GST flag, state). Use `details` when you need hours, brand/model, gallery, and dealer phone enrichment.

**Do I need a proxy?**\
Direct access often works. If you see blocks, enable Apify Residential (AU) and lower concurrency.

**Can I scrape a single dealer’s stock?**\
Yes — pass a `/directory/{name}/{id}/` start URL. You get an optional dealer-profile row plus paginated inventory tiles.

**Do I need a login?**\
No. Public browse, search, dealer, and advert pages are in scope.

### Related Actors

- [Machineryline Scraper](https://apify.com/crawloop/machineryline-scraper) — EU heavy equipment + dealers
- [Agriaffaires Scraper](https://apify.com/crawloop/agriaffaires-scraper) — European farm machinery
- [Exapro Scraper](https://apify.com/crawloop/exapro-scraper) — European used machinery
- [Machineseeker Scraper](https://apify.com/crawloop/machineseeker-scraper) — global machine-tool classifieds
- [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) — industrial auction lots

# Actor input Schema

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

Machines4U browse, search, brand, dealer directory, hire, hot deals, or listing URLs (e.g. /browse/construction-equipment/, /search/excavator/, /directory/Hannaford-Equipment/2385/, /view/advert/.../{id}/).

## `searchKeyword` (type: `string`):

Optional keyword search that builds /search/{keyword}/ (e.g. excavator, forklift, tractor).

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

Optional built-in category roots when startUrls is empty (construction, farm, forklift, metalworking, mining, hire, hotdeals, …).

## `conditions` (type: `array`):

Optional card filter: new or used. Empty = all conditions on the page.

## `includeDealerProfiles` (type: `boolean`):

When a dealer directory start URL is provided, also push a dealer profile row (phone, name, inventory links).

## `enrichDealerContacts` (type: `boolean`):

In details mode, visit the seller directory page to attach public telephone when the listing itself only has an enquiry form.

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

listings = fast tile-level data from browse/search/dealer pages. details = visit each advert for JSON-LD + specs, GST prices, gallery, seller.

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

Maximum records to return (listings + dealers). 0 = unlimited. Keep small for Store auto-tests (under 5 minutes).

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

Pagination depth per browse/search/dealer URL. 0 = until exhausted. Browse pages after 1 use the site's ajaxbrowse endpoint.

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

Parallel detail-page workers (1–12). Keep modest.

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

Apify Proxy. RESIDENTIAL AU recommended if you see blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.machines4u.com.au/browse/construction-equipment/"
    }
  ],
  "searchKeyword": "excavator",
  "categories": [],
  "conditions": [],
  "includeDealerProfiles": true,
  "enrichDealerContacts": true,
  "runMode": "listings",
  "maxItems": 10,
  "maxPagesPerUrl": 1,
  "concurrencyLimit": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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://www.machines4u.com.au/browse/construction-equipment/"
        }
    ],
    "runMode": "listings",
    "maxItems": 10,
    "maxPagesPerUrl": 1,
    "concurrencyLimit": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/machines4u-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://www.machines4u.com.au/browse/construction-equipment/" }],
    "runMode": "listings",
    "maxItems": 10,
    "maxPagesPerUrl": 1,
    "concurrencyLimit": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/machines4u-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://www.machines4u.com.au/browse/construction-equipment/"
    }
  ],
  "runMode": "listings",
  "maxItems": 10,
  "maxPagesPerUrl": 1,
  "concurrencyLimit": 3
}' |
apify call crawloop/machines4u-scraper --silent --output-dataset

```

## MCP server setup

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