· 15 min read
Instacart Storefront Price Scraper: Up to 1,000 Free Results a Month
Each product record carries 29 fields, including live product prices, regular pre-discount prices, unit pricing, unit sizes, sale tags, stock status, and customer ratings. A thousand result records cost $5.00 on Apify's free plan, which includes $5.00 of monthly usage to try the Actor without entering a credit card. Choose from 30 preset retailer storefronts or supply a custom retailer slug to fetch store catalogs, search by product keywords, or pull promotional deals. This tool is built for pricing analysts, regional retail researchers, and deal-monitoring app developers. It is not for teams requiring authenticated user data, such as personal delivery address options or saved user cart states.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Instacart Storefront Price Scraper on Apify and run the prefilled example.
How reliable is Instacart Storefront Price Scraper in production?
Across the last 30 days of public runs on the Apify platform, Instacart Storefront Price Scraper recorded 166 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 166 | 100.0% |
| Failed | 0 | 0.0% |
| Aborted by the user | 0 | 0.0% |
| Timed out | 0 | 0.0% |
| Total | 166 | 100.0% |
No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.
What does it cost to run Instacart Storefront Price Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.
Total run expenses depend on dataset output size, making maxItems and query specificity the primary billing drivers. Narrowing search terms or restricting category searches prevents unnecessary result writes. To evaluate schema output cheaply, test runs with maxItems set to 10.
How do you run Instacart Storefront Price Scraper from the API?
The schema marks 2 of its 15 controls as required: mode, retailerSlug. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~instacart-storefront-price-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","retailerSlug":"costco","aisleSlug":"9797-crackers","itemIds":["items_74-17444603"]}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"retailerSlug": "costco",
"aisleSlug": "9797-crackers",
"itemIds": [
"items_74-17444603"
]
}
run = client.actor("crawlerbros~instacart-storefront-price-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"retailerSlug": "costco",
"aisleSlug": "9797-crackers",
"itemIds": [
"items_74-17444603"
]
}
const run = await client.actor('crawlerbros~instacart-storefront-price-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Instacart Storefront Price Scraper inputs matter, and which can you skip?
The mode and retailerSlug parameters are required and dictate what dataset structure the run produces. For keyword lookups, searchQuery controls the result set, while aisleSlug targets specific department hierarchies. Optional filters like onSaleOnly, minPrice, and maxPrice refine output without increasing per-result charges.
mode(string): What to fetch. Default:"search".retailerSlug(string): Which Instacart-partnered retailer's storefront to scrape. Pick from the list, or use "Custom retailer slug" below to supply any Instacart retailer slug not in this list. Default:"costco".aisleSlug(string): Which department/aisle (a.k.a. "collection") to browse within the selected retailer, e.g.9797-crackers,produce, ordynamic_collection-sales(retailer-wide deals). Runmode=listAislesfirst to get the exact slugs available for your chosen Retailer, or copy one from an Instacart collection URL: instacart.com/store//collections/.itemIds(array): Full Instacart item IDs to look up, e.g.items_74-17444603(copy from asearch,browseAisle, orstoreOverviewresult'sitemIdfield). Must all belong to the same Retailer selected above. Default:[].customRetailerSlug(string): Any Instacart retailer slug, e.g.whole-foods-marketorsprouts-farmers-market. Find a retailer's slug in its Instacart storefront URL: instacart.com/store//storefront. Leave empty to use the Retailer dropdown instead.searchQuery(string): Keyword to search for within the selected retailer's storefront, e.g.milk,organic eggs,paper towels. Results are filtered so every returned item's name/brand/category contains each significant word of your query (generic words like "organic" are ignored for this check). Note: this is a substring check, not full product understanding, so on rare occasions an item that happens to contain all your query words in an unrelated context (e.g. a "milk chocolate"-flavored candy matching a search for "almond milk") can still slip through. Default:"milk".orderBy(string): How to order results. Default:"bestMatch".minPrice(integer): Drop items priced below this amount (whole dollars).maxPrice(integer): Drop items priced above this amount (whole dollars).brandContains(string): Keep only items whose brand name contains this text (case-insensitive).inStockOnly(boolean): Drop items that are marked out of stock. Default:false.onSaleOnly(boolean): Keep only items currently discounted from their regular price (has aregularPricehigher thanprice). Default:false.
The other 3 controls, with their defaults, are listed in the input schema on Instacart Storefront Price Scraper on Apify.
Fixed-choice controls: mode accepts search (Search products by keyword), browseAisle (Browse a department/aisle (category)), listAisles (List a retailer's departments/aisles), productDetail (Lookup items by ID), storeOverview (retailer info + trending items); retailerSlug accepts 30 values (default costco), including costco, safeway, publix, cvs; orderBy accepts bestMatch (Best match), priceAsc (Price: low to high), priceDesc (Price: high to low).
What does Instacart Storefront Price Scraper return?
Output records provide granular item details like numeric price, unit price strings, original regular prices, discount badges, and stock availability. They do not contain buyer purchase histories, local store inventory levels beyond guest defaults, or account-locked promotional coupons.
Output per product
itemId- full Instacart item ID (e.g.items_74-17444603), reusable inproductDetailmodeproductId,legacyId- Instacart's internal product identifiersname,brandName,size,categorypriceString(e.g.$17.40),price(numeric, e.g.17.4)pricePerUnitString(e.g.$0.09/oz),pricingUnitString(e.g.3 x 64 oz)regularPriceString/regularPrice- pre-discount price when the item is on sale (e.g.$19.67)discountPercentString(e.g.30%),promoLabel(e.g.$6 off; limit 5),onSale(boolean)rating(0-5) andreviewCount- when Instacart publicly shows a star rating for the itemimageUrl- product photoavailable,stockLeveldietaryAttributes[]- e.g.organic,lactose_free,gluten_freetags[]- e.g.storeBrandaisleSlug- the aisle/collection slug the item was found in (mode=browseAisle only)retailerSlug,retailerNameproductUrl/sourceUrlrecordType: "product",scrapedAt
Output per retailer (mode = storeOverview)
retailerId,retailerSlug,retailerName,retailerTypecategories[]- e.g.grocery,club,wholesalesourceUrlrecordType: "retailer",scrapedAt
Output per aisle/department (mode = listAisles)
aisleId,aisleName,aisleSlug- passaisleSlugintomode=browseAisleto fetch its productscollectionType- e.g.department,retailer_collection_v2,dynamicparentAisleId/parentAisleName- present for sub-aisles nested under a departmentchildAisleCount- number of sub-aisles under a top-level departmentretailerSlug,retailerNamesourceUrlrecordType: "aisle",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Instacart Storefront Price Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Select mode search and enter a retailer slug such as costco in retailerSlug, then set maxItems to 10 for a dry run.
- Run the Actor and inspect the returned dataset to ensure price and itemId fields are populated for each product record.
- Switch mode to listAisles for your chosen retailer to fetch all available aisleSlug strings and store taxonomy structures.
- Update mode to browseAisle and supply an aisleSlug returned from the previous step, setting orderBy to priceAsc.
- Apply numeric or boolean filters like minPrice, maxPrice, or onSaleOnly to narrow down the dataset before expanding run sizes.
- Collect itemIds from the resulting product records and test mode productDetail to verify direct item lookups.
- Configure proxyConfiguration to use Apify proxy if you encounter repeat 429 rate-limit responses during larger runs.
- Schedule recurring runs on your Apify dashboard to track changes in price, discountPercentString, and available over time.
How do you apply it? Three worked playbooks
These are Instacart Storefront Price Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Price monitoring
Outcome: Track grocery price changes across retailers over time
Configure: mode: "search", retailerSlug: "costco", searchQuery: "organic eggs", orderBy: "priceAsc", maxItems: 50
Working method: Execute initial search run to record base price and regularPrice for targeted items. Schedule automated daily runs using the exact same searchQuery and retailerSlug configurations. Export each run's output to a central dataset to calculate day-over-day price adjustments and identify promoLabel spikes.
Deliverable: Time-series dataset containing itemId, price, regularPrice, pricePerUnitString, and scrapedAt timestamps across monitored storefronts.
Stop condition: Stop and recheck configuration if price fields return empty across multiple items or if retailerSlug shifts session store locations.
Use case 2: Market research
Outcome: Compare pricing and product assortment between chains
Configure: mode: "browseAisle", retailerSlug: "safeway", aisleSlug: "produce", orderBy: "bestMatch", maxItems: 100
Working method: Run listAisles for two competing retailers (e.g., Safeway and Kroger) to identify matching department categories. Run browseAisle across both storefronts for equivalent aisleSlug targets. Cross-reference returned product records on brandName, size, and numeric price to analyze shelf-pricing strategies and category depth.
Deliverable: Comparative report mapping product catalog coverage, average category pricing, and brand distribution across selected chains.
Stop condition: Halt execution if one retailer fails to yield records due to an invalid customRetailerSlug or missing category taxonomy.
Use case 3: Deal-hunting tools
Outcome: Feed a price-comparison app or browser extension with onSaleOnly results
Configure: mode: "browseAisle", retailerSlug: "costco", aisleSlug: "dynamic_collection-sales", onSaleOnly: true, maxItems: 100
Working method: Target specialized deal collections using aisleSlug dynamic_collection-sales alongside the onSaleOnly boolean flag. Execute automated hourly sweeps across high-volume retailers to capture active store discounts. Push items with verified discountPercentString values directly to downstream application endpoints.
Deliverable: Structured JSON feed containing active discounted items with promoLabel text, discount percentages, and original regularPrice benchmarks.
Stop condition: Abort feed update if onSale is false for records in the returned dataset or if discount parameters fail validation.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
Instacart limits search results to a concise set of top-matching items rather than deep paginated lists. When extracting extensive store inventories, use mode listAisles to retrieve department keys and iterate through mode browseAisle per category instead of running single site-wide searches. For direct item refreshes, save full itemIds to run targeted mode productDetail queries.
When should you not use Instacart Storefront Price Scraper?
Do not use this Actor if you need localized store pricing tied to specific postal codes or weekly print ad flyers. Instacart defaults guest sessions to standardized regional pricing (typically the San Francisco Bay Area), which may differ from local brick-and-mortar shelf rates. If your application relies on hyper-local physical store promotions or zip-code-specific circulars, use Flipp Grocery Deals Scraper instead, which extracts flyer prices based directly on local postal codes. Alternatively, use official retailer APIs where direct store-level access is required.
What should you check before trusting the output?
- Verify that numeric price is not null or missing when comparing pre-discount regularPrice values.
- Check that itemId matches the expected Instacart format (e.g. items_74-17444603) before passing it to productDetail mode.
- Ensure available is boolean true to filter out out-of-stock items when analyzing live shelf pricing.
- Stop runs if mode browseAisle returns an empty dataset, indicating an invalid or expired aisleSlug for that retailer.
- Validate that pricePerUnitString contains expected measurement units (such as per oz or per lb) when calculating unit margins.
None of this proves a record is correct. It gives a scheduled Instacart Storefront Price Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How much does it cost to run this Actor?
Results cost $0.005 each, which equals $5.00 per 1,000 results on Apify's free plan. Paid plans offer lower per-result charges. Platform usage fees apply separately per run.
How reliable is the scraper for automated jobs?
The Actor recorded 166 successful runs out of 166 total attempts over the last 30 days, achieving a 100.0% success rate with zero failures or timeouts.
Does this tool require an Instacart login or API key?
No login, cookies, or API keys are needed. All extracted data is fetched live from Instacart's publicly accessible guest storefront pages.
Why do prices differ from my local grocery store?
Instacart storefront prices depend on regional guest sessions. Without an authenticated user address, Instacart defaults pricing to its standard guest location, usually the San Francisco Bay Area.
Can I scrape retailers not listed in the Retailer dropdown?
Yes. Leave the dropdown setting and supply any valid Instacart storefront slug (found in the storefront URL) using the customRetailerSlug input field.
Where to go next
When you are ready to run it, open Instacart Storefront Price Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Instacart Storefront Price Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- Flipp Grocery Deals Scraper: Scrape real store-level weekly-ad prices near any US or Canadian postal code - Kroger, Publix, ALDI, Walmart, Target, Costco, CVS, Walgreens and dozens more retailers.
- Flipp Weekly Deals & Grocery Ad Scraper: Scrape Flipp - the #1 grocery deals platform used by Walmart, Lidl, Costco, Target, Kroger, and 2000+ US retailers.
- Wegmans Grocery Scraper: Scrape live Wegmans grocery products - search by keyword, browse 30+ categories (dairy, meat, produce, seafood, frozen, bakery), or pull featured collections.
- Xbox Store Scraper: Scrape the official Xbox Store (xbox.com/games/store) - search games, browse the storefront with sort options, and fetch rich game detail (price, discount, ESRB rating, genres, platforms, media) by product ID.
- PlayStation Store Scraper: Scrape the official PlayStation Store (store.playstation.com) - search games, browse curated storefront categories (PS5, PS4, new releases, deals, free-to-play, PSVR2, add-ons), and fetch rich game detail (price, rating, media) by product ID.
- Amazon Brand Store Scraper: Scrape Amazon Brand Store pages (/stores/{Brand}/page/{ID}) - curated storefront navigation, creative modules (images/video/CTAs), and every validated product link found on the page.
- Trolley Grocery Price Comparison Scraper: Scrape UK grocery prices from Trolley.co.uk - compare Tesco, Asda, Sainsbury's, Morrisons, Waitrose, Ocado & more.
- EBAY | Single Item | Store | Store Categories: Extract detailed product data from eBay individual item pages, seller store fronts, and store category pages.
Related guides:
- Flipp Grocery Deals Scraper: Up to 1,000 Free Results a Month (2026)
- Flipp Weekly Deals & Grocery Ad Scraper: 25 Data Fields per Record
- Trolley Grocery Price Comparison Scraper: $5.00 per 1,000 Results
- Amazon Brand Store Scraper: 3 Practical Use Cases
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.
Actor last updated by its maintainers on 2026-08-05.
Run outcome figures cover the 30 day public window ending 2026-09-27.
Featured actors
Instacart Storefront Price Scraper
Scrape real-time grocery prices from Instacart storefronts. Search products by keyword, look up items by ID, or pull a retailer's store overview - no login, no API key.
Run on Apify ↗