ScavioScavio
Pricing
Tools
Sign InsGet Startedg
Blog
Fred meyer9 min readNov 13, 2026

How to Get Fred Meyer Prices by Store With an API: Regular and Sale Prices at Fred Meyer and QFC

Use Scavio's Kroger API: find a Fred Meyer or QFC store by ZIP, then one POST prices 25 UPCs at that store with sale price, end date, stock and aisle.

Scavio Team

Nov 13, 2026

Try the Kroger API free
scavio
Qfc / Kroger
Fred meyer

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

Bash
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:

JSON
{
  "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

Bash
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:

JSON
{
  "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:

  • price is the regular price and promo_price the sale price, both in cents. price_display repeats the regular price as text even when the item is on sale, so show promo_price yourself.
  • promo_ends_at is a UTC timestamp. 2026-11-18T04:59:59.999Z is 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_stock and stock_level (HIGH, LOW, TEMPORARILY_OUT_OF_STOCK) are null when the store has no stock record for the item, as for the coffee. quantity is the number the site reports as available, an estimate and not a shelf count.
  • priced_at repeats the store that priced the item. Check it: an item with price: null and priced_at: null is 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:

UPCItemPortland Fred Meyers (6)Fred Meyer BallardQFC Ballard
0001111050438Simple Truth organic lactose-free 2% milk, half gallon$4.99, sale $3.99$4.99, sale $3.99$5.79, sale $3.99
0007283090612Tillamook sea salted butter, 1 lb$5.49, sale $4.99$5.49, sale $4.99$6.49, sale $5.99
0081006334306Death Wish medium roast coffee, 10 oz$13.99, sale $10.99$13.99, sale $10.99$16.99, sale $10.99
0086174500001Vital Farms pasture-raised eggs, 12$7.49$7.49$9.49
0081565200214Pete & Gerry's organic eggs, 12$6.49, sale $5.49$6.79, sale $5.79$6.79, sale $5.99
0007283000201Tillamook 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

Bash
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:

JSON
{
  "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

Bash
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):

JSON
{
  "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:

Bash
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:

JSON
{
  "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

Bash
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:

JSON
{
  "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

Bash
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:

JSON
{
  "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

Bash
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"}'
JSON
{
  "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:

Python
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

EndpointWhat it returnsCreditsCost per 1,000 calls on Growth
/api/v1/kroger/storesStores near a ZIP or city, or one store by id1$1.00
/api/v1/kroger/pricesUp to 25 UPCs at a store you choose3$3.00
/api/v1/kroger/searchUp to 24 products for a keyword, at the site's store2$2.00
/api/v1/kroger/productOne product with nutrition and aisle2$2.00
/api/v1/kroger/categoryUp to 24 products in a category listing1$1.00
/api/v1/kroger/dealsThis week's digital deals1$1.00
/api/v1/kroger/couponsA store's digital coupons, 24 a page1$1.00
/api/v1/kroger/suggestionsSearch box suggestions1$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

  1. Create a Scavio account: 50 free credits, no card, enough for a stores call and 16 prices calls.
  2. Call stores with your ZIP and banner fred_meyer or qfc, and keep the location_id values of type store.
  3. Collect UPCs with search, category or deals.
  4. Send up to 25 UPCs per store to prices, on a schedule, one request at a time.
  5. 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.

Fred Meyer and QFC prices by store

  • Stores by ZIP, then 25 UPCs priced per call
  • Sale price, end date, stock and aisle
  • Deals, coupons, search and product in one key
Try the Kroger API free

50 free credits, no credit card

On this page

  1. Step 1: Find the store
  2. Step 2: Price your list at that store
  3. Step 3: Price the same UPCs at another store or banner
  4. Step 4: Find UPCs with search

Related articles

View all
  • scavio
    Qfc / Kroger
    Fred meyer
    7 Best Fred Meyer Store Price APIs in 2026: Scavio Prices the Same UPC at Fred Meyer and QFC Stores Side by Side
  • scavio
    Qfc / Kroger
    Fred meyer
    Does Fred Meyer Have Variable Pricing? Six Portland Stores Matched on 25 of 25 Items, and No Price Moved in an Hour
ScavioScavio

One scraper API for every social, search, e-commerce and real estate platform. Built for AI agents.

Product

  • Features
  • Pricing
  • Dashboard
  • Affiliates

Developers

  • Documentation
  • API Reference
  • Quickstart
  • MCP Integration
  • Python SDK

Alternatives

  • Tavily Alternative
  • SerpAPI Alternative
  • Firecrawl Alternative
  • Exa Alternative
  • Serper Alternative
  • Tavily vs Scavio
  • SerpAPI vs Scavio
  • All alternatives
  • Compare Scavio vs alternatives

Search APIs

  • Google Search API
  • Amazon Product API
  • YouTube API
  • Reddit API
  • Walmart Product API
  • TikTok API
  • Instagram API

Tools

  • All Tools

Ask AI about Scavio

© 2026 Scavio. All rights reserved.

Featured on TAAFT
Terms of ServicePrivacy Policy