# Giant Food Product Scraper (`axlymxp/giantfood-product-scraper`) Actor

Scrape Giant Food (giantfood.com) grocery products — price, unit price, size, brand, nutrition facts, ingredients, images, dietary flags and EBT eligibility — as clean JSON. Pull products by URL, ID, or category, or crawl the whole catalog. Pay only for the results you get.

- **URL**: https://apify.com/axlymxp/giantfood-product-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 dataset items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Giant Food Product Scraper

Extract full product data from **Giant Food** ([giantfood.com](https://giantfood.com)) —
an Ahold Delhaize USA grocery banner serving the Mid-Atlantic — as clean,
structured JSON. Get **prices, unit prices, full nutrition facts, ingredients,
images, dietary/allergen flags and EBT eligibility** for any product, category, or
the entire ~40,000-item catalog.

No login, no store selection, no browser automation to babysit — paste product
URLs, IDs, or aisle links (or flip on "scrape the whole catalog") and get a tidy
dataset you can push straight into Sheets, a database, or your app.

### Who it's for

- **Price & competitive intelligence** — CPG brands and competing grocers tracking
  Giant Food shelf prices, unit pricing and promotions over time.
- **CPG / brand manufacturers** — monitor your own SKUs' price, placement, images,
  nutrition and content accuracy on a major US banner.
- **Nutrition, diet & health apps** — ingredients, full nutrition facts, allergen
  and dietary flags, serving sizes, and EBT/SNAP eligibility.
- **Market researchers & data teams** — build a structured grocery catalog for
  analysis, dashboards, or model training.
- **AI agents & LLM apps** — call it over MCP to ground answers in real product data.

### What you get (output fields)

Each product is one dataset row. Detail pages include the full set below; light
listing mode (see `fetchFullDetail`) returns the core commercial fields.

| Field                                                              | Type           | Description                                            |
| ------------------------------------------------------------------ | -------------- | ------------------------------------------------------ |
| `productId`                                                        | string         | Giant Food product ID                                  |
| `name`                                                             | string         | Product name                                           |
| `brand`                                                            | string         | Brand name                                             |
| `url`                                                              | string         | Canonical product page URL                             |
| `price`                                                            | number         | Regular price (package total, USD)                     |
| `unitPrice`                                                        | number         | Price per unit (e.g. per lb / per oz)                  |
| `unitMeasure`                                                      | string         | Unit for the unit price (`lb`, `oz`, `ct`…)            |
| `size`                                                             | string         | Package size (e.g. "apx 3.5 lb")                       |
| `variableWeight`                                                   | boolean        | Sold by variable weight                                |
| `onSale`                                                           | boolean        | Advertised on sale                                     |
| `outOfStock`                                                       | boolean        | Currently out of stock                                 |
| `ebtEligible`                                                      | boolean        | EBT / SNAP eligible                                    |
| `category`                                                         | string         | Root category name                                     |
| `categoryPath`                                                     | array          | Full category breadcrumb                               |
| `aisle`                                                            | string         | Aisle name                                             |
| `image` / `images`                                                 | string / array | Main image + all image URLs                            |
| `calories`                                                         | number         | Calories per serving                                   |
| `servingSize`                                                      | string         | Serving size                                           |
| `servingsPerContainer`                                             | string         | Servings per container                                 |
| `nutrition`                                                        | array          | Nutrition facts `[{name, amount, unit, dailyPercent}]` |
| `ingredients`                                                      | string         | Full ingredients list                                  |
| `directions`                                                       | string         | Usage / preparation directions                         |
| `warnings`                                                         | string         | Warnings                                               |
| `countryOfOrigin`                                                  | string         | Country of origin                                      |
| `manufacturerName`                                                 | string         | Manufacturer name                                      |
| `manufacturerPhone`                                                | string         | Manufacturer phone                                     |
| `description`                                                      | string         | E-commerce description                                 |
| `bulletPoints`                                                     | array          | Marketing bullet points                                |
| `organic`, `vegan`, `vegetarian`, `kosher`, `bogo`, `privateLabel` | boolean        | Common attribute flags                                 |
| `flags`                                                            | object         | Full set of ~30 raw product flags                      |
| `rating`                                                           | number         | Product rating (0 if no reviews)                       |
| `scrapedAt`                                                        | string         | ISO timestamp                                          |

### High-value use cases

1. **Weekly price monitoring** — schedule a category or catalog run and diff
   `price` / `unitPrice` / `onSale` over time to track promotions and price moves.
2. **Brand shelf audit** — pull your brand's products and verify images, nutrition,
   ingredients and descriptions are correct and complete.
3. **Nutrition & EBT datasets** — build a clean feed of calories, nutrition facts,
   ingredients and EBT eligibility for a diet, health, or benefits app.
4. **Assortment & category research** — enumerate an aisle (or the whole catalog)
   to map assortment, private-label share, and organic/vegan coverage.
5. **AI grounding** — feed real product data to an assistant that answers "what's
   the cheapest EBT-eligible ground beef at Giant Food?"

### Input parameters

| Field               | Type    | Default | Description                                                             |
| ------------------- | ------- | ------- | ----------------------------------------------------------------------- |
| `productUrls`       | array   | `[]`    | Product page URLs to scrape in full.                                    |
| `productIds`        | array   | `[]`    | Numeric product IDs (resolved to URLs via the sitemap).                 |
| `categoryUrls`      | array   | `[]`    | Aisle URLs or `<id>-<slug>` (e.g. `1563-meat`).                         |
| `scrapeAllProducts` | boolean | `false` | Crawl the entire catalog via the sitemap.                               |
| `updatedSince`      | string  | —       | With catalog crawl: only items updated on/after this ISO date.          |
| `fetchFullDetail`   | boolean | `true`  | For category/catalog items, fetch full detail (vs. light listing rows). |
| `maxItems`          | integer | `100`   | Stop after this many product rows.                                      |
| `zyteApiKey`        | string  | —       | Optional: use your own Zyte key instead of the built-in fetch.          |

Provide at least one of `productUrls`, `productIds`, `categoryUrls`, or
`scrapeAllProducts`.

#### Example input

```json
{
    "categoryUrls": ["1563-meat"],
    "fetchFullDetail": true,
    "maxItems": 50
}
```

#### Example output (one row, trimmed)

```json
{
    "productId": "163208",
    "name": "Giant All Natural 80% Lean 20% Fat Ground Beef Fresh",
    "brand": "Our Brand",
    "url": "https://giantfood.com/groceries/product/giant-all-natural-80-lean-20-fat-ground-beef-fresh-apx-3-5-lb/163208",
    "price": 23.77,
    "unitPrice": 6.79,
    "unitMeasure": "lb",
    "size": "apx 3.5 lb",
    "variableWeight": true,
    "ebtEligible": true,
    "outOfStock": false,
    "category": "Meat",
    "categoryPath": ["Groceries", "Meat", "Ground Meat"],
    "image": "https://i5.peapod.com/c/RN/RNMEP.png",
    "calories": 288,
    "servingSize": "4 oz",
    "nutrition": [
        { "name": "Total Fat", "amount": 22.7, "unit": "g", "dailyPercent": 35 }
    ],
    "ingredients": "Ground Beef.",
    "banner": "Giant Food",
    "scrapedAt": "2026-08-18T12:00:00+00:00"
}
```

### Scheduling & integrations

- **Schedule** runs (hourly/daily/weekly) from the Apify Console for automated
  price monitoring; use `updatedSince` for cheap incremental catalog refreshes.
- **Webhooks** fire on run completion to notify your systems or trigger downstream jobs.
- **Export** to JSON, CSV, Excel, or push to Google Sheets, Make, Zapier, Airbyte,
  S3, or your own database via the Apify API.

### Use with AI assistants (MCP)

This Actor is callable over the **Apify MCP server**, so AI assistants (Claude,
ChatGPT, or your own agents) can run it and read the results as a tool — ideal for
"find the cheapest organic X at Giant Food" style questions grounded in live data.

### FAQ

**Which store's prices are returned?** Giant Food publishes a standard catalog
price per product on its public product pages; that is what this Actor extracts.
Store-specific pricing that requires selecting a physical store is not exposed
publicly on the web.

**How many products can I scrape?** From a single product up to the entire catalog
(~40,000 items). Use `maxItems` to cap a run and `updatedSince` for incremental
updates.

**How fresh is the data?** Every run scrapes live pages, so results reflect the
site at run time. Schedule runs to keep a dataset current.

**Do I need a Zyte key or proxies?** No. A residential fetch is built in so the
Actor works out of the box. You can optionally supply your own Zyte key.

**Is keyword search supported?** Not in this version — Giant Food's public web
search is store-gated. Use category/aisle URLs or the catalog crawl to enumerate
products instead.

**Is this legal?** The Actor collects only publicly available product information.
You are responsible for complying with Giant Food's terms and applicable laws, and
for how you use the data.

**Reliability?** The client handles Giant Food's anti-bot protection (DataDome +
Cloudflare) via a residential fetch with automatic retries. If a run fails, errors
are reported and you are only billed for results produced.

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or
sponsored by Giant Food or Ahold Delhaize. All trademarks belong to their
respective owners.

# Actor input Schema

## `productUrls` (type: `array`):

Giant Food product page URLs, e.g. https://giantfood.com/groceries/product/<slug>/<id>. Full detail is scraped for each.

## `productIds` (type: `array`):

Numeric Giant Food product IDs (e.g. 163208). Each ID is resolved to its product page via the sitemap, then scraped in full.

## `categoryUrls` (type: `array`):

Aisle URLs (https://giantfood.com/groceries/browse-aisles/<id>-<slug>) or bare '<id>-<slug>' (e.g. 1563-meat). All products in the aisle are scraped.

## `scrapeAllProducts` (type: `boolean`):

Enumerate every product in the Giant Food catalog (~40k) via the sitemap and scrape each. Use maxItems to cap the run, and updatedSince for incremental updates.

## `updatedSince` (type: `string`):

Only used with 'Scrape the entire catalog'. ISO date (YYYY-MM-DD); scrapes only products whose sitemap lastmod is on/after this date.

## `fetchFullDetail` (type: `boolean`):

When scraping categories, fetch each product's full detail page (nutrition, ingredients, etc.). Turn off for faster, cheaper listing-level rows (price, name, image, flags only).

## `maxItems` (type: `integer`):

Stop after pushing this many product rows.

## `zyteApiKey` (type: `string`):

Optional. Provide your own Zyte API key to fetch through your account. Leave empty to use the built-in residential fetch.

## Actor input object example

```json
{
  "productUrls": [
    {
      "url": "https://giantfood.com/groceries/product/giant-all-natural-80-lean-20-fat-ground-beef-fresh-apx-3-5-lb/163208"
    }
  ],
  "productIds": [
    "163208",
    "304"
  ],
  "categoryUrls": [
    "1563-meat",
    "9354-ground-beef"
  ],
  "scrapeAllProducts": false,
  "updatedSince": "2026-01-01",
  "fetchFullDetail": true,
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "productUrls": [
        {
            "url": "https://giantfood.com/groceries/product/giant-all-natural-80-lean-20-fat-ground-beef-fresh-apx-3-5-lb/163208"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/giantfood-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "productUrls": [{ "url": "https://giantfood.com/groceries/product/giant-all-natural-80-lean-20-fat-ground-beef-fresh-apx-3-5-lb/163208" }] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/giantfood-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "productUrls": [
    {
      "url": "https://giantfood.com/groceries/product/giant-all-natural-80-lean-20-fat-ground-beef-fresh-apx-3-5-lb/163208"
    }
  ]
}' |
apify call axlymxp/giantfood-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/giantfood-product-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/tsbCmlpqqjYtL8gSB/builds/usBHaEFe4NHh6RYrj/openapi.json
