# Resale.info Scraper — Used Machinery & Dealer Contacts (`crawloop/resale-scraper`) Actor

Scrape Resale.info used machinery listings: deep specs, prices, dealer profiles, and unmasked phone numbers. Listings or details mode. Cloudflare bypass, search API, lightweight HTTP on Apify.

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

## Pricing

from $3.50 / 1,000 scraped details rows

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Resale.info Scraper — Used Machinery & Dealer Contacts

> **Crawloop Used Machinery Marketplace Suite** — Structured extraction for used industrial machinery, metalworking equipment, food processing lines, and packaging systems. Built for B2B lead generation, dealer intelligence, and market pricing workflows.
>
> Product site: [crawloop.com/used-machinery](https://crawloop.com/used-machinery.html)

| Exapro | Resale.info | Machineseeker | Machineryline |
| :--- | :--- | :--- | :--- |
| [Exapro Scraper](https://crawloop.com/products/exapro-scraper.html) | **Resale.info Scraper** ◄── you are here | [Machineseeker Scraper](https://crawloop.com/products/machineseeker-scraper.html) | [Machineryline Scraper](https://crawloop.com/products/machineryline-scraper.html) |

> **Disclaimer:** This is an unofficial integration developed independently of RESALE. It is not affiliated with, sponsored by, or endorsed by RESALE or any of its subsidiaries.
>
> **Resale.info**, **Resale.de**, and related names are trademarks of their respective owners. Listing data is read from publicly accessible web sources only; no proprietary databases are redistributed.
>
> This Actor is provided **for informational and research purposes only** (e.g. market research, dealer outreach, inventory monitoring). You are solely responsible for ensuring your use complies with applicable laws, platform terms of use, and your organization's policies.
>
> No warranty is given as to accuracy, completeness, or continued availability of third-party data. Use at your own risk.

Extract used machinery listings from **resale.info** and regional domains (`resale.de`, `resale.co.it`, `resale.info/ru/`, …) into clean JSON datasets on Apify. Supports category URLs, direct product pages, and text search via Resale's backend search API — with `listings` mode for fast catalog scans and `details` mode for full PDP enrichment including **unmasked dealer phone numbers**.

Category pagination is handled via Resale's search proxy API (category IDs like `rs-1` for metalworking). Phone obfuscation is bypassed through direct `/telefon.php` requests on detail pages. Cloudflare-protected pages use `curl_cffi` Chrome 120 JA3 fingerprint emulation — no headless browser overhead.

### When to use this Actor

Use the **Resale.info Scraper** when you need dealer lead lists with unmasked phone numbers, dealer profile URLs, and strong coverage of German and European used metalworking inventories.

For Exapro seller activity stats (offers online, client type, last activity), use the [Exapro Scraper](https://crawloop.com/products/exapro-scraper.html). For Machineseeker / Maschinensucher listings across 10+ regional TLDs, use the [Machineseeker Scraper](https://crawloop.com/products/machineseeker-scraper.html). For excavators, trucks (Autoline), and agricultural equipment (Agroline) with geo-coordinates, use the [Machineryline Scraper](https://crawloop.com/products/machineryline-scraper.html).

### Used Machinery Marketplace Workflow

````

Multi-platform intelligence          Per-platform enrichment
──────────────────────────          ─────────────────────────

Exapro Scraper        ──────────────────► seller stats & European listings
Resale.info Scraper   ◄── you are here ──► dealer phones & profiles
Machineseeker Scraper ──────────────────► regional CNC & metalworking
Machineryline Scraper ──────────────────► heavy equipment & coordinates

Join datasets by manufacturer + model ──► price comparison & lead routing

````

### Key Features

- **Universal language and domain support** — Feed URLs from any regional Resale site; localized fields, currencies, and formatting are resolved automatically.
- **Direct search API integration** — Text queries and category IDs hit Resale's search proxy for fast, paginated results without browser automation.
- **Smart category pagination** — Extracts category IDs from URLs and traverses backend API pages when HTML pagination is unavailable.
- **Unmasked dealer phone numbers** — POST requests to `/telefon.php` reveal dealer contacts on every detail page.
- **Two extraction modes** — `listings` for card-level specs, titles, pricing, and country; `details` for PDP galleries, spec tables, dealer names, and phone numbers.
- **Cloudflare WAF bypass** — `curl_cffi` Chrome 120 impersonation for reliable access at scale.
- **No headless browser overhead** — Highly concurrent, resource-friendly HTTP extraction.

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `startUrls` | Array | `[]` | Category, search page, or direct product detail URLs to scrape. |
| `searchQuery` | String | `""` | Optional text query (e.g. `lathe`, `milling`). Uses Resale's search API. |
| `runMode` | String | `"listings"` | `"listings"` for card overview or `"details"` for deep PDP enrichment. |
| `maxItems` | Integer | `100` | Maximum total machinery items to scrape. |
| `maxPagesPerUrl` | Integer | `10` | Maximum pagination pages per category or search query. |
| `language` | String | `"en"` | Target language for search requests (`en`, `de`, `ru`, `fr`, `it`, `es`, `pt`, `pl`, `ua`, `tr`, `cn`, `jp`, `kr`). |
| `concurrencyLimit` | Integer | `5` | Parallel workers — keep low to avoid anti-bot blocks. |
| `proxyConfiguration` | Object | `{}` | Apify Residential Proxies recommended. |

#### Input Example

```json
{
  "startUrls": [
    { "url": "https://www.resale.info/en/metal-working-machines/rs-1/" }
  ],
  "runMode": "details",
  "maxItems": 50,
  "maxPagesPerUrl": 3,
  "language": "en",
  "concurrencyLimit": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

### Output Format

The scraper pushes structured JSON rows to the default Apify dataset. Example from `details` mode:

```json
{
  "id": 169744792,
  "title": "SUPFINA Spiro F7 Honing, Finishing, Lapping And Polishing Machines",
  "url": "https://www.resale.info/en/supfina-spiro-f7-honing-finishing-lapping-and-polishing-machines/No-169744792",
  "manufacturer": "SUPFINA",
  "model": "Spiro F7",
  "categoryPath": "metal working machines > grinding machines > Honing, Finishing, Lapping And Polishing Machines",
  "year": 2022,
  "priceFormatted": "Price on request",
  "locationCountry": "DE",
  "images": [
    "https://images.resale.de/uploads/169744792_a_360034-a.jpg"
  ],
  "dealerName": "Supfina Grieshaber GmbH & Co. KG",
  "dealerAddress": "77709 Wolfach",
  "dealerCountry": "Germany",
  "dealerProfileUrl": "https://www.resale.info/en/used-machinery-dealer-65405/Supfina-Grieshaber-GmbH-&-Co.-KG",
  "dealerPhone": "+4978348660"
}
```

***

**Learn more:** [Product page](https://crawloop.com/products/resale-scraper.html) · [Suite hub](https://crawloop.com/used-machinery.html)

**Also from Crawloop Used Machinery:** [Exapro Scraper](https://crawloop.com/products/exapro-scraper.html) · [Machineseeker Scraper](https://crawloop.com/products/machineseeker-scraper.html) · [Machineryline Scraper](https://crawloop.com/products/machineryline-scraper.html)

**Also from Crawloop Industrial:** [Siemens Automation Suite](https://crawloop.com/siemens-automation.html) · [Rockwell Automation Suite](https://crawloop.com/rockwell-automation.html)

# Actor input Schema

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

List of URLs to scrape. Supports category pages (e.g. /en/metal-working-machines/rs-1/), search result pages, or direct product detail pages.

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

Optional search term to query directly using Resale's backend search engine (e.g. 'lathe', 'milling machine'). If provided, startUrls is not required.

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

Choose between extracting info directly from search API ('listings') or crawling deep product detail pages and unmasking dealer phone numbers via /telefon.php ('details').

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

Maximum number of items to scrape in total.

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

Maximum number of pages to paginate for each category or search query.

## `language` (type: `string`):

Select the target language for search queries and listing links. Used to extract localized titles, descriptions, and URLs.

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

Proxy settings. It is recommended to use Apify Proxy to bypass Cloudflare protection.

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

Maximum number of concurrent requests to make. Keep low to avoid hitting anti-bot blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.resale.info/en/metal-working-machines/rs-1/"
    }
  ],
  "runMode": "listings",
  "maxItems": 100,
  "maxPagesPerUrl": 10,
  "language": "en",
  "concurrencyLimit": 5
}
```

# 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.resale.info/en/metal-working-machines/rs-1/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/resale-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.resale.info/en/metal-working-machines/rs-1/" }] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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.resale.info/en/metal-working-machines/rs-1/"
    }
  ]
}' |
apify call crawloop/resale-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawloop/resale-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Resale.info Scraper — Used Machinery & Dealer Contacts",
        "description": "Scrape Resale.info used machinery listings: deep specs, prices, dealer profiles, and unmasked phone numbers. Listings or details mode. Cloudflare bypass, search API, lightweight HTTP on Apify.",
        "version": "0.1",
        "x-build-id": "phSLUKeYmcBB2xxgY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawloop~resale-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawloop-resale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawloop~resale-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawloop-resale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawloop~resale-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawloop-resale-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "List of URLs to scrape. Supports category pages (e.g. /en/metal-working-machines/rs-1/), search result pages, or direct product detail pages.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Optional search term to query directly using Resale's backend search engine (e.g. 'lathe', 'milling machine'). If provided, startUrls is not required."
                    },
                    "runMode": {
                        "title": "Run Mode",
                        "enum": [
                            "listings",
                            "details"
                        ],
                        "type": "string",
                        "description": "Choose between extracting info directly from search API ('listings') or crawling deep product detail pages and unmasking dealer phone numbers via /telefon.php ('details').",
                        "default": "listings"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of items to scrape in total.",
                        "default": 100
                    },
                    "maxPagesPerUrl": {
                        "title": "Max Pages per Start URL / Query",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of pages to paginate for each category or search query.",
                        "default": 10
                    },
                    "language": {
                        "title": "Search/Target Language",
                        "enum": [
                            "en",
                            "de",
                            "ru",
                            "fr",
                            "it",
                            "es",
                            "pt",
                            "pl",
                            "ua",
                            "tr",
                            "cn",
                            "jp",
                            "kr"
                        ],
                        "type": "string",
                        "description": "Select the target language for search queries and listing links. Used to extract localized titles, descriptions, and URLs.",
                        "default": "en"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. It is recommended to use Apify Proxy to bypass Cloudflare protection."
                    },
                    "concurrencyLimit": {
                        "title": "Max Concurrency Limit",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of concurrent requests to make. Keep low to avoid hitting anti-bot blocks.",
                        "default": 5
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
