# DOTmed Listings Scraper (`piotrv1001/dotmed-listings-scraper`) Actor

The DOTmed Listings Scraper extracts medical equipment listings from DOTmed across 25 categories, capturing manufacturer, model, condition, asking price, specifications, seller, location, descriptions, and image galleries — ideal for price research, sourcing, and medical-device market analysis.

- **URL**: https://apify.com/piotrv1001/dotmed-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 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.

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

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

### 🏥 DOTmed Listings Scraper

Easily extract **medical equipment listings from DOTmed** — the world's largest public marketplace for new and used medical equipment, parts, and devices. The **DOTmed Listings Scraper** turns thousands of equipment listings into clean, structured data for price research, sourcing, competitor monitoring, and market analysis.

Pick the equipment categories you care about, set how many listings you want, and get back ready-to-use JSON, CSV, or Excel. Run it on demand or [schedule it](https://docs.apify.com/platform/schedules) to track the medical equipment market over time, and connect the results to your own tools through the [Apify API](https://docs.apify.com/api/v2) and [integrations](https://apify.com/integrations).

### ✨ Features

- 🏷️ **Rich Listing Data**: Manufacturer, model, equipment type, condition, asking price, currency, location, seller, reference number, full description, and image galleries.
- 🔧 **Specifications Capture**: Pulls the per-listing specification table (serial number, warranty, dimensions, electrical ratings, and more) into a structured field.
- 🗂️ **Browse by Category**: Choose from 25 equipment categories — imaging, surgical, laboratory, cardiology, radiation therapy, and many more.
- ⚡ **Two Modes, Two Prices**: Collect lightweight listing summaries cheaply, or switch on full details to scrape complete listing pages — you only pay for what you use.
- 📦 **Sale & Auction Support**: Handles fixed-price listings and auction items, including bid-close times.
- 🌍 **No Setup Required**: Works out of the box. Optional proxy support for large or repeated runs.

### 🛠️ How to use the DOTmed Listings Scraper

1. **Select categories** – Choose one or more equipment categories (e.g. *Imaging*, *Surgical*, *Laboratory*).
2. **Set your limit** – Choose the maximum number of listings to collect with **Maximum number of items**.
3. **Choose your depth** – Leave **Scrape full listing details** off for fast, low-cost summaries, or turn it on to capture full listing pages (price, condition, specs, seller, description, images).
4. **Run the Actor** – Click **Start** and watch results stream into the dataset.
5. **Export** – Download your data as JSON, CSV, Excel, or HTML, or pull it via the API.

### 📥 Input

The scraper takes a simple input you configure in the **Input** tab:

| Field | Description |
| --- | --- |
| **Categories** | One or more equipment categories to scrape. |
| **Scrape full listing details** | When enabled, visits each listing page for complete data. When off, returns lightweight summaries. Default: off. |
| **Maximum number of items** | The maximum number of listings to collect. Default: 50. |
| **Start URLs** *(advanced)* | Optional. Specific DOTmed browse URLs to scrape instead of categories. |
| **Proxy configuration** | Optional proxy settings for large or repeated runs. |

Example input:

```json
{
    "categories": ["imaging"],
    "scrapeDetails": true,
    "maxItems": 50
}
````

### 📊 Output

Each listing becomes one structured record. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output item (full details mode):

```json
{
    "url": "https://www.dotmed.com/listing/anesthesia-machine/drager/perseus-a500/5689328",
    "listingId": "5689328",
    "listingType": "listing",
    "title": "For Sale DRAGER Perseus A500 Anesthesia Machine",
    "manufacturer": "DRAGER",
    "model": "Perseus A500",
    "equipmentType": "Anesthesia Machine",
    "category": "imaging",
    "condition": "Used - Excellent",
    "price": 7990,
    "priceCurrency": "EUR",
    "priceText": "Asking Price :€7,990.00 EUR",
    "location": null,
    "country": "Germany",
    "seller": "Pramor Medical GmbH",
    "referenceNumber": "5689328",
    "quantityAvailable": "2",
    "inStock": "Yes",
    "dateUpdated": "June 08, 2026",
    "bidCloses": null,
    "description": "Fully refurbished Dräger Perseus A500 anesthesia workstation...",
    "specifications": {
        "S/N": "ASEM-0123",
        "Warranty": "Yes"
    },
    "mainImage": "https://images.dotmed.com/images/listingpics2/5/6/8/9/5689328.jpg",
    "images": [
        "https://images.dotmed.com/images/listingpics2/5/6/8/9/5689328.jpg",
        "https://images.dotmed.com/images/listingpics2/5/6/8/9/5689328_1.jpg"
    ],
    "scrapedAt": "2026-06-08T08:30:10.047Z"
}
```

#### Data fields

| Field | Description |
| --- | --- |
| `url` | Listing page URL |
| `listingId` | Unique listing ID |
| `listingType` | `sale`, `auction`, or `listing` |
| `title` | Listing title |
| `manufacturer` | Equipment manufacturer / brand |
| `model` | Model name or number |
| `equipmentType` | Equipment type / device category |
| `category` | Category the listing was scraped from |
| `condition` | Stated condition of the item |
| `price` | Asking price (numeric, when available) |
| `priceCurrency` | Currency code of the price |
| `priceText` | Raw price text as shown on the page |
| `location` | Item location |
| `country` | Seller country |
| `seller` | Seller name |
| `referenceNumber` | Listing / sale / auction reference number |
| `quantityAvailable` | Quantity available |
| `inStock` | In-stock indicator |
| `dateUpdated` | Date the listing was last updated |
| `bidCloses` | Auction bid-close time (auction items) |
| `description` | Full item description |
| `specifications` | Key–value map of listing specifications |
| `mainImage` | Primary listing image |
| `images` | All listing images |

### 💰 How much does it cost to scrape DOTmed?

This Actor uses a **pay-per-result** pricing model, so your cost scales with exactly what you collect:

| What you get | Price per 1,000 results |
| --- | --- |
| **Listing scraped** (summary only) | **$2.00** |
| **Listing detail scraped** (full listing page) | **$6.00** |

For example, scraping **1,000 full listing details** costs about **$6**, and collecting **1,000 lightweight summaries** costs about **$2**. New Apify accounts include free monthly usage credits, so you can try the Actor at no cost. There are no separate platform fees beyond these per-result prices.

### 💡 Tips

- **Start small.** Use a low **Maximum number of items** for a test run, then scale up once you're happy with the output.
- **Use summary mode to save money.** Leave **Scrape full listing details** off when you only need titles, images, and URLs — then re-run with details on for the listings you care about.
- **Target the right categories.** Selecting fewer, more relevant categories keeps runs fast and focused.
- **Schedule recurring runs** to monitor pricing and new inventory over time.

### ❓ FAQ

**Is scraping DOTmed legal?**
This Actor collects only publicly available information. As with any scraping, you are responsible for how you use the data and for complying with DOTmed's Terms of Service and applicable laws. Avoid collecting personal data and consult legal counsel if you are unsure.

**Can I scrape a specific category page or search?**
Yes. Use the **Start URLs** advanced option to provide specific DOTmed browse URLs.

**Why are some fields empty?**
Listings vary — auction items may have no fixed price, and some sellers omit specifications or location. The Actor returns whatever is published on each listing.

**Can I get the data automatically?**
Yes. Use the [Apify API](https://docs.apify.com/api/v2), [scheduling](https://docs.apify.com/platform/schedules), and [integrations](https://apify.com/integrations) (Make, Zapier, Google Sheets, and more) to automate collection and delivery.

### 📬 Support

Found a bug or need an extra field? Open an issue on the Actor's **Issues** tab — feedback and custom requests are welcome.

# Actor input Schema

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

Equipment categories to scrape. Listings from every selected category are collected up to the maximum number of items.

## `scrapeDetails` (type: `boolean`):

When enabled, the scraper visits every listing page and extracts complete details (price, condition, specifications, seller, description, images). When disabled, it returns only the basic listing data (title, image, URL) which is faster and cheaper.

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

The maximum number of listings to collect across all selected categories.

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

Optional. Provide specific DOTmed browse URLs (e.g. https://www.dotmed.com/browse/equipment/imaging/all/) to scrape instead of the selected categories. When set, the categories option is ignored.

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

Optional proxy settings. The target site does not require a proxy, but you can enable one for large or repeated runs.

## Actor input object example

```json
{
  "categories": [
    "imaging"
  ],
  "scrapeDetails": false,
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "categories": [
        "imaging"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/dotmed-listings-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 = { "categories": ["imaging"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/dotmed-listings-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 '{
  "categories": [
    "imaging"
  ]
}' |
apify call piotrv1001/dotmed-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DOTmed Listings Scraper",
        "description": "The DOTmed Listings Scraper extracts medical equipment listings from DOTmed across 25 categories, capturing manufacturer, model, condition, asking price, specifications, seller, location, descriptions, and image galleries — ideal for price research, sourcing, and medical-device market analysis.",
        "version": "0.0",
        "x-build-id": "QeWhhkcOdaOcmkbmV"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~dotmed-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-dotmed-listings-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/piotrv1001~dotmed-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-dotmed-listings-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/piotrv1001~dotmed-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-dotmed-listings-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": {
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Equipment categories to scrape. Listings from every selected category are collected up to the maximum number of items.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "imaging",
                                "surgical",
                                "laboratory",
                                "cardiology",
                                "radiation-therapy",
                                "monitors-icu-ccu",
                                "respiratory",
                                "endoscopy",
                                "dental",
                                "ophthalmology",
                                "neurology",
                                "physical-therapy",
                                "homecare-rehab",
                                "veterinary",
                                "exam-room",
                                "beds-stretchers-and-furniture",
                                "defibrillator",
                                "pumps",
                                "sterile-processing",
                                "neonatal",
                                "cosmetic",
                                "ems-rescue",
                                "consumables-and-supplies",
                                "personal-protective-equipment",
                                "all-others"
                            ],
                            "enumTitles": [
                                "Imaging",
                                "Surgical",
                                "Laboratory",
                                "Cardiology",
                                "Radiation Therapy",
                                "Monitors / ICU / CCU",
                                "Respiratory",
                                "Endoscopy",
                                "Dental",
                                "Ophthalmology",
                                "Neurology",
                                "Physical Therapy",
                                "Homecare / Rehab",
                                "Veterinary",
                                "Exam Room",
                                "Beds, Stretchers & Furniture",
                                "Defibrillator",
                                "Pumps",
                                "Sterile Processing",
                                "Neonatal",
                                "Cosmetic",
                                "EMS / Rescue",
                                "Consumables & Supplies",
                                "Personal Protective Equipment",
                                "All Others"
                            ]
                        },
                        "default": [
                            "imaging"
                        ]
                    },
                    "scrapeDetails": {
                        "title": "Scrape full listing details",
                        "type": "boolean",
                        "description": "When enabled, the scraper visits every listing page and extracts complete details (price, condition, specifications, seller, description, images). When disabled, it returns only the basic listing data (title, image, URL) which is faster and cheaper.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum number of items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "The maximum number of listings to collect across all selected categories.",
                        "default": 50
                    },
                    "startUrls": {
                        "title": "Start URLs (advanced)",
                        "type": "array",
                        "description": "Optional. Provide specific DOTmed browse URLs (e.g. https://www.dotmed.com/browse/equipment/imaging/all/) to scrape instead of the selected categories. When set, the categories option is ignored.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy settings. The target site does not require a proxy, but you can enable one for large or repeated runs.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
