@pipeworx/estatesales-net

Connect: https://gateway.pipeworx.io/estatesales-net/mcp · Install: one-click buttons

Tools: 3

Upcoming estate sales, moving sales and estate auctions near a US ZIP code, from EstateSales.NET — the largest US estate-sale listing site — plus the companies that run them.

Tools

  • estatesales_search(postal_code) — the upcoming sales nearest a ZIP: sale ID, type, city/state/ZIP, coordinates, distance, schedule, start/end dates.
  • estatesales_sale(sale_id) — one sale in full: name, description, terms, every scheduled date, coordinates, picture count, and the company running it with phone and page. Street address only once the site has released it (see below).
  • estatesales_companies(postal_code) — estate-sale businesses working that ZIP: name, business address, phone, coordinates, listing tier.

Auth

Keyless. No account, no token, no registration.

The official EstateSales.NET API is a different thing, and it is not usable here

EstateSales.NET does publish a documented beta REST API (https://github.com/vintage-software/EstateSales.NET-Api), and the obvious reading is that this pack should use it. It should not. That API is seller-side only — every endpoint is scoped to your own OrgId:

GET    /api/public-sales/org/{OrgId}      your org's sales
GET    /api/public-sales/{saleId}         403 without your org's token
POST   /api/public-sales/                 create a sale
PUT    /api/public-sales/{saleId}         edit a sale
POST   /api/public-sales/{saleId}/publish
POST   /api/sale-dates/ · /api/sale-pictures/

It is how an estate-sale company lists its own sales. There is no search endpoint in it at all, its keys are issued from an estate-sale company account (/account/company/api-keys), and a key would only ever return our own empty org. It cannot answer a buyer’s question, so no PLATFORM_ESTATESALES_KEY exists and none would help.

What this pack reads instead is the site’s own public buyer-facing data — the structured JSON the website itself renders from, no credentials involved.

Addresses are embargoed by the publisher, and this pack honors that

An estate sale is usually held at a private home, so EstateSales.NET withholds the street address until shortly before the sale (showAddress, utcShowAddressAfter, showAddressType). estatesales_sale returns the address only when the site has already published it; otherwise it returns address_published: false, the release time in address_visible_after_utc, and a note. Coordinates and city/ZIP are always present, since the site publishes those from the start.

Do not route around this. The embargo is the publisher’s decision about someone’s home, not a technical quirk.

No prices

EstateSales.NET lists upcoming sales. It publishes no hammer prices and no realized-sale data, so nothing here is a comp. Every response says so in a price_data field.

Data sources

  • https://www.estatesales.net/{ST}/{City}/{ZIP} — city sale listing.
  • https://www.estatesales.net/{ST}/{City}/{ZIP}/{saleId} — sale detail.
  • https://www.estatesales.net/companies/{ST}/{City}/{ZIP} — company listing.

Things worth not rediscovering:

  • The pages carry their data as JSON, not markup. Each embeds a script tag with id="estatesales-net-state" and type="application/json", holding {"NGRX_STATE": …} — Angular transfer state. Sales are at feature.cityViewState.filteredSales, a sale at feature.traditionalSaleViewState.entitiesById[saleId], companies at feature.companiesCityViewState.companies. Anchor on the script tag’s id: matching type="application/json" alone also hits the analytics blocks.
  • The site canonicalises its own location URLs, which is why every tool here needs only a ZIP or a sale ID. /XX/x/64111 redirects to /MO/Kansas-City/64111, and /XX/x/00000/{saleId} redirects to the sale’s real path. Never hand-build the city slug.
  • A city page lists 20 sales regardless of how many exist; filteredSaleCount and totalSaleCount report the real depth (e.g. 64111: 20 listed, 61 filtered, 97 total). There is no page parameter — the site loads the rest client-side. Report the counts rather than implying 20 is all.
  • Dates arrive wrapped as {"_type":"DateTime","_value":"…"}; this pack unwraps them to ISO strings.
  • GET /api/sales/{id} is public and keyless, but returns only bookkeeping (org id, type, timestamps) — no address, dates, description or pictures. The page state has all of those, which is why the pack uses it. GET /api/public-sales/{id} (the official API’s path) is 403 without a seller token.
  • /api/sales?postalCodeNumber=… answers HTTP 400 “Permissions denied on filter” — the filter is not public. That error means the endpoint exists, not that the site is down.

Tools

  • estatesales_search — Upcoming estate sales, moving sales and estate auctions near a US ZIP code, from EstateSales.NET — the largest US estate-sale listing site. Returns each sale’s ID, city/state/ZIP, coordinates, distanc
  • estatesales_sale — One EstateSales.NET sale in full, by sale ID: name, description, terms, sale type, every scheduled date/time, coordinates, picture count, and the company or seller running it with their phone and page
  • estatesales_companies — Estate-sale companies operating near a US ZIP code, as listed on EstateSales.NET: company name, business address, phone, coordinates and their EstateSales.NET page. Answers “who runs estate sales in t

Tools

  • estatesales_companies — Estate-sale companies operating near a US ZIP code, as listed on EstateSales.NET: company name, business address, phone, coordinates and their EstateSales.NET page. Answers who runs estate sales in th
  • estatesales_sale — One EstateSales.NET sale in full, by sale ID: name, description, terms, sale type, every scheduled date/time, coordinates, picture count, and the company or seller running it with their phone and page
  • estatesales_search — Upcoming estate sales, moving sales and estate auctions near a US ZIP code, from EstateSales.NET — the largest US estate-sale listing site. Returns each sale's ID, city/state/ZIP, coordinates, distanc

Regenerated from source · build September 5, 2026