# 7-Eleven Canada Store Scraper🇨🇦 (`jordan-byte/seven-eleven-canada-scraper`) Actor

Scrape 7-Eleven Canada store locations and available business details, including store names, addresses, phone numbers, opening hours, coordinates, and other location information. Useful for retail research, location intelligence, market analysis, mapping, and business data collection.

- **URL**: https://apify.com/jordan-byte/seven-eleven-canada-scraper.md
- **Developed by:** [Jordan Byte](https://apify.com/jordan-byte) (community)
- **Categories:** Automation, E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## 7-Eleven Canada 7NOW Product Scraper

**Scrape real 7-Eleven Canada 7NOW delivery product prices** - no coding, no manual copy-pasting, no browser to babysit. Get every product's **name, price, sale price, size, stock status, and photo**, exactly as a customer browsing 7NOW delivery would see them, for any 7-Eleven Canada store.

### What does this 7-Eleven Canada scraper do?

This Actor scrapes **7NOW** - 7-Eleven's delivery storefront, which 7-Eleven Canada also uses for its own delivery service - store by store. Give it a store, and it returns every product 7NOW sells there: **fresh food, drinks, snacks, candy, groceries, health & beauty, and household items**, with real live prices, discounts, and stock status, priced in CAD.

Point it at a store by ID or by location, and choose whether you want the **entire catalog** or just products matching a **name you search for** (e.g. `coffee` or `chips`). Turn on **Scrape entire site** for full nationwide coverage - every store, every product. Run it on-demand, on a schedule, or trigger it via the Apify API - full run monitoring built in, with optional Discord/Slack notifications when a run finishes.

### Why scrape 7-Eleven Canada 7NOW prices?

- **Price monitoring** - track how 7NOW prices and promos change over time, per store or across the country.
- **Competitive & market research** - see exactly what a convenience-store delivery catalog looks like in Canada, and how pricing/assortment varies by store and region.
- **Catalog analysis** - build a structured dataset of product names, prices, sizes, and photos.
- **Data enrichment** - feed real product and pricing data into your own database, app, or price-comparison tool.

### How to use this 7-Eleven Canada scraper

1. Go to the **Input** tab.
2. Tell it which store to scrape - **Store IDs** (see below for how to find one) is the default and simplest option. It comes pre-filled with a real Vancouver store, so clicking **Start** with no changes gives you a working preview immediately.
3. Leave **Product name filter** empty to get the store's **entire catalog**, or fill it in (e.g. `coffee`, `chips`, `energy drink`) to get only matching products.
4. Click **Start**, then open the **Dataset** tab for your results.

There's no public per-store page to copy a store ID from, so if you don't already know one:

1. Run this Actor once with a **Location filter** set (e.g. `Vancouver` or `AB`), or leave everything empty for nationwide - it discovers matching stores automatically and scrapes their 7NOW catalogs.
2. Note the `storeId` field on any products you care about.
3. For future runs (e.g. a **Schedule** that checks prices daily), set **Store IDs** to just those values - faster, cheaper, and repeatable.

For a complete, one-shot nationwide export, turn on **Scrape entire site** instead - it ignores every other filter/cap and pulls the full 7NOW catalog for every store this Actor can find.

### Input

| Field                    | Type    | Description                                                                                                                                           |
| ------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `storeIds`               | Array   | One or more store IDs to scrape. Defaults to one real Vancouver store. Clear it to discover stores by location instead.                               |
| `locationQuery`          | String  | Only used when `storeIds` is empty. Matches city, province, postal code, or address text, e.g. `Vancouver` or `AB`. Leave empty for nationwide.       |
| `productName`            | String  | Only return products whose name contains this text (case-insensitive). Leave empty for the full catalog.                                              |
| `maxStores`              | Integer | Maximum number of stores to scrape products from (default: `10`, for a fast/cheap preview; `0` = unlimited).                                          |
| `maxProductsPerStore`    | Integer | Only used when `productName` is empty. Caps products saved per store (default: `5`, for a fast/cheap preview; `0` = unlimited).                       |
| `deliveryCategoryFilter` | Array   | Only crawl categories whose name matches one of these (case-insensitive), e.g. `Beverages`. Leave empty to crawl every category a store offers.       |
| `scrapeEntireSite`       | Boolean | Ignores `storeIds`, `locationQuery`, `maxStores`, and `maxProductsPerStore` and scrapes every store nationwide with its full catalog. Off by default. |
| `notificationWebhookUrl` | String  | Optional Discord or Slack incoming webhook URL. Posts a one-line run summary there when the run finishes.                                             |

Example input - full catalog for one store:

```json
{ "storeIds": ["37852"] }
```

Example input - just energy drinks, across every store in Vancouver:

```json
{ "locationQuery": "Vancouver", "productName": "energy drink" }
```

Example input - full nationwide export:

```json
{ "scrapeEntireSite": true }
```

### Output

Each product is saved as one dataset item:

```json
{
    "productUrl": "https://www.7now.com/product/643672-0-1/reign-storm-mango-355ml",
    "sku": "643672-0-1",
    "name": "Reign Storm Mango 355ml",
    "price": 3.89,
    "image": "https://deuktbth81ifn.cloudfront.net/7now/CA/643672-0-1/lh8n7rjvisn1eqnyvi9m.jpg",
    "sizeOrCalories": "355ml · 10 Cal",
    "badge": "Free with $30+ basket",
    "inStock": true,
    "originalPrice": null,
    "currency": "CAD",
    "slug": "reign-storm-mango-355ml",
    "storeId": "37852",
    "type": "product",
    "scrapedAt": "2026-08-14"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data table

| Field                 | Description                                                                               |
| --------------------- | ----------------------------------------------------------------------------------------- |
| `sku`, `slug`         | The product's 7NOW SKU and URL slug.                                                      |
| `name`                | Product name.                                                                             |
| `price`               | Current price (CAD) - the sale price when the product is discounted.                      |
| `originalPrice`       | The pre-discount price, only set when the product is actually on sale (`null` otherwise). |
| `sizeOrCalories`      | Pack size and/or calorie count, as shown on 7NOW.                                         |
| `badge`               | Any promo badge shown on the product (e.g. `3 FOR $7.00`), or `Out of Stock`.             |
| `inStock`             | Whether the product is currently available for delivery.                                  |
| `image`, `productUrl` | Product photo and its own 7NOW page.                                                      |
| `storeId`             | Which store this product's price and stock came from.                                     |
| `scrapedAt`           | Date (`YYYY-MM-DD`) this Actor captured the item.                                         |

### Pricing / Cost estimation

7NOW delivery data doesn't come free: 7-Eleven Canada's site sits behind a Cloudflare Managed Challenge (for store discovery) and 7NOW itself behind a separate Incapsula WAF (for the product catalog) - both verified live to require Apify's **Residential proxy** to get past. That means one full browser session per store for the delivery-catalog stage, on top of one shared session for store discovery - cost scales with how many stores you scrape, not how many products they carry. Use **Store IDs**, **Max stores**, or **Max products per store** to keep test runs quick; use **Scrape entire site** once you're ready for a full export.

### Tips for better runs

- Use **Store IDs** for repeat/scheduled price checks on stores you already know - it's the cheapest, most predictable option.
- Use **Location filter** for broad discovery across one city/province without listing individual store IDs.
- Use **Scrape entire site** for a complete nationwide catalog export - it's the most thorough (and most expensive) option this Actor offers.
- Use the Apify **Schedule** feature to re-run this Actor periodically and track price or promo changes over time.
- Set **Notification webhook URL** to a Discord or Slack incoming webhook to get pinged automatically when a run finishes.

### FAQ

**Is this legal?** This Actor only collects publicly visible product and pricing data. You are responsible for using the data in accordance with 7-Eleven's Terms of Service and any applicable laws in your jurisdiction.

**Why is `originalPrice` `null` for most products?** It's only set when 7NOW is actually running a discount on that item at that store - full-price products report `null` rather than repeating the regular price.

**Does this scrape store location details (address, hours, phone, fuel prices)?** No - this Actor is focused entirely on 7NOW delivery products and pricing. `storeId` on each product is the only store-level field in the output.

**Why is a store I know about missing?** Store discovery searches around 26 major Canadian city centers rather than a single "get everything" endpoint (7-Eleven Canada's own store API doesn't offer one). A store far from all of them may fall outside this Actor's coverage. Let us know via the Issues tab and we'll consider adding a search point near it.

**Found a bug or have a feature request?** Please use the Issues tab on this Actor's page - feedback directly shapes future updates.

# Actor input Schema

## `storeIds` (type: `array`):

Get 7NOW delivery products from one specific store, several specific stores, or none at all - just this Actor's internal store <code>id</code> for each (e.g. <code>37852</code>), one per line. There's no public per-store page to copy an ID from, so the usual flow is: run this Actor once with <b>Store IDs</b> empty (nationwide or filtered by <b>Location filter</b>) to see which stores it finds, note the <code>storeId</code> field on any products you care about, then run again with just those IDs here for fast, targeted re-scrapes. Defaults to one real Vancouver store so a first run is fast and cheap - clear this field for broader coverage instead. Ignored when <b>Scrape entire site</b> is on.

## `locationQuery` (type: `string`):

Only used when <b>Store IDs</b> is empty. Filters stores by city, province, postal code, or address text, e.g. <code>Vancouver</code> or <code>AB</code>. Leave empty to search from every major city this Actor covers nationwide (capped by <b>Max stores</b>). Ignored when <b>Scrape entire site</b> is on.

## `productName` (type: `string`):

Only return products whose name contains this text (case-insensitive, e.g. <code>coffee</code> or <code>chips</code>). Leave empty to get every product 7NOW offers at each matched store.

## `maxStores` (type: `integer`):

Maximum number of stores to scrape 7NOW products from (default: 10, for a fast/cheap preview). Set to 0 for unlimited. Ignored when <b>Scrape entire site</b> is on.

## `maxProductsPerStore` (type: `integer`):

Only used when <b>Product name filter</b> is empty. Caps how many products are saved per store. Default is 5, for a fast/cheap preview - a single store's full catalog can run into the hundreds, so raise this (or set it to 0 for unlimited) once you know what you need. Ignored when <b>Scrape entire site</b> is on.

## `deliveryCategoryFilter` (type: `array`):

Category names to crawl per store (matched case-insensitively against the category names 7NOW shows there, e.g. Beverages, Chips & Snacks). Leave empty to crawl every category 7NOW shows for that store.

## `scrapeEntireSite` (type: `boolean`):

Ignore <b>Store IDs</b>, <b>Location filter</b>, <b>Max stores</b>, and <b>Max products per store</b>, and instead discover every 7-Eleven store nationwide and pull each one's full 7NOW catalog. This is the most complete run this Actor can do - and the most expensive, since it drives one full browser session per store. Off by default.

## `notificationWebhookUrl` (type: `string`):

Optional. A Discord or Slack incoming webhook URL - when set, this Actor posts a one-line summary (stores scraped, products found) to it after the run finishes. Leave empty to skip notifications.

## Actor input object example

```json
{
  "storeIds": [
    "37852"
  ],
  "locationQuery": "",
  "productName": "",
  "maxStores": 10,
  "maxProductsPerStore": 5,
  "deliveryCategoryFilter": [],
  "scrapeEntireSite": false,
  "notificationWebhookUrl": ""
}
```

# Actor output Schema

## `products` (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 = {
    "storeIds": [
        "37852"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jordan-byte/seven-eleven-canada-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 = { "storeIds": ["37852"] }

# Run the Actor and wait for it to finish
run = client.actor("jordan-byte/seven-eleven-canada-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 '{
  "storeIds": [
    "37852"
  ]
}' |
apify call jordan-byte/seven-eleven-canada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jordan-byte/seven-eleven-canada-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/DPSjq8dYoFe17TuJv/builds/RD8dphvAeFf5IuIyS/openapi.json
