GOAT Scraper - Sneaker Asks, Last Sale, Sizes & Prices avatar

GOAT Scraper - Sneaker Asks, Last Sale, Sizes & Prices

Pricing

from $1.00 / 1,000 product results

Go to Apify Store
GOAT Scraper - Sneaker Asks, Last Sale, Sizes & Prices

GOAT Scraper - Sneaker Asks, Last Sale, Sizes & Prices

Scrape GOAT (goat.com), the sneaker and streetwear resale marketplace. Search or paste product, brand, collection and category URLs. 45+ fields per product: lowest ask, Instant Ship price, last sale and stock status for every size, retail, SKU, colorway, release date, images and story.

Pricing

from $1.00 / 1,000 product results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

GOAT Sneaker Marketplace Scraper

Scrape GOAT, the sneaker and streetwear resale marketplace, at product level. Search by keyword, browse the catalogue with filters alone, or paste GOAT product, search, brand, collection and category URLs.

Every product comes back with its full identity and, with Fetch full market data on, the live per size market table: lowest ask, Instant Ship price, last sold price and stock status for every single size, in the market you choose.

What you get

Always

FieldWhat it is
productId, slug, urlGOAT's product id, URL slug and product page link
name, nicknameFull product name and its short nickname
brand, sku, colorway, colorBrand, style code, colorway text and base colour
designer, silhouette, midsole, upperMaterialDesign attributes
productCategory, productType, activitiesShoes / clothing / accessories, type, and activity tags
gender, gendersPrimary audience and every audience it is cut for
sizeRange, sizeUnit, sizeBrandEvery size the product exists in, and the sizing system
releaseDate, releaseYear, releaseMonth, seasonRelease data
retailPriceOriginal retail price, USD
lowestAsk, instantShipLowestAskLowest ask and Instant Ship price, USD
lowestAskSourceall_sizes (true minimum across every size) or search_match (the one variant GOAT's search matched)
matchedSize, matchedCondition, matchedBoxConditionThe variant GOAT's search matched
isUnderRetail, hasStock, statusWhether it sits under retail, whether there is stock, listing status
minimumOffer, maximumOfferThe offer bounds GOAT enforces
story, storyHtmlThe product write-up, plain and as HTML
imageUrl, gridImageUrl, originalImageUrlProduct images
collectionSlugsGOAT collections the product is featured in
market, currency, localPricingThe market you asked for, and the retail/ask in that market's own currency
siteName, scrapedAtProvenance

With fetchDetails on

FieldWhat it is
sizes[]One row per size: size, shoeCondition, boxCondition, lowestAsk, instantShipLowestAsk, lastSale, stockStatus
lowestAsk, lowestAskSize, highestAskTrue lowest ask across every size, the size it is on, and the highest
lastSale, lastSaleLow, lastSaleHigh, lastSaleSizeCountMedian, cheapest and dearest most-recent sale price across sizes
totalSizeCount, sizesWithAskCount, inStockSizeCount, instantShipSizeCountDepth of the market on this product
imageUrls[]The full image gallery, not just the hero shot
sizeOptions[]Every size option GOAT lists for the product
taxonomy, isOfferable, isResellableClassification and trade flags
usedForSaleCount, withDefectForSaleCount, sellingCountHow many listings exist per condition
detailCarriedForwardPresent and true only when a market fetch failed and the row was repaired from the previous run

In incremental mode

changeType (NEW / UPDATED / REAPPEARED / UNCHANGED / EXPIRED), changedFields, firstSeenAt, lastSeenAt.

Modes

Give one or more search terms. Each is scraped independently.

{ "mode": "search", "searchTerms": ["air jordan 1", "nike dunk low"], "maxItems": 50 }

Leave searchTerms empty and set filters instead to browse the catalogue itself, for example every Nike basketball shoe under $150 released since 2024:

{
"mode": "search",
"searchTerms": [],
"brands": ["Nike"],
"activity": "basketball",
"maxPriceUsd": 150,
"releaseYearFrom": 2024,
"maxItems": 200
}

URL

Paste any of these and the actor works out what to do with it:

URLWhat happens
https://www.goat.com/sneakers/<slug>That one product, in full
https://www.goat.com/search?query=travis+scottPaged like a keyword search
https://www.goat.com/brands/new-balanceThe brand, resolved to GOAT's own brand name
https://www.goat.com/collections/<slug>That collection
https://www.goat.com/sneakers (or /apparel, /accessories)That category
any browse URL with ?page=3Starts the walk at page 3

The filters apply to every pasted browse URL as well. A pasted product URL is the one exception: it always returns that single product in full.

Filters

All of them are sent to GOAT's own search, so a filtered run reads fewer pages instead of throwing rows away afterwards.

brands, productCategory, activity, gender, condition, sizeUs, minPriceUsd, maxPriceUsd, releaseYearFrom, releaseYearTo, inStockOnly, instantShipOnly, underRetailOnly.

condition also narrows the per size market table, so the lowest ask and last sale you get back are for that condition only.

Ship-to market

market (US, GB, CA, AU, DE, JP) is a real narrowing, not a currency label. GOAT offers different sizes at different prices per country, so switching markets changes the asks, the last sale prices and which sizes come back. Top level money fields stay in USD so rows remain comparable; the market's own currency is carried in localPricing.

Recurring monitoring

Turn on Incremental changes for scheduled runs and schedule the actor. The first run returns everything as NEW; later runs return only what changed. Price, ask and stock moves are reported as UPDATED with the exact fields listed in changedFields, because on a resale marketplace those are the signal rather than noise.

  • State is kept per search, URL, filter and market setup, so two different searches never mix.
  • emitUnchanged and emitExpired are off by default. Both return, and bill, extra rows.
  • EXPIRED is only produced after a run has fully scanned the tracked search. A run that was capped by Max items, resumed, blocked, or truncated by GOAT's own 1000-product search limit never marks anything expired.

To continue one specific interrupted crawl instead, paste its run id into Resume from a previous run. Products that run already collected are skipped, and not charged again.

Limits worth knowing

  • GOAT's search returns at most 1000 products per query. A very broad scope is truncated there, and the run says so in the log. Narrow it with the brand, category, size, price or release year filters to reach the rest.
  • GOAT does not publish highest bid, bid counts or a historical sales chart on its public surfaces. The deepest sales signal it does publish is the most recent sale price per size, which this actor returns in sizes[].lastSale plus the lastSale / lastSaleLow / lastSaleHigh roll-up.

Costs

You are charged once when the run starts, once for every product returned, and once more per product when Fetch full market data is on. A catalogue-only run never triggers the third charge. The Store page shows the current rates.

Connection

The default proxy setting works on every plan. Apify Residential is available in the Proxy setting as a fallback if you start seeing refusals.

Output example

{
"productId": 651566,
"slug": "air-jordan-1-mid-chicago-554724-173",
"url": "https://www.goat.com/sneakers/air-jordan-1-mid-chicago-554724-173",
"name": "Air Jordan 1 Mid 'Chicago'",
"brand": "Air Jordan",
"sku": "554724 173",
"colorway": "White/Gym Red/Black",
"productCategory": "shoes",
"gender": "men",
"retailPrice": 115.0,
"lowestAsk": 52.0,
"lowestAskSize": "8",
"highestAsk": 334.0,
"lowestAskSource": "all_sizes",
"instantShipLowestAsk": 75.0,
"lastSale": 145.0,
"lastSaleLow": 44.0,
"lastSaleHigh": 307.0,
"lastSaleSizeCount": 111,
"totalSizeCount": 123,
"sizesWithAskCount": 64,
"inStockSizeCount": 64,
"instantShipSizeCount": 14,
"hasStock": true,
"releaseDate": "2020-09-09T23:59:59.999Z",
"market": "US",
"currency": "USD",
"localPricing": {
"currency": "USD",
"retailPrice": 115.0,
"lowestAsk": 52.0
},
"sizes": [
{
"size": "7",
"sizeValue": 7,
"shoeCondition": "new_no_defects",
"boxCondition": "good_condition",
"lowestAsk": 188.0,
"instantShipLowestAsk": 202.0,
"lastSale": 120.0,
"stockStatus": "single_in_stock"
}
],
"siteName": "GOAT"
}

Verification

2026-09-01: audit re-derived the live catalogue counts from the search index the actor queries. Narrowing is monotone: 609,262 products unfiltered, 2,383 for the keyword "air jordan 1", 39 with the brand facet, 25 with the gender facet, 12 with a size facet, 6 inside a price band. Every documented filter maps to a live facet or numeric field. All five URL shapes verified: a product page returns one full record, a search URL paginates (1,351 matches), a brand page resolves to the index's own brand name (23,788), a collection page filters on its slug (83 for a live collection), and a category page maps to its product category (149,011).