Food City Scraper: Store Prices, ValuCard Deals & Stock avatar

Food City Scraper: Store Prices, ValuCard Deals & Stock

Pricing

from $3.20 / 1,000 products

Go to Apify Store
Food City Scraper: Store Prices, ValuCard Deals & Stock

Food City Scraper: Store Prices, ValuCard Deals & Stock

Get Food City grocery products for a selected store or ZIP: price, regular price, ValuCard offers, sale dates, unit price, pack size and pickup stock where public. Search, categories or product URLs. About $0.004 per product: 1,000 products cost $4. No login.

Pricing

from $3.20 / 1,000 products

Rating

0.0

(0)

Developer

mogged

mogged

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

For retail price analysts, brands and comparison services monitoring K-VA-T Food City groceries at a selected store. Collect the online advertised price, retailer UPC/lookup key, pack size, public digital coupon conditions, basket promotions and online orderability in one consistent table. About $0.004 per delivered product: 20 products cost $0.08, or 1,000 products cost $4, plus a minimum $0.00005 Actor start charge. No retailer login or retailer API key is required.

Use Foodcity.com searches, categories, weekly savings or known retailer product URL keys. Choose ZIP codes to discover stores or exact store IDs for repeat monitoring. Every product identifies its store and price scope.

What you get

Shared US grocery fields follow the verdict. Missing values remain null.

FieldWhat it means
verdictProduct, advertised price, size and selected store in readable text.
retailer, country, currencyFood City, US and USD.
storeId, storeName, locationSelected store number, public store title and the ZIP requested. Location is null for exact-store or default-locator selection.
productId, skuRetailer product URL lookup key and separate internal cart item number, both strings with leading zeros preserved.
gtinNull: these routes establish no validated source barcode. A lookup-key checksum alone is insufficient provenance.
title, brand, sizeSource brand, product name and package or selling-unit label.
price, regularPrice, onSaleCurrent visible online advertised price, explicit base price when supplied, and the source sale flag.
promoText, promoTypePublic promotion wording and its type. Basket and coupon conditions remain separate.
promoStart, promoEndNull for the current product-card route. Coupon expiration dates are inside offers.
memberPrice, memberProgramExplicit member product price and program, when the price text identifies membership.
unitPrice, unitOfMeasureSource per-unit rate and unit. A product sold “per lb” retains that advertised rate here.
inStock, stockLevelOnline Add to Cart/orderability signal; stock quantity remains null.
rating, reviewCountNot supplied by this public product route; null.
category, url, imageUrlRequested category label or product breadcrumb, selected-store product URL and product image URL.
scrapedAtUTC observation timestamp.

Food City fields:

FieldWhat it means
retailerUpcRaw Food City retailer UPC/lookup key, matching productId. Not a promise of a registered GTIN.
foodCityBannerK-VA-T Food City, identifying this retailer.
priceScopeSelected-store online advertised price.
priceText, priceBasisExact displayed price wording and whether the amount is for a package or a weight unit.
weightedItem, averageWeightSource weight-selling flag and source average-weight value.
estimatedPackagePriceCalculated rate multiplied by the supplied average weight, rounded to cents. An estimate, not the checkout total.
valucardRequired, priceRequiresMembershipTrue only when the product-price text explicitly identifies the membership requirement. Null means no explicit statement was supplied.
purchaseQuantityQuantity from explicit multi-buy price wording.
digitalCouponAvailable, digitalCouponTextPublic coupon badge and retrieved offer wording.
couponRequiresMembership, offersSeparate digital coupon membership/clipping conditions, expiration dates, qualifying retailer UPC/lookup keys and terms.
promotionConditions, weeklyAd, isDealBasket-offer wording, weekly-savings source flag and combined deal flag.
pickupAvailableOnline ordering availability signal for the selected context.
storeAddress, requestedLocationsPublic store address and ZIP selections resolving to that store.
detailsOptional ingredients, nutrition or product information.
sourceUrl, sourceRequest, storeSelectionEvidencePublic request and confirmed store selection supporting the observation. Anonymous session cookies are never exported.

