DOTmed Medical Equipment Scraper
Pricing
from $6.00 / 1,000 results
DOTmed Medical Equipment Scraper
Scrape used, refurbished, and new medical equipment listings and auctions from DOTmed.com: manufacturer, model, condition, price, current bid, seller, and photos. Imaging, dental, surgical, cardiology, and lab equipment. Structured JSON for procurement and resale pricing.
Pricing
from $6.00 / 1,000 results
Rating
0.0
(0)
Developer
Sub Rosa
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
DOTmed Equipment Listings
Structured medical equipment listings and auctions from DOTmed.com, the largest online marketplace for used, refurbished, and new medical equipment. Each item returned is one listing or one live auction, with its category, manufacturer, model, condition, price or current bid, seller's business name, description, and photos — normalized into a consistent schema instead of the raw HTML a human visitor would have to read page by page.
Who uses this and for what
Hospital procurement teams comparing prices across vendors before a capital equipment purchase — pulling every currently-listed CT scanner or ultrasound system to see the range of asking prices and conditions before making an offer.
Medical equipment dealers and brokers tracking available inventory and sourcing opportunities across manufacturers — running this daily against a category to catch new listings from a specific manufacturer as soon as they post, rather than checking the site by hand.
Refurbishment companies looking for equipment to acquire, refurbish, and resell, where the gap between an auction's current bid and a comparable fixed listing's asking price is the margin they're pricing against.
Sample output
One real item from a real run (2026-09-26):
{"id": "5620515","url": "https://www.dotmed.com/listing/cabinetry-furnishings/kewaunee-scientific/int-2000/class-ii-a2-biological-safety-cabinet/5620515","sourceUrl": "https://www.dotmed.com/browse/equipment/dental/all","scrapedAt": "2026-09-26T19:09:58.000Z","category": "dental","subcategory": "Cabinetry - Furnishings","manufacturer": "KEWAUNEE SCIENTIFIC","model": "INT-2000","title": "For Sale KEWAUNEE SCIENTIFIC INT-2000 CLASS II A2 BIOLOGICAL SAFETY CABINET","condition": "Used","priceUsd": 750,"priceCurrency": "USD","priceText": "$750.00 USD","description": "...Condition Good: Powers On Our Notes UV light, fan, light, receptacles all work. Untested for full functionality","specifications": null,"sellerCompany": "Tekyard LLC","sellerLocation": null,"sellerType": null,"listingType": "listing","currentBidUsd": null,"bidCount": null,"auctionEndsAt": null,"imageUrls": ["https://images.dotmed.com/cgi-bin/size.pl?i=5620515.jpg&s=640&t=2"],"inStock": true,"listedAt": null}
See sample.json for 13 real items from a real run, spanning imaging,
cardiology, dental, and surgical categories, both auctions and fixed
listings.
Data dictionary
| Field | Type | Meaning | Example |
|---|---|---|---|
id | string | DOTmed's own listing or auction number | "5620515" |
url | string | Canonical URL of the item's own page | "https://www.dotmed.com/listing/.../5620515" |
sourceUrl | string | The category page this item was reached from | "https://www.dotmed.com/browse/equipment/dental/all" |
scrapedAt | string (ISO 8601, UTC) | When this item was fetched | "2026-09-26T19:09:58.000Z" |
category | string | Top-level category as given in Actor input | "dental" |
subcategory | string | null | Equipment type, DOTmed's own label | "Cabinetry - Furnishings" |
manufacturer | string | null | Equipment manufacturer | "KEWAUNEE SCIENTIFIC" |
model | string | null | Model name/number | "INT-2000" |
title | string | null | The listing's own headline | "For Sale KEWAUNEE SCIENTIFIC..." |
condition | string | null | "New", "Used", "Refurbished", "For Parts/Repair" | "Used" |
priceUsd | number | null | Fixed asking price. Null for auctions and "Contact for Price" listings | 750 |
priceCurrency | string | Always "USD" | "USD" |
priceText | string | null | Human-readable price, derived from priceUsd | "$750.00 USD" |
description | string | null | Seller's own notes, boilerplate and contact info stripped | see above |
specifications | null | Reserved — not populated in this version | null |
sellerCompany | string | null | Seller's business name — never a person's name | "Tekyard LLC" |
sellerLocation | null | Reserved — not populated in this version | null |
sellerType | null | Reserved — not populated in this version | null |
listingType | string | "listing" (fixed price) or "auction" | "listing" |
currentBidUsd | number | null | Current highest bid. Only set for auctions | 11000 |
bidCount | integer | null | Number of bids so far. Only set for auctions | 2 |
auctionEndsAt | null | Reserved — not populated in this version | null |
imageUrls | array of strings | This item's own photos | ["https://images.dotmed.com/..."] |
inStock | boolean | null | Whether DOTmed marks it currently available | true |
listedAt | null | Reserved — not populated in this version | null |
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
categories | array of strings | all 11 slugs below | Top-level DOTmed category slugs to crawl: imaging, cardiology, dental, surgical, laboratory, endoscopy, respiratory, neonatal, homecare-rehab, veterinary, ophthalmology — each verified live 2026-09-26. An invalid slug returns 0 items, not an error, so a typo fails quietly; stick to this list. |
manufacturers | array of strings | [] | Optional post-extraction filter — keep only items whose manufacturer name contains one of these (case-insensitive). Empty means no filtering. |
maxItems | integer | 30 | Stop once this many items have been delivered. |
scrapeDetails | boolean | true | Visit each item's own page for full data. When off, only category-page fields are returned (thinner, faster). |
includeAuctions | boolean | true | Include auction items. |
includeListings | boolean | true | Include fixed-price items. |
proxyConfiguration | object | Apify datacenter proxies | Standard Apify proxy editor. The house never uses residential proxies by default. |
Pricing
Pay-per-event. Two events:
- Actor start — $0.02, charged once when the run begins.
- Result — $0.003 per item delivered to the dataset ($3 per 1,000 items).
A run with the default input (4 categories, maxItems: 30,
scrapeDetails: true) costs about $0.02 + 30 × $0.003 = $0.11 and
finishes in under two minutes.
Limits and honesty
- No proxy by default, on purpose. DOTmed returns a fast HTTP 200 but silently strips the embedded product data when a request comes from Apify's shared datacenter proxy pool — confirmed by running the same input with and without the proxy on the real platform. A direct connection under the same declared identity gets full data every time. The default input therefore uses no proxy. If you turn one on and get empty results, this is why — turn it back off.
- Pagination is capped at 15 items per category or subcategory page,
by design, not by accident. DOTmed's own pagination beyond the
first page uses
?offset=query parameters, and DOTmed's robots.txt explicitly disallows/browse/*?*for every crawler. The house does not fetch what robots.txt disallows, whatever depth of data that leaves on the table (Rule 1). Coverage instead comes from crawling many category/subcategory entry points — each yields its own first 15 — rather than paging deep into one. A single category input therefore reliably returns at most 15 stub-level items unless you list more categories. specifications,sellerLocation,sellerType,auctionEndsAt, andlistedAtare always null in this version. DOTmed does not expose these consistently enough on the page (structured specs aren't reliably present; seller location is unstructured shipping prose; the auction countdown is rendered client-side in JavaScript, not in the static HTML this Actor fetches) to fill them without guessing. They're declared in the schema as reserved fields rather than omitted, so a future version can populate them without breaking the shape buyers already depend on.- Keyword search is not implemented. DOTmed's site-wide search
action points at
/listings/search/equipment.html, a path this version has not verified is safe and complete to crawl (distinct from the/listings/search_equipment.htmlpath robots.txt explicitly disallows). Category and manufacturer filtering are the supported way to narrow results for now. - The description field is a filter, not a guarantee. DOTmed's standard shipping/returns/warranty/FDA-disclaimer boilerplate — which sometimes carries a private seller's own address in a template line — is cut from the description before output, and any remaining phone/email/contact-prose pattern is redacted. This catches the common shapes; it is not a certified absence of every possible personal-data pattern in free text a third party wrote.
- How often the source changes: DOTmed lists roughly 800,000+ active listings across all categories; individual auctions close on their own schedule (hours to weeks) and fixed listings can be posted, sold, or removed at any time. Run daily for freshness on a watched category.
Legal
This Actor fetches only logged-out, publicly browseable pages — category listings and individual item pages — that DOTmed's robots.txt permits for a declared crawler. It never logs in, holds an account, or solves a challenge, so DOTmed's account-level terms are not a contract this house has entered.
DOTmed's Legal Notice and Listings Notice contain standard anti-extraction language, including: "you are not permitted to copy, transmit, publish, reproduce, redistribute, modify, sell, create derivative works or publicly display" content "without prior written authorization" (Legal Notice §2.5), and "You are not permitted to extract any Content, including, data from this site for posting on another website or publication" (Legal Notice §4). This house does not hold a DOTmed account and has not agreed to those terms; the statement DOTmed addresses to automated visitors is its robots.txt, and that is the consent this house honors exactly — every path this Actor fetches is one robots.txt permits. A buyer of this data who separately holds a DOTmed account is bound by whatever terms they personally accepted; that is between the buyer and DOTmed.
No personal data. Every field is either a business entity (a company
name in sellerCompany) or an inherent property of the equipment
listing itself (price, condition, manufacturer, category). Contact
person names, phone numbers, and email addresses are excluded at the
schema level — this Actor never emits a sellerName, contactName,
phone, or email field — and free-text fields are additionally
filtered for contact-prose patterns before output (see "Limits and
honesty" above). You are responsible for how you use this data
downstream.
Changelog
See CHANGELOG.md.
Support
Open an issue on this Actor's Issues tab. The house replies within one day, in plain terms: what happened, what was done, when.