Gap US Scraper at a glance
Gap US Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes product, storefront, price, was and discount %, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Other
- Region
- North America
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.60 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 31 options
Scrape Gap US (gap.com) clothing and fashion products by category. Extract product names, prices, discounts, ratings, stock availability, colors, color-specific details and full descriptions. Ideal for price monitoring, competitor analysis and retail research.
What Gap US Scraper can do
- Six storefronts, one input. Tick any mix of Gap, Old Navy, Banana Republic, Athleta, Gap Factory and Banana Republic Factory; every keyword and category runs in each, and pasted links go to the store they belong to.
- Up to 200 colour listings per request, at no extra cost. Category and search pages already carry price, was-price, discount, rating, review count, every colour with its price, stock count and image, so a plain run is the cheapest way to watch a whole department.
- Prices per colour, filters at the source. The same style can be priced differently per colour: the row gives the lowest and highest price and colors gives each colour's own price, was-price, discount, price type and stock. Price window, on-sale, minimum rating and sort order are applied by the store, and the filters you tick on the site (written after the # in a category link) are applied too.
- Full detail on demand. Product pages add the description, fit and size notes, fabric composition and care, merchandise department, size chart link, breadcrumbs, colour galleries and videos, and a size table with a barcode, stock status and price for every colour and size.
- Customer voice included. Review text, stars, title, date, public display name, helpful votes, the verified-purchase flag and how the item fit, in the order you choose, plus the rating breakdown and recommended share, optionally with the photos reviewers attached.
- Built for monitoring. Incremental mode returns only new, changed and, optionally, delisted products on a schedule, a price-only mode keeps description edits out of your bill, and a refused run fails loudly instead of returning an empty dataset.
Choose what to collect
These inputs let you configure Gap US Scraper - Clothing, Prices, Discounts & Stock. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose 'search' to search by keyword, 'category' to pick category pages by name, or 'url' to scrape pasted links. Each mode reads only its own fields below. |
brandsarray | Which storefronts to search or browse. Gap is used when none is ticked. Each keyword and category is run in every ticked storefront. Pasted links ignore this setting, except a bare product number, which is read in the first ticked storefront. |
queriesarray | Words to search for, for example 'denim jacket'. One search per keyword and storefront; duplicates are searched once. Up to 50 keywords. Read only in search mode. |
categoryKeywordsarray | Words from the category's address, for example 'women dresses' or 'sweaters'. Several phrases select several categories. Read only in category mode. |
maxCategoriesinteger | At most this many matching categories are walked in each ticked storefront (the broadest names are taken first). |
urlsarray | Storefront links to scrape directly. A category link may carry the filters the site writes after the # sign; they win over the price, sale and rating settings below. A product link always reads the product page. Read only in url mode. |
sortBystring | Order of the results in category and keyword scopes. A sort order written into a pasted category link wins. 'Relevance' keeps the store's own order. |
Show 24 more inputs
| Input | What it controls |
|---|---|
minPricenumber | Only products with a colour priced at or above this amount. Leave empty for no lower limit. |
maxPricenumber | Only products with a colour priced at or below this amount. Leave empty for no upper limit. |
onSaleOnlyboolean | Only products with at least one colour marked down (sale or clearance price). |
minRatingnumber | Only products rated at or above this average (0 to 5). Products without reviews are excluded. |
fetchDetailsboolean | Search and category scopes only: read every product's own page for the full description, fit and fabric text, size and barcode table, breadcrumbs and rating breakdown. Off by default because it costs one extra page per product. Pasted product links always read the product page (there is no result card behind them), so those rows are always billed one 'Product page detail' event whatever this toggle says. |
fetchReviewsboolean | Add customer reviews to every product row (this also reads the product page, so the detail surcharge applies). Billed per review returned. |
maxReviewsPerProductinteger | Reviews to collect per product when 'Collect customer reviews' is on. Up to 1000. |
reviewSortstring | Which reviews come first when a product has more than the maximum. |
includeReviewPhotosboolean | Add the links of photos customers attached to their reviews. |
maxItemsinteger | Maximum number of products to return across the whole run, EXPIRED rows from Incremental mode included. This is the run's cap. Use 0 for the maximum of 100000 products per run. |
maxPagesinteger | Maximum number of result pages to take per keyword or category. Each page carries up to 200 colour listings (roughly 100 to 180 products). 0 = no page limit set; the run then stops at Max products, when there are no more results, or at a safety limit of 2000 pages per keyword or category (far above what Max products can reach). Product links have no result pages. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning or charging for products already collected there. Use this after an interrupted run. For recurring monitoring of the same scope, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products, which makes it a cheap way to watch price drops. What is compared: price range, was-price, discount, on-sale flag, price type, name, brand, description, fit and fabric text, every colour with its own price and the size table. What is excluded by default (still returned in the row, never a change): scrape timestamps, the product's rank and page, where it was found (link, keyword, category), ratings and reviews (average rating, review count, rating breakdown, fit summary and the review sample), the rotating promo and 'new' flags, and image links. Stock and availability (in-stock flag, units, per-colour and per-size stock) are also excluded unless you turn on 'Count stock changes', because they move with every order. Colour and size lists are compared regardless of the order the store returns them. 'Changes to watch' narrows this to price (and stock when counted) only. Turn on 'Emit unchanged' or 'Emit expired' only when you also want those rows returned (and billed). State is kept separately for each scope and filter setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to derive a key automatically from the scope and filter settings, so two different scopes never mix state. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want a full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope without a page that could not be read, never when Max products capped it or Resume was used. A product page the store reports as not available also counts as missing; consider 'Expire after missed scans' above 1 so a brief gap does not expire a product. EXPIRED rows count against Max products: a run returns at most the room left under it, and the rest are returned on a later complete run. This returns, and bills, extra rows, so leave it off unless you need expiry tracking. |
changeScopestring | All fields (default): any change to the compared product data marks a product UPDATED. Price only (and stock when counted): just price, was-price, discount, on-sale flag and per-colour price, so name, description or fit-text edits never produce a billable UPDATED row. Changing this never starts a new baseline: the existing saved state is kept (under an automatic or a named State key) and each stored product is simply compared under the new setting. |
watchStockboolean | Off by default. Stock figures move with every order, so counting them marks products UPDATED, and bills them, without a price or content change. Turn on to count the in-stock flag, unit totals and per-colour and per-size stock as changes. |
compactUpdatesboolean | Off by default. When on, UPDATED and EXPIRED rows are slim: ids, link, name, current price and stock, plus priceChanges (old and new value of each field that moved) and variantChanges (per-colour ADDED, REMOVED or CHANGED). NEW rows stay full. A compact row does not carry product-page detail fields or reviews, so no detail or review charge applies to it. |
expireAfterMissedScansinteger | Used with 'Emit expired'. A product is marked EXPIRED only after it was missing from this many CONSECUTIVE complete scans (default 1). Products rotate in and out of a category as the store restocks, so a value of 2 or more avoids false expiries. |
ignoreFieldsForChangesarray | Field names that must not count as a change, for example name or highlights. Use a dotted path to ignore a key inside every element of a list, for example colors.price. Ignored fields are still returned in the row. Rank, where the product was found, ratings and reviews, promo flags and image links are already ignored by default. Changing this list never starts a new baseline: the saved state is kept and each stored product is re-compared under the new list, so no product comes back as NEW. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per product; other connectors get a best-effort write or digest. Each connector receives a condensed summary per product, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL or id of the Notion page under which product pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on products written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
nameProductbrandStorefrontpricePriceregularPriceWasdiscountPercentDiscount %discountAmountSavingcurrencyCurrencyratingRatingreviewCountReviewscolorCountColoursinStockIn stock (boolean)badgesBadges (array)Show 39 more fields
imageUrlImage (image)urlURL (link)productKeyKeychangeTypeChangedepartmentDepartmentproductTypeTypedescriptionDescriptionfitAndSizingFit (array)materialsMaterials (array)sizesSizes (array)breadcrumbsPath (array)colorscolorscolorIdColour idcolorNameColourcolorGroupColour familypriceTypePrice typestockStatusStockinventoryCountUnitsskusskusskuItem numbersizeSizesize2Size 2fitFitupcBarcodereviewsreviewsreviewIdReview idtitleTitletextReviewdateDateauthorAuthorverifiedPurchaseVerified (boolean)helpfulVotesHelpfulnotHelpfulVotesNot helpfulrecommendedRecommends (boolean)changedFieldsChanged fields (array)firstSeenAtFirst seenlastSeenAtLast seenpriceChangesPrice changesvariantChangesColour changesExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"recordType": "product",
"productKey": "oldnavy:100001",
"productId": "100001",
"name": "Sample Crew Sweater",
"brand": "Old Navy",
"brandCode": "oldnavy",
"url": "https://oldnavy.gap.com/browse/product.do?pid=100001",
"currency": "USD",
"price": 22.49,
"priceMax": 29.99,
"regularPrice": 44.99,
"discountPercent": 50,
"discountAmount": 22.5,
"onSale": true,
"priceType": "Sale",
"rating": 4.5,
"reviewCount": 62,
"colorCount": 2,
"colors": [
{
"colorId": "100001002",
"colorName": "Black Jack",
"colorGroup": "Black",
"price": 22.49,
"regularPrice": 44.99,
"discountPercent": 50,
"priceType": "Sale",
"stockStatus": "In Stock",
"inventoryCount": 120,
"imageUrl": "https://content.gapinc.com/b/0000/000/000/sample.jpg",
"promoFlags": [
"4 Days Only Deal"
]
},
{
"colorId": "100001012",
"colorName": "Clove",
"colorGroup": "Red",
"price": 29.99,
"regularPrice": 44.99,
"discountPercent": 33,
"priceType": "Sale",
"stockStatus": "In Stock",
"inventoryCount": 80
}
],
"inStock": true,
"totalInventory": 200,
"productType": "womens sweaters",
"categoryId": "1185233",
"categoryName": "Shop All Women's",
"badges": [
"New"
],
"description": "Soft knit crew-neck sweater. Ribbed trim.",
"fitAndSizing": [
"Classic fit.",
"Hits at hip."
],
"materials": [
"53% Cotton, 24% Nylon, 23% Acrylic."
],
"care": [
"Machine wash cold.",
"Imported."
],
"sizes": [
"XS",
"S",
"M",
"L",
"XL"
],
"fitVariants": [
"Regular",
"Tall",
"Petite"
],
"skus": [
{
"sku": "10000100200009",
"colorId": "100001002",
"fit": "Regular",
"size": "XS",
"stockStatus": "IN_STOCK",
"inStock": true,
"upc": "000000000001",
"price": 22.49,
"regularPrice": 44.99
}
],
"breadcrumbs": [
{
"name": "Women",
"url": "https://oldnavy.gap.com/browse/women?cid=1185233"
}
],
"ratingHistogram": {
"1": 3,
"2": 2,
"3": 5,
"4": 12,
"5": 40
},
"recommendedPercent": 91,
"fitSummary": {
"Overall Size": "true to size"
},
"position": 3,
"page": 1,
"sourceLabel": "women/shop-all-womens",
"reviewsRequested": true,
"reviews": [
{
"reviewId": "1",
"rating": 5,
"title": "So soft",
"text": "Sample review text.",
"author": "Sam K",
"date": "2026-09-25T10:00:00.000+00:00",
"recommended": true,
"helpfulVotes": 2,
"notHelpfulVotes": 0,
"verifiedPurchase": true,
"colorId": "100001002",
"fit": {
"Overall Size": "true to size"
}
}
],
"reviewsDelivered": 1,
"changeType": "NEW",
"changedFields": [],
"firstSeenAt": "2026-10-31T12:00:00Z",
"lastSeenAt": "2026-10-31T12:00:00Z",
"scrapedAt": "2026-10-31T12:00:00Z"
}Ways to use this data
- Price and markdown monitoring: track price drops, clearance moves and was-prices across a department, a brand or a product list on a schedule.
- Competitive intelligence for retailers and brands: compare assortment, pricing, colour depth, size ranges and ratings across the six storefronts.
- Size and availability analysis: see which sizes and colours are in stock, with barcodes to match your own catalogue.
- Review mining: pull written reviews with stars, dates, fit feedback and helpful votes to find what customers love and what breaks.
- Catalogue and content teams: build a structured feed of names, copy, fabric, fit notes, images and barcodes for a comparison site or app.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Gap US Scraper return?
The documented output for Gap US Scraper includes product, storefront, price, was, discount %, saving, currency and rating. Availability of each field depends on the source page and the selected mode.
How much does Gap US Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.60 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Which storefronts are covered, and which country?
The six US storefronts: Gap, Old Navy, Banana Republic, Athleta, Gap Factory and Banana Republic Factory, in US dollars. Connections are pinned to the United States because the stores redirect other countries to their local sites.
Can I search by keyword?
Yes. Use search mode and list one or more keywords; pick the storefronts to search. Category mode (words from the category name) remains for walking whole departments, and you can paste a category page you found on a store, with any filter you ticked.
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 updated products, and unchanged ones are not billed unless you turn on Emit unchanged.
Why do some rows have no description or sizes?
Result pages carry prices, colours, stock counts and ratings, while the description, fit and fabric text, size table and breadcrumbs live on each product's own page. Turn on Read each product's page, or paste product links, to get them.