The overview view emphasizes prices and stores; the deals view shows offers. Free DEALS JSON contains deal rows or links to bounded JSON parts for large exports. SUMMARY reports products, stores, deals, source outcomes, duplicate exclusions, free failures and spending-limit status.

Filter recordType: "PRODUCT" for products; recordType: "NOTE" rows are free explanations.

Understand the prices

price is Food City's visible online advertised price in the selected-store session. It is not an audited shelf price or guaranteed checkout total. Store selection is confirmed anonymously, and listing product links must identify that store.

For an item labelled “per lb”, price and unitPrice retain the displayed rate per pound, with priceBasis: "per-weight-unit". A source average weight of 0.625 lb at $2.49 per pound yields a calculated estimatedPackagePrice of $1.56. Actual selected weight can differ.

Digital coupon prices remain in offers, with clipping, membership, date and purchase conditions. They never replace the ordinary advertised price. One public chuck-roast offer specified $5.99 per pound, Friday and Saturday only, up to 10 lb, expiring November 7, 2026.

Basket discounts also stay separate. “Save $4.99” can require $20 across selected brands; it is not subtracted from a single product.

Start in three steps

  1. Supply search terms, supported Food City URLs or known retailer product URL keys.
  2. Choose ZIP codes or exact store IDs and set a global product limit.
  3. Run, inspect SUMMARY, then export the dataset as JSON, CSV or Excel.

The prefill searches milk near ZIP 24210, capped at 20 products. Store 823 is 151 Cook Street, Abingdon, Virginia.

Inputs and examples

InputExample and behavior
searchTerms["milk", "coffee"]. Each term is searched at each selected store.
startUrlsFoodcity.com search/category, weekly savings or product URLs. Plain strings are accepted.
productIds["0019347600001"]. Final 8-14 digit retailer product URL key as a string; preserve leading zeros. No barcode validation required for lookup.
locations["24210", "37919"]. The first public grocery pickup store returned by the locator for each ZIP is selected and echoed.
storeIds["823"]. Exact store IDs take precedence over ZIP locations.
maxItemsPerSearchNew products per source and store. Default 20, maximum 1,000.
maxItemsGlobal product/store row limit. Default 20, maximum 10,000.
dealsOnlyKeep sale flags, weekly-savings products, coupon badges and basket offers.
includeDetailsAdd product-page metadata with no extra product charge. Adds source requests.
proxyConfigurationDefault datacenter pool first, then anonymous US residential retries after refusals. Custom proxy settings are supported.
postalCodesAlias for locations. Prefer the common family name when combining retailers.
categoryUrlsOptional alias for category URLs; startUrls remains the common family input.

Empty locations use the site's locator default and report the selected store. URL store numbers never override run selections. Use storeIds for exact-store monitoring.

Search two terms at one ZIP:

{
"searchTerms": ["milk", "coffee"],
"locations": ["24210"],
"maxItemsPerSearch": 20,
"maxItems": 40
}

Collect a grocery department:

{
"startUrls": ["https://www.foodcity.com/search/all/?searchType=All&department[]=Dairy%20and%20Eggs"],
"storeIds": ["823"],
"maxItemsPerSearch": 100,
"maxItems": 100
}

Monitor known products:

{
"productIds": ["0019347600001", "0000000004799"],
"storeIds": ["823"],
"includeDetails": true,
"maxItems": 2
}

For weekly savings, use dealsOnly: true without other sources, or a link such as https://www.foodcity.com/circulars/weekly/823/?searchDisplay=grid. With searches or categories, dealsOnly filters their results. Pagination stops at source exhaustion or your row/spending limits.

Real output example

Selected fields for Food City store 823 milk with the corrected identifier mapping (November 5, 2026):

{
"retailer": "Food City",
"storeId": "823",
"storeName": "Food City Grocery Store in Abingdon, Virginia",
"productId": "0019347600001",
"sku": "98807",
"retailerUpc": "0019347600001",
"gtin": null,
"title": "That's Smart! Milk",
"size": "1 gal",
"price": 3.99,
"unitPrice": null,
"unitOfMeasure": null,
"weightedItem": false,
"priceBasis": "package",
"priceScope": "selected-store online advertised price",
"inStock": true
}

