Gopuff Scraper icon

Gopuff Scraper

Scrape Gopuff, the US quick-commerce delivery store, by location or product: prices, promotions, stock and availability per fulfillment location across…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Gopuff Scraper at a glance

Gopuff Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes kind, productid, sku, url and title, 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.50 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
Web data
Pricing
$2.20 per 1,000 results (Free plan), from $1.50 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
20 options

Scrape Gopuff, the US quick-commerce delivery store, by location or product: prices, promotions, stock and availability per fulfillment location across thousands of everyday products. Availability monitoring (NEW, UPDATED, REAPPEARED, EXPIRED), detail enrichment, incremental runs, MCP export.

What Gopuff Scraper can do

  • Per-location truth. Gopuff prices and assortment differ by fulfillment location. This actor resolves each ZIP code, city name or lat,lng pair you give it to the storefront's own location and walks that location's own catalog, prices and deals.
  • Promotions captured whole. Multi-buy offers ("2 for $5"), coupon-backed deals, unit prices, Fam-member pricing, badges and sponsored tiles are part of every record, not just the list price.
  • Two ways in. Walk a location's collections to enumerate the catalog, or switch to product mode and paste product links or numeric ids for a direct, enriched lookup.
  • Detail enrichment on demand. Turn on a per-record option to pull description, brand, SKU and a full-size image into catalog records, and pay the surcharge only when you use it.
  • Change tracking built in. Label every record NEW, UPDATED, REAPPEARED or EXPIRED across scheduled runs, so a monitoring campaign returns only what changed.
  • Resume without duplicate cost. Point a new run at an interrupted run or dataset and already-collected records are skipped rather than paid for twice.

Choose what to collect

These inputs let you configure Gopuff Scraper - US Quick-Commerce Prices & Assortment. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringCatalog walks a storefront location's collections page by page with prices, promotions and stock. Product mode reads one or more product links or numeric ids.

Choices: categories, products

locationsarrayCatalog mode: where to read the catalog - one entry per location. A US ZIP code (78701), a city or place name (Austin), or exact coordinates as lat,lng (30.2672,-97.7431). Names and ZIP codes are resolved automatically and cached. Left empty, the run reads the example location 78701 so it still returns records; incremental state is not saved for that example read.
locationIdstringCatalog mode: pin an exact Gopuff fulfillment location id and skip location resolution. Location ids appear in catalog records. Leave empty to resolve from the locations above.
categoryInputsarrayCatalog mode: walk only these collections, given as links (gopuff.com/c/candy/txERmYDy), deal collections (gopuff.com/deals/snack-deals/J9aZuA) or bare collection ids (txERmYDy). The home page, /shop and /deals links walk the whole navigation. Leave empty to walk the whole navigation.
discoverCategoriesbooleanCatalog mode: when no collections are set above, read the storefront navigation and walk every collection it lists.
inStockOnlybooleanCatalog mode: hide items the selected location currently cannot deliver.
productInputsarrayProduct mode: numeric product ids (198176) or any product link (gopuff.com/p/banana-1ct/p198176). Multi-value supported.
Show 13 more inputs
More input fields
InputWhat it controls
maxItemsintegerStop after this many records (0 = unlimited). With several locations each gets an equal share.
maxPagesintegerCatalog mode: how many pages to walk inside each collection. 0 (the default) walks every page the collection has, up to a built-in hard ceiling of 100 pages per collection. A collection ends early when its pages run out.
pageSizeintegerCatalog mode: how many products to request per page, 10 to 50.
fetchDetailsbooleanCatalog mode: also read each product's own document for description, brand, SKU and image (billed as the detail-enrichment event, one unit per enriched record). Note: detail documents are priced by the storefront's default location, not by the walked location.
incrementalModebooleanRemember the previous run of the same search and label every record NEW, UPDATED, UNCHANGED or REAPPEARED; records that disappeared from a complete scan are reported EXPIRED. First run reports everything as NEW.
emitUnchangedbooleanIncremental mode: also return (and bill) records that did not change since the previous run. Off keeps runs small.
emitExpiredbooleanIncremental mode: also return (and bill) records gone from a COMPLETE scan (every location walked to its end, nothing capped, nothing resumed). Partial scans never mark records expired.
stateKeystringIncremental mode: name a monitoring campaign so two runs share a baseline even if their input text differs. Leave empty to derive it from mode + locations + collections + filters.
resumeFromRunIdstringSkip records already collected by an earlier run or dataset so an interrupted crawl can continue. Compatible with incremental mode.
ignoreFieldsForChangesarrayIncremental mode: field names that must NOT make a record UPDATED, for example sponsored or imageUrl. Nested fields use dots (promotions.label). Ignored fields stay in the output; they are only left out of change detection and changedFields. Leave empty to track every field.
mcpConnectorsarraySend every pushed record to these Apify MCP connectors (for example a Notion database) after the run. Leave empty to skip the export.
notionParentPageUrlstringWhen a Notion connector is used above, create pages under this parent.
maxNotifyListingsintegerUpper bound on records sent to the connectors above.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

