Machineseeker APImachineseeker.com ↗
Search, filter, and retrieve used industrial machinery listings from Machineseeker.com. Access prices, specs, seller info, and similar listings via 4 endpoints.
What is the Machineseeker API?
The Machineseeker.com API provides access to used industrial machinery listings across 4 endpoints, covering search, full listing detail, similar listings, and searchable filter facets. The search_listings endpoint returns paginated results with pricing, location, and thumbnails, while get_listing_detail exposes machine specifications, seller information, and full image arrays for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/5954b2c9-33bb-4d0b-af2f-af148ca06a16/search_listings?page=1&query=excavator&category_ids=8&manufacturers=Caterpillar' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace machineseeker-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Machineseeker SDK — search machinery, drill into details, explore filters."""
from parse_apis.machineseeker_api import Machineseeker, ListingNotFound
client = Machineseeker()
# Search for excavators — limit caps total items fetched across pages.
for listing in client.listingsummaries.search(query="excavator", limit=3):
print(listing.title, listing.price, listing.location)
# Drill into the first result's full details.
first = client.listingsummaries.search(query="CNC lathe", limit=1).first()
if first:
detail = first.details()
print(detail.title, detail.price)
print(detail.description[:120])
print(detail.seller.location, detail.seller.registered_since)
# Fetch a listing directly by ID.
try:
machine = client.listings.get(listing_id="22100193")
print(machine.title, machine.specifications)
except ListingNotFound as exc:
print(f"Listing gone: {exc.listing_id}")
# Explore available filters for a query.
filters = client.filters.get(query="excavator")
for opt in filters.category.options[:3]:
print(opt.name, opt.value, opt.count)
print("exercised: listingsummaries.search / .details / listings.get / filters.get")
Search for machinery listings by keyword with optional filters and pagination. Returns a paginated list of matching listings with basic details including title, price, location, and condition.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| query | string | Search keyword (e.g. 'CNC lathe', 'excavator'). Omitting returns all listings. |
| category_ids | string | Category ID to filter by (e.g. '8' for Construction machinery). Values available from get_search_filters. |
| manufacturers | string | Manufacturer name to filter by (e.g. 'Caterpillar'). Values available from get_search_filters. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"listings": "array of listing objects with listing_id, title, url, price, location, thumbnail, details_snippet",
"total_results": "string with total result count text"
},
"sample": {
"data": {
"page": 1,
"listings": [
{
"url": "https://www.machineseeker.com/neuson-12002+rd/i-22100193",
"price": "€29,500 Fixed price plus VAT",
"title": "Chain excavator NEUSON 12002 RD",
"location": "Raesfeld",
"thumbnail": "https://cdn.machineseeker.com/data/listing/img/vga/ms/68/41/22100193-01.jpg?v=1781122129",
"listing_id": "22100193",
"details_snippet": {
"year": "2002",
"condition": "good (used)"
}
}
],
"total_results": "Show 1,319 results"
},
"status": "success"
}
}About the Machineseeker API
Search and Filter Listings
The search_listings endpoint accepts a query string (e.g. 'CNC lathe', 'excavator') along with optional category_ids and manufacturers parameters to narrow results. Each page of results returns an array of listing objects containing listing_id, title, url, price, location, thumbnail, and details_snippet. The total_results field provides the result count as text. To discover valid values for category_ids and manufacturers, call get_search_filters first — it returns facet options with counts for any given query.
Listing Detail and Similar Equipment
Passing a listing_id from search results to get_listing_detail returns the full record: a specifications key-value object with machine-specific attributes, a description text field, an images array of URLs, the full price string with currency, and a seller object with seller information. The optional slug parameter improves routing but is not required. The get_similar_listings endpoint accepts the same listing_id and returns an array of related listings, each with title, price, location, thumbnail, url, and a details_snippet object containing year and condition when available.
Filter Facets
get_search_filters returns six filter groups — category, location, condition, machine_details, type_of_listing, and details — each containing a heading and an options array with counts. Calling it with a query parameter returns counts scoped to that search context; omitting the query returns global facet counts. This makes it the right first call when building dynamic filter interfaces or discovering which manufacturer or category names are valid inputs for search_listings.
The Machineseeker API is a managed, monitored endpoint for machineseeker.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when machineseeker.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official machineseeker.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregating used CNC machine listings with prices and locations for a procurement comparison tool
- Monitoring price changes for specific machinery types by periodically querying
search_listingswith a category filter - Building a category browser using
get_search_filtersto surface available machine types and their listing counts - Enriching an internal asset database with full specifications and images from
get_listing_detail - Powering a 'related equipment' recommendation widget using
get_similar_listingsresults - Filtering listings by manufacturer and condition to source second-hand equipment from verified sellers
- Extracting seller contact and location data for industrial equipment dealers from listing detail records
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Machineseeker have an official developer API?+
What does `get_search_filters` return, and how should I use it with `search_listings`?+
get_search_filters returns six facet groups: category, location, condition, machine_details, type_of_listing, and details. Each group has a heading and an options array with counts. When you pass a query parameter, counts reflect that search context. Use the option values from category and machine_details as category_ids and manufacturers inputs in search_listings to ensure you're passing values the source recognizes.Does pagination work across all search results?+
search_listings accepts a page integer for pagination and returns the current page number and a total_results string. The total is returned as text rather than a parsed integer, so your code should handle string-to-number conversion. Very large result sets may have practical page depth limits depending on how the source structures deep pagination.Does the API return seller contact details such as phone numbers or email addresses?+
get_listing_detail endpoint returns a seller object with seller information, but the specific fields within that object (such as phone or email) depend on what the listing publicly exposes. Direct contact fields are not guaranteed for every listing. You can fork this API on Parse and revise it to add any additional seller fields that appear in the source data.Can I filter search results by price range or year of manufacture?+
search_listings endpoint supports filtering by category_ids and manufacturers only. Price range and year filters are not directly available as input parameters. You can fork this API on Parse and revise it to add those filter parameters if they are surfaced in the get_search_filters detail options.