Pricing and spending limits

One product means one distinct product at one store. The same retailer lookup key at two stores is two observations. Overlapping inputs at one store are charged once. Empty results, duplicates, summaries, notes and failed requests have no product charge or default dataset-row fee.

Delivered productsBaseBronzeSilverGold
20$0.08$0.076$0.072$0.064
100$0.40$0.38$0.36$0.32
1,000$4.00$3.80$3.60$3.20

The base product price is $0.004. Bronze is $0.0038, Silver $0.0036 and Gold $0.0032. Add the minimum $0.00005 Actor start charge. Optional product details and public offer-condition requests do not add another event fee.

Set Apify's maximum total charge for a ceiling. Capacity is checked before fetching and saving products; SUMMARY records spending-limit stops.

Monitor prices every day

Save a task with exact storeIds, a stable basket of retailer product IDs or category sources, and a deliberate cap. Add an Apify schedule. Preserve scrapedAt and join observations on retailer, storeId and productId, keeping selling units and coupon conditions together.

Send datasets to your database, Google Sheets, Make, Zapier or n8n. Check SUMMARY.freeFailures before interpreting fewer rows as a catalog change.

API use

Start a run with your Apify token:

curl -X POST 'https://api.apify.com/v2/acts/moggedhq~food-city-scraper/runs' \
-H 'Authorization: Bearer YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchTerms":["milk"],"storeIds":["823"],"maxItems":20}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("moggedhq/food-city-scraper").call(
run_input={"searchTerms": ["milk"], "storeIds": ["823"], "maxItems": 20}
)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
products = [row for row in rows if row.get("recordType") == "PRODUCT"]
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('moggedhq/food-city-scraper').call({
searchTerms: ['milk'], storeIds: ['823'], maxItems: 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Use with AI agents (MCP)

Connect to https://mcp.apify.com. Supply terms, retailer URL keys or categories and ZIPs/store IDs. Example: “Get milk and coffee prices at store 823, including retailer lookup keys, pack sizes, coupon conditions and price basis. Limit the run to 40 products.” Ask it to read SUMMARY, preserve nulls and keep conditional coupon prices separate.

Limits

Coverage is the public K-VA-T Foodcity.com catalog. Prices are online advertisements, not audited shelf or checkout prices. Add to Cart is an orderability signal; stock quantities are usually absent.

Cards often omit regular prices, packaged-goods unit rates, main-sale dates, explicit ValuCard requirements and ratings. These remain null. A missing membership flag does not establish that no card is needed. Coupon expiry and conditions are retained when supplied; start dates are not inferred from weekday wording.

Weekly-savings rows are linked catalog products. Image-only flyer panels, personalized offers, account coupon state, loyalty balances and checkout eligibility are outside coverage. The Actor does not log in, clip coupons, place orders or solve CAPTCHAs.

Source outages or changes can prevent complete output. Prices and orderability are fetched live. Exact-store address metadata may be reused for seven days, identified by storeMetadataFromCache and storeMetadataObservedAt. Sequential paced requests retry with fresh anonymous sessions; free notes identify unavailable data. Product and charge ledgers survive reboots, and ambiguous billing evidence stops charges. Result caps do not guarantee that a store carries that many matches.

FAQ

Which Food City is covered? K-VA-T Food City at foodcity.com. The output identifies the banner and US currency.

Can I choose an exact store? Yes. Use storeIds; a ZIP is useful for discovery and the resolved store is reported.

What does productIds accept? Final 8-14 digit retailer UPC/lookup keys from product URLs, supplied as strings. productId and retailerUpc preserve leading zeros; sku is the separate cart ID. gtin stays null without explicit barcode provenance and valid format/check digit. No digits are guessed.

Why is regularPrice null? The source provided no separate base price.

Are digital coupons already applied? No. Coupon text, expiry, clipping requirement and conditions are separate in offers.

Does includeDetails cost extra? No additional product event. It adds source requests for public metadata.

What happens with bad inputs? Parseable invalid input produces a free note and summary. Schema rejection adds no product charge.

How do I combine grocers? Join the shared retail fields on retailer, store ID and product ID, preserving selling units.