GOAT Scraper - Sneaker Asks, Last Sale, Sizes & Prices
Pricing
from $1.00 / 1,000 product results
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
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
12 days ago
Last modified
Categories
Share
GOAT Scraper: Sneaker Asks, Last Sale, Sizes & Prices
GOAT Scraper turns GOAT, the sneaker and streetwear resale marketplace, into structured product data. Search by keyword, browse the catalogue with filters alone, or paste GOAT product, search, brand, collection and category links. 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 size in the market you choose. Export the dataset as JSON, CSV or Excel, or pull it straight into your app through the API.
Why This Scraper?
- Four ways to reach the catalogue. Search by keyword, browse by filters alone, or paste GOAT product, search, brand, collection and category links. A pasted browse link is paged like a search; a pasted product link always returns that single product in full.
- Full product identity every time. Brand, SKU, colorway, designer, silhouette, sizing, release date, retail price, images and the product story, whichever mode found it.
- The live per size market table on demand. Turn on Fetch full market data for the lowest ask, Instant Ship price, last sold price and stock status for every size, and pay the extra fee only when you use it.
- A real ship-to market, not a currency label. GOAT prices and stocks sizes differently per country, so switching Market genuinely changes which sizes and prices come back, not just how they are labelled.
- Server side filters. Brand, category, activity, gender, condition, size, price and release year all narrow GOAT's own search, so a filtered run reads fewer pages instead of throwing rows away afterwards.
- Built for monitoring. Incremental mode returns only new and changed products on recurring runs, and price, ask or stock moves are reported as the signal they are on a resale marketplace, not filtered out as noise.
- Fails loudly instead of going quiet. A run the site refuses stops with a clear message, so "nothing matched this search" is never confused with "GOAT could not be reached".
Use Cases
- Resale investors and flippers: compare lowest ask, last sale and Instant Ship price across sizes to spot underpriced pairs.
- Sneaker release trackers: monitor new drops and price movement on hyped releases as soon as they land on GOAT.
- Marketplace and price comparison tools: feed product identity, retail price and live market data into your own app or tracker.
- Reselling and inventory businesses: check stock status and per size pricing across a catalogue before buying or listing.
- Market research and data science: build a history of ask and sale prices per size for sneaker market analysis.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
productId, slug, url | GOAT's product id, its URL slug and the product page link |
name, nickname | Full product name and its short nickname |
brand, sku, colorway, color | Brand, style code, colorway text and base colour |
designer, silhouette, midsole, upperMaterial | Design attributes, when GOAT publishes them |
productCategory, productType, activities | Shoes, clothing or accessories, product type, and activity tags |
gender, genders | Primary audience and every audience it is cut for |
sizeRange, sizeUnit, sizeBrand | Every size the product exists in, and the sizing system |
releaseDate, releaseYear, releaseMonth, season | Release data |
retailPrice | Original retail price, USD |
lowestAsk, instantShipLowestAsk | Lowest ask and Instant Ship price, USD |
lowestAskSource | "search_match" (the one variant matched) or "all_sizes" (true minimum, with Fetch full market data on) |
matchedSize, matchedCondition, matchedBoxCondition | The variant GOAT's own search matched |
isUnderRetail, hasStock, status | Whether it sits under retail, whether there is stock, listing status |
minimumOffer, maximumOffer | The offer bounds GOAT enforces |
story, storyHtml | The product write-up, plain and as HTML |
imageUrl, gridImageUrl, originalImageUrl | Product images |
collectionSlugs | GOAT collections the product is featured in |
market, currency, localPricing | The market you asked for, and the retail price and ask in that market's own currency |
siteName, scrapedAt | Provenance |
sizes[] | With Fetch full market data on: one row per size, with condition, lowest ask, Instant Ship price, last sale and stock status |
lastSale, lastSaleLow, lastSaleHigh, totalSizeCount | With Fetch full market data on: recent sale price roll up and market depth |
changeType, changedFields, firstSeenAt, lastSeenAt | Incremental mode only: how the product changed since the last run |
With Fetch full market data on, a row also carries the full image gallery (imageUrls), every size option GOAT lists, classification flags (taxonomy, isOfferable, isResellable) and per condition listing counts. detailCarriedForward appears, and is true, only when a market fetch failed and the row was repaired from the previous run instead of left blank.
How to Use
- Pick a mode:
search(by keyword) orurl(paste GOAT links). - For search mode, fill in Search terms, or leave it empty and set filters alone to browse the whole catalogue. For URL mode, paste product, search, brand, collection or category links; the same filters apply to every pasted browse link.
- Turn on Fetch full market data if you need the per size ask, Instant Ship price, last sale and stock table, and set Max items to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Keyword search:
{"mode": "search","searchTerms": ["air jordan 1", "nike dunk low"],"maxItems": 50}
Browse the catalogue with filters alone (no search terms):
{"mode": "search","searchTerms": [],"brands": ["Nike"],"activity": "basketball","maxPriceUsd": 150,"releaseYearFrom": 2024,"maxItems": 200}
Paste GOAT links, with full market data:
{"mode": "url","urls": ["https://www.goat.com/brands/new-balance","https://www.goat.com/sneakers"],"fetchDetails": true,"maxItems": 100}
A different ship-to market, Instant Ship stock only:
{"mode": "search","searchTerms": ["yeezy 350"],"market": "GB","instantShipOnly": true,"maxItems": 30}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/goat-sneaker-scraper").call(run_input={"mode": "search", "searchTerms": ["air jordan 1"], "maxItems": 20})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product["lowestAsk"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/goat-sneaker-scraper').call({ mode: 'search', searchTerms: ['air jordan 1'], maxItems: 20 });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max items and GOAT's own limits
GOAT's own search returns at most 1000 products for any single search term, brand, collection or category link; the run logs it when this ceiling truncates a scope. Max items is the cap on top of that: raise it, or set it to 0, to collect everything up to GOAT's own ceiling. Max pages is a separate safety bound on how many result pages one search term or link can walk; leave it at 0 to let Max items decide instead.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every product it already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduled runs over the same search, filters and market. Each product is classifiedNEW,UPDATED(withchangedFields, since a price, ask or stock move is the signal on a resale marketplace, not noise),UNCHANGED(suppressed and not billed unlessemitUnchangedis on),REAPPEAREDorEXPIRED(only after a run that scanned the whole tracked scope, and only withemitExpired).stateKeynames or shares the stored state, so two differently configured searches never mix. With incremental mode off, output is exactly as before.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (GOAT keyword search) or url (process pasted GOAT links). |
searchTerms | array | ["air jordan 1"] | Terms to search GOAT for (search mode). Leave empty with a filter set to browse the whole catalogue. |
urls | array | (none) | GOAT product, search, brand, collection or category links (url mode). Add ?page=3 to a browse link to start walking from that page. |
brands | array | (none) | Only these brands, OR-ed together. Applies in both modes. |
productCategory | string | any | shoes, clothing, accessories, bags or collectibles. Applies in both modes. |
activity | string | any | lifestyle, running, basketball or skateboarding. Applies in both modes. |
gender | string | any | men, women, youth or infant. Applies in both modes. |
condition | string | any | new_no_defects, new_with_defects or used. Also narrows the per size market table when Fetch full market data is on. |
sizeUs | string | (none) | Only this US size, for example 10 or 9.5. |
minPriceUsd | integer | (none) | Only products whose lowest ask is at least this many USD. |
maxPriceUsd | integer | (none) | Only products whose lowest ask is at most this many USD. |
releaseYearFrom | integer | (none) | Only products released in this year or later. |
releaseYearTo | integer | (none) | Only products released in this year or earlier. |
inStockOnly | boolean | false | Only products that currently have stock on GOAT. |
instantShipOnly | boolean | false | Only products with an Instant Ship price. |
underRetailOnly | boolean | false | Only products whose lowest ask is below retail price. |
market | string | US | Ship-to market: US, GB, CA, AU, DE or JP. Changes which sizes and prices come back; top level money fields stay USD. |
sortResultsBy | string | relevance | Order of the rows this run collected (not the whole catalogue): relevance, price_asc, price_desc, release_newest or release_oldest. Use the price filters to target the cheapest or dearest listings across the whole catalogue. |
fetchDetails | boolean | false | Fetch each product's live per size market table (lowest ask, Instant Ship price, last sold price, stock status), full image gallery, offer bounds and for sale counts. Charged once per product on top of the per result fee. |
maxItems | integer | 20 | Stop after this many products across all search terms and links. 0 = unlimited (up to GOAT's own ceiling). |
maxPages | integer | 0 | Safety bound on result pages walked per search term or link. 0 = no separate limit; Max items decides instead. |
resumeFromRunId | string | (none) | Continue one interrupted run: paste its run id or dataset id. |
incrementalMode | boolean | false | Return only new and changed products on scheduled runs over the same search. |
stateKey | string | (none) | Name or share an incremental-mode state. Left empty, a key is derived automatically from the mode, search terms, links, filters, market and the Fetch full market data setting. |
emitUnchanged | boolean | false | Also return (and bill) products unchanged since the last run. |
emitExpired | boolean | false | Also return (and bill) products no longer found, after a complete scan of the tracked search. |
proxy | object | Apify Proxy | Connection settings. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"productId": 90000001,"slug": "sample-brand-classic-runner-ab1234-100","url": "https://www.goat.com/sneakers/sample-brand-classic-runner-ab1234-100","name": "Sample Brand Classic Runner","nickname": "Classic Runner","brand": "Sample Brand","sku": "AB1234-100","colorway": "White/Black","color": "White","productCategory": "shoes","productType": "sneakers","gender": "men","sizeRange": ["7", "8", "9", "10", "11"],"releaseDate": "2024-03-01T00:00:00.000Z","releaseYear": 2024,"retailPrice": 120.0,"lowestAsk": 95.0,"instantShipLowestAsk": 110.0,"lowestAskSource": "all_sizes","isUnderRetail": true,"hasStock": true,"status": "active","imageUrl": "https://image.goat.com/sample-1.png","market": "US","currency": "USD","localPricing": { "currency": "USD", "retailPrice": 120.0, "lowestAsk": 95.0 },"sizes": [{"size": "9","shoeCondition": "new_no_defects","boxCondition": "good_condition","lowestAsk": 100.0,"instantShipLowestAsk": 115.0,"lastSale": 98.0,"stockStatus": "single_in_stock"},{"size": "10","shoeCondition": "new_no_defects","boxCondition": "good_condition","lowestAsk": 95.0,"instantShipLowestAsk": 110.0,"lastSale": 102.0,"stockStatus": "multiple_in_stock"}],"lowestAskSize": "10","lastSale": 100.0,"lastSaleLow": 98.0,"lastSaleHigh": 102.0,"totalSizeCount": 2,"siteName": "GOAT","scrapedAt": "2026-01-01T00:00:00Z"}
Plan Requirement
The default proxy setting works out of the box, and the actor rotates connections automatically when one is refused. Apify Residential is available under Connection as a fallback if you start seeing refusals. Fetch full market data is billed once per product on top of the per result fee; a catalogue only run never triggers that extra charge. The Pricing tab shows the current rates.
FAQ
How much does it cost?
You pay per product returned, plus once per product when Fetch full market data is switched on. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape GOAT?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow GOAT's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product images and write ups may be subject to third party rights.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and changed products, and unchanged ones are not billed. A price, ask or stock move is reported as an update, since that is the signal on a resale marketplace.
Why did a run return fewer products than I expected?
GOAT's own search returns at most 1000 products for any single search term, brand, collection or category link; 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, or check whether Max items stopped the run first.
Why did my run fail instead of returning an empty dataset?
If GOAT refuses every request, the run stops with a clear message so "nothing matched this search" is never confused with "nothing could be read". Run it again in a few minutes, or switch the Proxy setting to Apify Residential.
Can I automate this with my own tools?
Yes. Call it from the Apify API or client libraries, schedule it, or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
๐ Want more fashion data?
Pair this actor with these related scrapers from the same team:
| ๐ KREAM Korea Scraper Scrape KREAM (kream.co.kr) sneaker and fashion resale data by keyword search, filters... | ๐ StockX Scraper Scrape StockX market data by keyword, category or URL. Every row carries lowest ask... |
| ๐ KLEKT Sneaker & Apparel Resale Scraper Scrape sneaker and streetwear listings from KLEKT (klekt.com). Browse the catalog with... | ๐ท๏ธ ThredUp Scraper Scrape ThredUp resale listings by keyword, department, brand, size, condition, price or... |
| ๐ 24S Scraper Scrape 24S luxury fashion by category, filters, or URL. Extract brand, name, price... | ๐ UNIQLO Scraper Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.