DOTmed Medical Equipment Scraper avatar

DOTmed Medical Equipment Scraper

Pricing

from $6.00 / 1,000 results

Go to Apify Store
DOTmed Medical Equipment Scraper

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

Sub Rosa

Maintained by Community

Actor 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

FieldTypeMeaningExample
idstringDOTmed's own listing or auction number"5620515"
urlstringCanonical URL of the item's own page"https://www.dotmed.com/listing/.../5620515"
sourceUrlstringThe category page this item was reached from"https://www.dotmed.com/browse/equipment/dental/all"
scrapedAtstring (ISO 8601, UTC)When this item was fetched"2026-09-26T19:09:58.000Z"
categorystringTop-level category as given in Actor input"dental"
subcategorystring | nullEquipment type, DOTmed's own label"Cabinetry - Furnishings"
manufacturerstring | nullEquipment manufacturer"KEWAUNEE SCIENTIFIC"
modelstring | nullModel name/number"INT-2000"
titlestring | nullThe listing's own headline"For Sale KEWAUNEE SCIENTIFIC..."
conditionstring | null"New", "Used", "Refurbished", "For Parts/Repair""Used"
priceUsdnumber | nullFixed asking price. Null for auctions and "Contact for Price" listings750
priceCurrencystringAlways "USD""USD"
priceTextstring | nullHuman-readable price, derived from priceUsd"$750.00 USD"
descriptionstring | nullSeller's own notes, boilerplate and contact info strippedsee above
specificationsnullReserved — not populated in this versionnull
sellerCompanystring | nullSeller's business name — never a person's name"Tekyard LLC"
sellerLocationnullReserved — not populated in this versionnull
sellerTypenullReserved — not populated in this versionnull
listingTypestring"listing" (fixed price) or "auction""listing"
currentBidUsdnumber | nullCurrent highest bid. Only set for auctions11000
bidCountinteger | nullNumber of bids so far. Only set for auctions2
auctionEndsAtnullReserved — not populated in this versionnull
imageUrlsarray of stringsThis item's own photos["https://images.dotmed.com/..."]
inStockboolean | nullWhether DOTmed marks it currently availabletrue
listedAtnullReserved — not populated in this versionnull

Input

FieldTypeDefaultMeaning
categoriesarray of stringsall 11 slugs belowTop-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.
manufacturersarray of strings[]Optional post-extraction filter — keep only items whose manufacturer name contains one of these (case-insensitive). Empty means no filtering.
maxItemsinteger30Stop once this many items have been delivered.
scrapeDetailsbooleantrueVisit each item's own page for full data. When off, only category-page fields are returned (thinner, faster).
includeAuctionsbooleantrueInclude auction items.
includeListingsbooleantrueInclude fixed-price items.
proxyConfigurationobjectApify datacenter proxiesStandard 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, and listedAt are 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.html path 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.

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.