T&T Asian Supermarket Grocery Price Scraper API - Canada
Pricing
from $0.50 / 1,000 results
T&T Asian Supermarket Grocery Price Scraper API - Canada
Scrape T&T Supermarket grocery prices and product data , Canada's largest Asian grocery chain. Extract names, prices, unit pricing, package sizes, images, and URLs across BC, Alberta, Ontario & Quebec. Export as JSON, CSV, or Excel for price monitoring & comparison apps.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
JChaw
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
7 days ago
Last modified
Categories
Share
Asian grocery price data from T&T Supermarket, Canada's largest Asian grocery chain.
The T&T Scraper API returns live prices, unit prices, package sizes and product URLs across BC, Alberta, Ontario and Quebec, with no API key and no browser.
- Coverage: BC, Alberta, Ontario, Quebec
- Every row: name, price, unit price, normalized unit price, package size, image, product URL, SKU, resolved store
- Setup: none. No API key, no account, no proxy.
Run it
Paste this into the Input tab (switch to JSON view) and hit Start:
{"search_terms": ["eggs", "milk", "chicken breast"],"postal_code": "V5X 0C4"}
Rows stream into Output as they arrive. Download from Storage β Dataset as JSON, CSV or Excel.
Two things to change from there:
- Scrape whole categories by swapping
search_termsforcategories, e.g.["produce/fruits", "dairy-eggs"] - Pin a store by replacing
postal_codewithlocationId, e.g."MGFS"for Marine Gateway in Vancouver
From the API
Grab a token at console.apify.com/settings/integrations:
curl -X POST \"https://api.apify.com/v2/acts/sunny_eternity~tnt-grocery-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"search_terms": ["eggs", "milk", "chicken breast"], "postal_code": "V5X 0C4"}'
run-sync-get-dataset-itemssuits small runs and can time out on large ones- For scheduled or full-category scrapes, POST to
/runsand read the returneddefaultDatasetId - Official JavaScript and Python clients work too
What you get back
{"store": "T&T Supermarket","name": "Seedless Green Grape (~2.5lb)","price": "4.99","unit_price": "per lb","comparable_unit_price": null,"package_size": null,"selling_type": "by_weight","was_price": null,"is_on_sale": false,"multi_buy_deal": null,"image_url": "https://www.tntsupermarket.com/media/catalog/product/...","product_url": "https://www.tntsupermarket.com/05026801-seedless-green-grape.html","product_id": "05026801","category": "produce/fruits","location": "MGFS","location_name": "Marine Gateway"}
| Field | What it holds |
|---|---|
store, name, price | Chain, product name, current price in CAD, no $ symbol |
unit_price | Raw unit price string from the store, e.g. "per lb" |
comparable_unit_price | Normalized $/100 g or $/100 ml, null when the size will not parse |
parsed_unit_price, parsed_package_size, normalized_package_size | Structured value, quantity and unit forms |
package_size, selling_type | Size string, plus by_weight or by_unit |
was_price, is_on_sale, multi_buy_deal | Present in the schema; see the FAQ on promotions |
image_url, product_url, product_id | Media and SKU |
location, location_name, location_postal_code, location_coordinates | The resolved store |
Export as JSON, CSV or Excel, pull it through the Apify API, schedule recurring runs, or push it into Zapier, Make, Google Sheets and Airbyte.
Why this Actor
- 705 runs across the suite in the last 30 days, none ended in a failed state. Run stats are public on the Apify API; figures from August 2026.
- Reaches a catalogue the mainstream scrapers skip: produce, seafood, sauces and packaged goods that the Loblaw and Pattison banners either do not carry or price on a different shelf.
- Resolves stores from T&T's own live pickup-locations API, so a location that opened last month works with no Actor update, and Quebec (Montreal, Brossard) is covered alongside BC, Alberta and Ontario.
- Runs without a browser. The only runtime dependency is the Apify SDK, reading the same JSON API the storefront reads, so you pay for no headless Chrome and hit no CAPTCHAs.
- Needs no credentials at all: no API key, no account, no third-party geocoder, no proxy configuration.
- Normalizes unit prices to $/100 g or $/100 ml, and leaves
comparable_unit_priceasnullwhere a package size will not parse, which is common for T&T's by-weight produce and keeps a bad number out of your comparison. - Refuses out-of-footprint input. A postal code outside BC, Alberta, Ontario and Quebec returns an error saying so, rather than a store from the far side of the country.
What people build with it
- Asian grocery price comparison apps, a segment the mainstream Canadian scrapers do not cover
- Cross-cuisine price studies, comparing T&T against Loblaw and Pattison banners on shared staples
- Food inflation research on produce, seafood and pantry goods priced outside the big chains
- AI shopping agents that need grounded prices for Asian ingredients
- Product databases keyed by T&T SKU, with images and product URLs
Input
| Field | Type | Required | Description |
|---|---|---|---|
categories | string[] | one of | 15 T&T categories, listed below |
categoryUrls | string[] | one of | Raw numeric T&T category IDs missing from the dropdown |
search_terms | string[] | one of | Keyword queries; combined with categories they filter by name instead |
postal_code | string | one of | Canadian postal code; labels rows with the nearest store. Default V5X 0C4 |
locationId | string | one of | T&T store code such as MGFS, takes priority over postal_code |
- At least one of
categories,categoryUrlsorsearch_termsis required - At least one of
postal_codeorlocationIdis required - Setting
categoriesandsearch_termstogether filters the category results by product name, with no separate search call. Usesearch_termson its own for a dedicated search
Categories: produce/fruits, produce/vegetables, meat-seafood/meat, meat-seafood/seafood, dairy-eggs, bakery, deli-prepared-foods, frozen/foods, frozen/desserts, frozen/seafood, snacks-candy/snacks, snacks-candy/candy, pantry/canned-dry, pantry/condiments, beverages
Examples
One category:
{ "categories": ["produce/fruits"], "postal_code": "V5X 0C4" }
Several categories at a specific store:
{ "categories": ["dairy-eggs", "bakery", "frozen/foods"], "locationId": "UVFS" }
Keyword search:
{ "search_terms": ["milk", "soy sauce", "organic eggs"], "postal_code": "V5X 0C4" }
Category results filtered by keyword:
{ "categories": ["produce/fruits"], "search_terms": ["mango"], "locationId": "MGFS" }
A category ID missing from the dropdown:
{ "categoryUrls": ["2877"], "postal_code": "V6M 2P8" }
Supported stores
Stores come from T&T's live pickup-locations API, so the Actor resolves to whatever T&T currently operates. Pass any Canadian postal code and it picks the nearest; pass locationId to pin one.
| Code | Store | City |
|---|---|---|
MGFS | Marine Gateway | Vancouver, BC |
LDFS | Lansdowne | Richmond, BC |
MTFS | Metrotown | Burnaby, BC |
LHFS | Lougheed | Coquitlam, BC |
CCFS | Central City | Surrey, BC |
DFFS | Deerfoot | Calgary, AB |
HHFS | Harvest Hills | Calgary, AB |
NEFS | Northtown Edmonton | Edmonton, AB |
SEFS | South Edmonton | Edmonton, AB |
WYFS | Weldrick | Richmond Hill, ON |
PRFS | Promenade | Thornhill, ON |
UVFS | Unionville | Markham, ON |
CPFS | Central Parkway | Mississauga, ON |
WLFS | Waterloo | Waterloo, ON |
LOFS | London | London, ON |
SLFS | St. Croix | Montreal, QC |
BRFS | Brossard | Brossard, QC |
FAQ
How do I scrape T&T Supermarket prices? Give either search_terms or categories, plus a postal_code or a locationId such as "MGFS". The Run it input above is a working example.
Which provinces does T&T cover? British Columbia, Alberta, Ontario and Quebec. A postal code outside those four returns an error naming them.
Does the Actor return store-specific prices? No. T&T serves one catalogue chain-wide, so postal_code and locationId label each row with the resolved store while the product data stays the same across the chain. The Loblaw and Pattison Actors do vary prices by store.
Are sale prices included? This version leaves them out. was_price is always null and is_on_sale always false. The fields exist so rows stay schema-compatible with the other Actors in the suite.
Why is comparable_unit_price null on some rows? T&T sells a lot of produce by weight with no package size in the title. Where a size will not parse, the Actor returns null rather than a guessed number.
Is there an official T&T API? No. T&T publishes no public product or pricing API.
How do I track prices over time? Schedule the Actor daily or weekly in Apify, keep each run's dataset, and compare price per product_id. The Actor returns current prices and stores no history itself.
Is scraping T&T legal? Scraping publicly available product and price information is generally legal. Complying with the retailer's terms of service and the law in your jurisdiction remains your responsibility, so keep request volume reasonable.
Canadian grocery Actors
| Actor | Chains | Coverage |
|---|---|---|
| Canadian Grocery Price Comparison API | 16, matched and ranked in one run | Nationwide |
| Loblaws, No Frills, Superstore & Maxi Scraper API - Canada | 12 Loblaw banners | Every province, YT, NT |
| Save-On-Foods, PriceSmart & Urban Fare Scraper API - Canada | 4 Pattison Food Group banners | BC, AB, SK, MB |
| T&T Asian Supermarket Grocery Price Scraper API - Canada (this Actor) | T&T | BC, AB, ON, QC |
| Costco Scraper API - Warehouse Prices & Deals | Costco warehouses | Canada and US |
All four retailer Actors emit the same 21 core fields, among them name, price, was_price, is_on_sale, unit_price, comparable_unit_price, package_size, selling_type and the location set. Their datasets concatenate without a mapping layer. Chain-specific extras such as pc_optimum_offer sit alongside those fields.
Feedback
Found a bug or have technical feedback? Open an issue on the Actor's Issues tab.