To get Fred Meyer prices for a specific store, use Scavio's Kroger API with banner: "fred_meyer" (or "qfc" for QFC). POST /api/v1/kroger/stores turns a ZIP code into store ids, and POST /api/v1/kroger/prices takes one store_id and up to 25 UPCs and returns each item's regular price, sale price and end date, stock level, available-quantity estimate and aisle at that store. Stores costs 1 credit and prices 3, so a 25-item price check at one store costs $0.003 on the Growth plan.
Fred Meyer and QFC prices belong to a store, and the same UPC can carry a different price at a QFC and a Fred Meyer a mile apart. So the steps below start with the store. Every response is a trimmed capture from November 13, 2026, taken between 02:13 and 02:28 UTC, which was the evening of November 12 in Portland. Prices are integer cents: 549 is $5.49.
Step 1: Find the store
curl -s https://api.scavio.dev/api/v1/kroger/stores \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"zip": "97206", "banner": "fred_meyer", "limit": 10}'ZIP 97206 in southeast Portland returned 10 Fred Meyer locations within 5.2 miles, seven stores and three fuel centers, nearest first. The Johnson Creek store, with all but one of its departments trimmed:
{
"location_id": "70100153",
"banner": "fred_meyer",
"type": "store",
"name": "Johnson Creek",
"store_number": "00153",
"address": {
"line1": "8955 Se 82Nd Ave",
"city": "Happy Valley",
"state": "OR",
"zip": "97086"
},
"coordinates": { "lat": 45.4584982, "lng": -122.5810676 },
"phone": "(503) 788-2000",
"timezone": "America/Los_Angeles",
"hours": [{ "days": "Sun - Sat", "hours": "7:00 AM - 10:00 PM" }],
"open_24_hours": false,
"departments": [
{ "name": "Gas Station", "phone": "(503) 788-2022", "hours": [{ "days": "Sun - Sat", "hours": "5:00 AM - 11:00 PM" }] }
],
"has_pharmacy": true,
"has_fuel_center": true,
"pickup": true,
"delivery": false,
"distance_miles": 1.9
}location_id is the store_id every other call takes. Fred Meyer ids start with 701 and QFC ids with 705, so {"zip": "98101", "banner": "qfc"} returned Seattle QFCs such as Harvard Market (70500847) and Ballard (70500891). Fuel centers come back as their own entries with type: "fuel_center"; drop them before pricing. You can also pass query (a city or address) or one store_id, and include_other_banners: true mixes in nearby stores of other Kroger banners. 1 credit.
Step 2: Price your list at that store
curl -s https://api.scavio.dev/api/v1/kroger/prices \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store_id": "70100153", "banner": "fred_meyer",
"upcs": ["0007283090612", "0081006334306", "0001111050438"]}'Our run sent the full list of 25 UPCs and got 25 items back, with an empty not_found. Two of them, url and image trimmed:
{
"banner": "fred_meyer",
"store": {
"location_id": "70100153",
"name": "Johnson Creek",
"banner": "fred_meyer",
"address": { "line1": "8955 Se 82Nd Ave", "city": "Happy Valley", "state": "OR", "zip": "97086" }
},
"count": 25,
"not_found": [],
"items": [
{
"upc": "0007283090612",
"name": "Tillamook Extra Creamy Sea Salted Butter Sticks",
"brand": "Tillamook",
"size": "4 sticks / 16 oz",
"price": 549,
"promo_price": 499,
"promo_ends_at": "2026-12-28T04:59:59.999Z",
"on_sale": true,
"price_display": "$5.49",
"unit_price_display": "$0.34/oz",
"in_stock": true,
"stock_level": "HIGH",
"quantity": 29,
"aisle": { "description": "AISLE 10", "number": "10", "side": "L", "bay": "16", "shelf": "2" },
"fulfillment": { "pickup": true, "delivery": true, "in_store": true, "ship": false },
"priced_at": "70100153"
},
{
"upc": "0081006334306",
"name": "Death Wish Coffee Co.® Medium Roast Ground Coffee",
"brand": "Death Wish Coffee",
"size": "10 oz",
"price": 1399,
"promo_price": 1099,
"promo_ends_at": "2026-11-18T04:59:59.999Z",
"on_sale": true,
"price_display": "$13.99",
"unit_price_display": "$1.40/oz",
"in_stock": null,
"stock_level": null,
"quantity": null,
"aisle": { "description": "AISLE 20", "number": "20", "side": "R", "bay": "13", "shelf": "3" },
"fulfillment": { "pickup": true, "delivery": true, "in_store": true, "ship": false },
"priced_at": "70100153"
}
]
}How to read it:
priceis the regular price andpromo_pricethe sale price, both in cents.price_displayrepeats the regular price as text even when the item is on sale, so showpromo_priceyourself.promo_ends_atis a UTC timestamp.2026-11-18T04:59:59.999Zis 11:59 pm Eastern on November 17, which is 8:59 pm in Portland. 10 of the 25 items were on sale at Johnson Creek, and three of those sales ended at that timestamp.in_stockandstock_level(HIGH,LOW,TEMPORARILY_OUT_OF_STOCK) arenullwhen the store has no stock record for the item, as for the coffee.quantityis the number the site reports as available, an estimate and not a shelf count.priced_atrepeats the store that priced the item. Check it: an item withprice: nullandpriced_at: nullis one the store does not price, which is how QFC Ballard returned Kroger-brand jumbo eggs.
A prices call took 9 to 61 seconds in our run, and one attempt failed after 63 seconds and was not charged; retry on a 502. 3 credits for up to 25 UPCs.
Step 3: Price the same UPCs at another store or banner
Change store_id, and banner if you cross to QFC. We ran the 25 UPCs at six Portland-area Fred Meyers, at Fred Meyer Ballard in Seattle and at QFC Ballard, 1.1 miles from it:
| UPC | Item | Portland Fred Meyers (6) | Fred Meyer Ballard | QFC Ballard |
|---|---|---|---|---|
| 0001111050438 | Simple Truth organic lactose-free 2% milk, half gallon | $4.99, sale $3.99 | $4.99, sale $3.99 | $5.79, sale $3.99 |
| 0007283090612 | Tillamook sea salted butter, 1 lb | $5.49, sale $4.99 | $5.49, sale $4.99 | $6.49, sale $5.99 |
| 0081006334306 | Death Wish medium roast coffee, 10 oz | $13.99, sale $10.99 | $13.99, sale $10.99 | $16.99, sale $10.99 |
| 0086174500001 | Vital Farms pasture-raised eggs, 12 | $7.49 | $7.49 | $9.49 |
| 0081565200214 | Pete & Gerry's organic eggs, 12 | $6.49, sale $5.49 | $6.79, sale $5.79 | $6.79, sale $5.99 |
| 0007283000201 | Tillamook medium cheddar, 32 oz | $13.99 | $13.99 | $13.99 |
The six Portland stores agreed on all 25 regular prices, sale prices and sale end dates. Fred Meyer Ballard differed from them on 3 items, and QFC Ballard's regular price was higher than Fred Meyer Ballard's on 15 of the 22 items it priced. The full comparison and chart are in the best Fred Meyer store price APIs.
Step 4: Find UPCs with search
curl -s https://api.scavio.dev/api/v1/kroger/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "tillamook", "banner": "fred_meyer"}'"tillamook" matched 148 products and returned the first 24. Search prices at a store the site chooses and says which in store, here Idaho Falls rather than Portland. One product, image fields trimmed:
{
"query": "tillamook",
"page": 1,
"banner": "fred_meyer",
"store": {
"location_id": "70100156",
"name": "Idaho Falls",
"banner": "fred_meyer",
"division": "701",
"store_number": "00156",
"address": { "line1": "1555 Northgate Mile", "city": "Idaho Falls", "state": "ID", "zip": "83401" }
},
"total": 148,
"count": 24,
"products": [
{
"upc": "0007283090632",
"name": "Tillamook Extra Creamy Unsalted Butter Sticks",
"brand": "Tillamook",
"url": "/p/tillamook-extra-creamy-unsalted-butter-sticks/0007283090632",
"price": 549,
"list_price": 549,
"promo_price": 499,
"promo_ends_at": "2026-12-28T04:59:59.999Z",
"price_display": "$5.49",
"unit_price_display": "$0.34/oz",
"nfor": null,
"nfor_price": null,
"size": "4 sticks / 16 oz",
"in_stock": true,
"stock_level": "HIGH",
"is_snap_eligible": true,
"dietary_info": ["Vegetarian", "Kosher", "Pescatarian"],
"category": { "department": "Dairy & Eggs", "commodity": "Butter & Margarine", "sub_commodity": "Unsalted Butter Sticks" },
"rating": { "average": 4.75, "count": 113, "distribution": { "1": 2, "2": 2, "3": 2, "4": 10, "5": 97 } }
}
]
}Use search to collect upc values, then send them to prices for the stores you care about. Only page 1 is available (a page above 1 is refused with a 400 before any charge), there is no sort, and nfor / nfor_price carry multi-buy deals such as 2 for $5. 2 credits.
Step 5: Read one product
curl -s https://api.scavio.dev/api/v1/kroger/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"upc": "0007283090612", "banner": "fred_meyer"}'Trimmed to the fields search does not return, plus the price (description, images and most nutrition facts cut):
{
"upc": "0007283090612",
"name": "Tillamook Extra Creamy Sea Salted Butter Sticks",
"brand": "Tillamook",
"price": 549,
"promo_price": 499,
"promo_ends_at": "2026-12-28T04:59:59.999Z",
"size": "4 sticks / 16 oz",
"country_of_origin": "UNITED STATES",
"temperature": "Refrigerated",
"weight": "1.0 [lb_av]",
"is_non_gmo": true,
"nutrition": {
"serving_size": "1 tbsp (14g)",
"servings_per_container": "32.0",
"allergens": "Contains Milk and its derivates.",
"facts": [
{ "name": "Calories", "value": "100", "unit": "kcal", "daily_value": null }
]
},
"store_location": { "aisle": "AISLE 16", "aisle_number": "16", "side": "R" },
"breadcrumbs": ["Dairy & Eggs", "Butter & Margarine", "Salted Butter Sticks"],
"banner": "fred_meyer",
"store": { "location_id": "70100156", "name": "Idaho Falls", "banner": "fred_meyer" }
}Like search, product prices at the site's store, so the aisle here is Idaho Falls' (aisle 16) and not Johnson Creek's (aisle 10 in Step 2). Pass product_url from a search row instead of upc if you have it. An unknown UPC is a 404 and is charged. 2 credits.
Step 6: Browse a category
Fred Meyer sells far more than groceries. Category takes a /pl/ listing URL, and its host sets the banner:
curl -s https://api.scavio.dev/api/v1/kroger/category \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.fredmeyer.com/pl/headphones-earbuds-headsets/2900300001"}'Fred Meyer's headphones aisle had 177 products. The one on sale on page 1, images trimmed:
{
"upc": "0002724286708",
"name": "Sony ZX Series Monitor Headphones - Black",
"brand": "Sony",
"price": 2499,
"list_price": 2499,
"promo_price": 1499,
"promo_ends_at": "2026-12-07T04:59:59.999Z",
"price_display": "$24.99",
"size": "1 ct",
"in_stock": true,
"stock_level": "HIGH",
"is_snap_eligible": false,
"category": { "department": "Electronics", "commodity": "Audio & MP3 Players", "sub_commodity": "Headphones, Earbuds & Headsets" },
"rating": null
}Instead of a URL you can pass taxonomy_id (the digits at the end of the URL; ids are shared across banners) with banner. Same first-page and site-store rules as search. 1 credit.
Step 7: List this week's digital deals
curl -s https://api.scavio.dev/api/v1/kroger/deals \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"banner": "fred_meyer"}'Fred Meyer's weekly digital deals list (week id WDDShopAllProduct26111700s) had 395 items. One, images trimmed:
{
"upc": "0003800027011",
"name": "Kellogg's Frosted Flakes Frosted Flakes",
"brand": "Frosted Flakes",
"price": 649,
"list_price": 649,
"promo_price": 599,
"promo_ends_at": "2026-11-18T04:59:59.999Z",
"price_display": "$6.49",
"unit_price_display": "$0.23/oz",
"size": "28.5 oz",
"in_stock": true,
"stock_level": "HIGH",
"category": { "department": "Breakfast", "commodity": "Cereal & Granola", "sub_commodity": "Cold Cereal" },
"rating": { "average": 4.65, "count": 1669, "distribution": { "1": 79, "2": 28, "3": 39, "4": 99, "5": 1424 } }
}Items on a store sale carry promo_price. Items whose deal is a digital coupon show only the shelf price: three Coca-Cola six-packs on page 1 had price 749 and no promo_price. Their deal price lives in the coupons endpoint, next step. 1 credit.
Step 8: List a store's digital coupons
curl -s https://api.scavio.dev/api/v1/kroger/coupons \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store_id": "70100153"}'Johnson Creek offered 331 coupons (total_at_store), 24 a page, filterable by 32 departments. One of the Weekly Digital Deals coupons, image trimmed:
{
"id": "4259594",
"brand": "Kroger Brand",
"title": "$1.29",
"description": "$1.29 Kroger Cheese",
"details": "When You Buy ONE (1) Kroger Bars, Shreds or Slices (6-8 oz), Offer Valid at Select Markets. Download and redeem the coupon from November 11-November 17 only. Use up to 5 times per transaction in unlimited transactions, while supplies last.",
"savings": { "type": "price", "amount": 129, "percent": null },
"type": "standard",
"min_quantity": 1,
"categories": ["Dairy", "Pasta"],
"tags": ["Weekly Digital Deals", "Expiring Soon"],
"valid_for": ["pickup", "in_store", "delivery"],
"max_redemptions": null,
"starts_at": "2026-11-11",
"clip_by": "2026-11-17",
"expires_at": "2026-11-17"
}savings.type price means the item costs amount cents with the coupon; amount_off and percent_off are discounts. Kroger sharp cheddar shreds priced at $2.00 at Johnson Creek in a prices call, so the coupon takes it to $1.29 for shoppers who download it. Pass category (from categories) or query to filter, and page to go deeper. Coupons are listed, never clipped, and no account is used. 1 credit.
Step 9: Search suggestions
curl -s https://api.scavio.dev/api/v1/kroger/suggestions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "tillam", "banner": "fred_meyer", "store_id": "70100153"}'{
"query": "tillam",
"banner": "fred_meyer",
"count": 5,
"suggestions": [
{ "text": "tillamook cheese", "type": "query" },
{ "text": "tillamook ice cream", "type": "query" },
{ "text": "tillamook", "type": "query" },
{ "text": "tillamook yogurt", "type": "query" },
{ "text": "tillamook cheddar", "type": "query" }
]
}Useful for autocomplete, or to expand a keyword list before you search. Without store_id, the banner's store nearest Portland (97201) is used for Fred Meyer and nearest Seattle (98101) for QFC. 1 credit.
Step 10: Build a store price tracker
One snapshot cannot tell you when a price moves; a schedule can. Store each response with the time you fetched it and compare runs:
import time, requests
API = "https://api.scavio.dev/api/v1/kroger"
HEADERS = {"Authorization": "Bearer YOUR_SCAVIO_API_KEY"}
STORES = {"70100153": "fred_meyer", "70500891": "qfc"}
UPCS = ["0007283090612", "0081006334306", "0001111050438"] # up to 25 per call
def price_store(store_id, banner):
for attempt in range(3):
r = requests.post(f"{API}/prices", headers=HEADERS, timeout=150,
json={"store_id": store_id, "banner": banner, "upcs": UPCS})
if r.status_code == 200:
return r.json()["data"]["items"]
time.sleep(20) # 429 or 502: wait and retry, failed calls are not charged
return []
for store_id, banner in STORES.items():
for it in price_store(store_id, banner):
print(store_id, it["upc"], it["price"], it["promo_price"], it["promo_ends_at"], it["stock_level"])Run one request at a time and save fetched_at with each row. Two stores and 25 UPCs twice a day is 4 calls, 12 credits a day.
Every Fred Meyer and QFC endpoint
| Endpoint | What it returns | Credits | Cost per 1,000 calls on Growth |
|---|---|---|---|
/api/v1/kroger/stores | Stores near a ZIP or city, or one store by id | 1 | $1.00 |
/api/v1/kroger/prices | Up to 25 UPCs at a store you choose | 3 | $3.00 |
/api/v1/kroger/search | Up to 24 products for a keyword, at the site's store | 2 | $2.00 |
/api/v1/kroger/product | One product with nutrition and aisle | 2 | $2.00 |
/api/v1/kroger/category | Up to 24 products in a category listing | 1 | $1.00 |
/api/v1/kroger/deals | This week's digital deals | 1 | $1.00 |
/api/v1/kroger/coupons | A store's digital coupons, 24 a page | 1 | $1.00 |
/api/v1/kroger/suggestions | Search box suggestions | 1 | $1.00 |
Every endpoint takes banner kroger, qfc or fred_meyer. Failed upstream calls are retried and not charged; a not-found is charged.
What about the official Kroger API?
Kroger's developer portal is free and self-service for its Public APIs. You register an application, exchange the client id and secret for an OAuth2 token that lasts 30 minutes, and call the Products API, which returns a store's regular and promo price, stock level and aisle when you pass filter.locationId. It allows 10,000 product calls a day and 1,600 a day per Locations endpoint, and its docs reach Fred Meyer and QFC as chains and locations rather than by name. Its public manifest has no coupon or weekly-deals endpoint. Its Acceptable Use page lists, for the Products API, "Comparing products/prices among other retailers" and "Systematically scraping or gathering response data to create a database. This includes using bots or crawlers to retrieve data from our APIs." as prohibited. Read it against your use case; this is not legal advice.
Getting started
- Create a Scavio account: 50 free credits, no card, enough for a stores call and 16 prices calls.
- Call stores with your ZIP and
bannerfred_meyerorqfc, and keep thelocation_idvalues of typestore. - Collect UPCs with search, category or deals.
- Send up to 25 UPCs per store to prices, on a schedule, one request at a time.
- Try any call first in the playground.
Reference: Kroger API overview · prices docs · stores docs · coupons docs · the best Fred Meyer store price APIs · does Fred Meyer change prices by store? · how to get Kroger product data · how to get Whole Foods prices by store · H-E-B API
Frequently asked questions
Does Fred Meyer have an API?
Fred Meyer has no developer API under its own name. It is a Kroger banner, and Kroger's developer portal offers free, self-service Public APIs (Products, Locations, Cart, Identity) with OAuth2 and daily limits, 10,000 calls a day on Products; a store's price comes back only when you pass a location id. Scavio's Kroger API takes banner fred_meyer or qfc and returns store prices with one API key.
How do I find a Fred Meyer store id?
POST a ZIP code to /api/v1/kroger/stores with banner fred_meyer. Stores come back nearest first, each with an 8-digit location_id, address, hours, departments and distance. Fred Meyer ids start with 701 and QFC ids with 705; ZIP 97206 in Portland returned the Johnson Creek store as 70100153 at 1.9 miles. Fuel centers are separate entries with type fuel_center.
Are Fred Meyer online prices the same as in the store?
They are the prices Fred Meyer's site shows for the store you chose, which is what pickup and delivery orders use. We cannot see shelf tags or what rings up at the register, so treat them as the store's online price. Kroger's own developer docs add that an in-store fulfillment flag means an item is sold at the location, not that it is in stock.
Which Kroger banners does Scavio's Kroger API cover?
Three: kroger (kroger.com, the default), qfc (QFC, Washington and Oregon) and fred_meyer (Fred Meyer, the Pacific Northwest and Alaska). Ralphs, King Soopers, Smith's, Fry's and the other Kroger chains are not covered.
Do Fred Meyer's terms allow automated price collection?
Kroger's website terms, which cover fredmeyer.com and qfc.com, license the sites for "personal, non-commercial use" and prohibit using "any automated means, including bots, crawlers, scrapers, or data-mining tools" to collect or monitor information from them (Website & App Terms, updated September 9, 2026). This is not legal advice; check the current terms for your use case.