kindkind
productIdproductId
skusku
urlurl
titletitle
brandbrand
categoryIdcategoryId
categoryNamecategoryName
locationIdlocationId
priceprice
currencycurrency
famPricefamPrice
Show 25 more fields
priceChannelpriceChannel
pricePerUnitUsdpricePerUnitUsd
unitunit
famPricePerUnitUsdfamPricePerUnitUsd
hasPromotionhasPromotion
promotionspromotions
priceCalloutpriceCallout
badgesbadges
sizeLabelsizeLabel
availabilityavailability
quantityAvailablequantityAvailable
snapEligiblesnapEligible
famOnlyfamOnly
sponsoredsponsored
imageUrlimageUrl
descriptiondescription
detailPricedetailPrice
detailAvailabilitydetailAvailability
detailCategorydetailCategory
detailImageUrldetailImageUrl
priceScopepriceScope
changeTypechangeType
changedFieldschangedFields
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "kind": "product",
  "productId": "900001",
  "url": "https://www.gopuff.com/p/example-trail-mix-share-size-4-oz/p900001",
  "title": "Example Trail Mix, Share Size, 4 oz",
  "price": 4.99,
  "currency": "USD",
  "famPrice": 4.49,
  "priceChannel": "default",
  "pricePerUnitUsd": 1.25,
  "unit": "oz",
  "hasPromotion": true,
  "promotions": [
    {
      "text": "2 for $8",
      "couponId": "sample-coupon-id",
      "couponSystem": "SAMPLECOUPONS"
    }
  ],
  "sizeLabel": "4oz",
  "availability": "in_stock",
  "quantityAvailable": 12,
  "snapEligible": true,
  "categoryId": "sampleCategoryId",
  "categoryName": "Snacks",
  "locationId": "100001",
  "imageUrl": "https://images.gopuff.com/blob/sample/example-trail-mix.png",
  "description": "A resealable trail mix blend, sample description text.",
  "brand": "Example Snacks",
  "sku": "900001",
  "detailPrice": 4.99,
  "detailAvailability": "InStock",
  "changeType": "NEW",
  "changedFields": [],
  "firstSeenAt": "2026-01-01T00:00:00+00:00",
  "lastSeenAt": "2026-01-01T00:00:00+00:00"
}

Ways to use this data

  • Grocery price monitoring: track per-location prices, Fam pricing and promotions on the products you care about, on a recurring schedule.
  • Competitive intelligence: compare quick-commerce pricing and assortment across ZIP codes or cities.
  • Deal and coupon tracking: catch multi-buy offers and coupon-backed promotions as they appear and disappear.
  • Inventory and availability alerts: watch stock counts and availability on a set of products and get only the records that changed.
  • Catalog research: enumerate every collection a location carries, with size, brand and category detail.

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 Gopuff Scraper return?

The documented output for Gopuff Scraper includes kind, productid, sku, url, title, brand, categoryid and categoryname. Availability of each field depends on the source page and the selected mode.

How much does Gopuff Scraper cost?

It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Why did my run return fewer products than expected?

Catalog mode stops at Max items, and Max pages per collection limits how deep any single collection is walked. Raise either setting, or set Max items to 0, to collect more of the catalog.

Why did my run fail instead of returning an empty dataset?

If the storefront refuses every request or a location can't be resolved, the run stops with a clear message (quoted under Plan Requirement) so "nothing in stock" is never confused with "nothing could be read". Run it again in a few minutes.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Gopuff Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.