T&T Supermarket Grocery Price Scraper API - Canada
Pricing
from $1.00 / 1,000 results
T&T 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 $1.00 / 1,000 results
Rating
0.0
(0)
Developer
JChaw
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
T&T Supermarket Grocery Price Scraper API
Extract grocery prices and product data from T&T Supermarket — Canada's largest Asian grocery chain — including product names, current prices, unit prices, package sizes, product images, and product URLs.
This Actor is built for Asian grocery price monitoring, retail analytics, grocery price comparison apps, food inflation research, and automated Canadian grocery data pipelines.
Use it to collect structured T&T product data by category or search query, then export results as JSON, CSV, Excel, or through the Apify API.
⚡ Quick start
Search T&T for a few common items near Vancouver — paste this input and run:
{"search_terms": ["eggs", "milk", "chicken breast"],"postal_code": "V5X 0C4"}
Run in the Apify console
- Click Try for free (or Run) on the actor page.
- In the Input tab, paste the JSON above — switch to the JSON view first if needed.
- Click Start. Results stream into the Output tab as they arrive.
- Download from Storage → Dataset as JSON, CSV, or Excel.
Run via the API
Get your API token from console.apify.com/settings/integrations, then:
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"}'
This synchronous endpoint is best for small test runs. It can timeout on larger scrapes. For scheduled runs, large categories, or recurring monitoring, use the async /runs endpoint and fetch results later from the returned defaultDatasetId. Official JavaScript and Python clients are also available.
Want a larger scrape? Use categories instead of search_terms (e.g., ["produce/fruits", "dairy-eggs"]). Replace "V5X 0C4" with your own Canadian postal code — or swap postal_code for locationId with a store code like "MGFS" (Marine Gateway, Vancouver) to target a specific location.
🔗 Related Actors
Need every Canadian banner in one call? Use the aggregate actor:
- Canadian Grocery Price Comparison — Query in, comparison out. One call, six banners (Loblaws, Real Canadian Superstore, No Frills, Save-On-Foods, PriceSmart Foods, T&T) with match-confidence scoring and normalized unit prices.
Pair this with our other per-retailer scrapers for full coverage:
- Loblaws Grocery Scraper — Canadian national coverage for Real Canadian Superstore, No Frills, and Loblaws.
- Save-On-Foods & PriceSmart Grocery Scraper — Western Canada coverage for Save-On-Foods and PriceSmart Foods.
Who is this for?
- Developers building grocery price comparison apps
- Retail analysts monitoring Canadian Asian grocery prices
- CPG brands tracking T&T pricing and availability
- Researchers studying food inflation and grocery affordability
- Data teams building Canadian grocery product databases
- Indie hackers building shopping, deal, or price alert tools
Features
- 🚀 Fast & reliable: No slow browser automation, no Puppeteer — get clean structured data in seconds
- 📊 Complete product data: Names, prices, unit prices, package sizes, images, URLs, and product IDs
- 🔍 Category & search: Scrape full departments or run keyword searches ("milk", "soy sauce") — combine both in one run
- 📍 Location labels: Tag output records with the nearest T&T store by postal code
- 📁 Multiple export formats: Download as JSON, CSV, or Excel
- 🔌 Integrations: Connect with Zapier, Make, Google Sheets, webhooks, and the Apify API
What data does the T&T scraper extract?
| 🏷️ Product name | 💲 Price (CAD) |
|---|---|
| 📦 Package size (when derivable) | 📊 Unit price (e.g., 'per lb') |
| 🖼️ Product image URL | 🔗 Product page URL |
| 🆔 SKU | 📍 Nearest store label |
| ⚖️ Selling type (by weight/by unit) | 🏬 Store location name |
⬇️ Input
| Field | Type | Required | Description |
|---|---|---|---|
categories | string[] | ✳️ | T&T categories to scrape (multi-select dropdown) |
categoryUrls | string[] | ✳️ | Custom numeric T&T category IDs not in the dropdown |
search_terms | string[] | ✳️ | Keyword search queries (e.g., milk, soy sauce); when combined with categories, acts as a name filter instead of a separate search call |
postal_code | string | ✳️ | Canadian postal code — labels output records with nearest store |
locationId | string | ✳️ | T&T store code (e.g., MGFS); takes priority over postal_code |
✳️ At least one of
categories,categoryUrls, orsearch_termsmust be provided. ✳️ At least one ofpostal_codeorlocationIdmust be provided.
Example inputs
Single category:
{"categories": ["produce/fruits"],"postal_code": "V5X 0C4"}
Multiple categories:
{"categories": ["dairy-eggs", "bakery", "frozen/foods"],"locationId": "UVFS"}
Keyword search:
{"search_terms": ["milk", "soy sauce", "organic eggs"],"postal_code": "V5X 0C4"}
Category + keyword filter:
{"categories": ["produce/fruits"],"search_terms": ["mango"],"locationId": "MGFS"}
Note: When
categories(orcategoryUrls) andsearch_termsare both provided, the search terms act as keyword filters on the category results rather than triggering separate search API calls. Only products whose names contain at least one of the specified terms are returned. Usesearch_termsalone (withoutcategories) for a dedicated search query.
Custom category ID (advanced):
{"categoryUrls": ["2877"],"postal_code": "V6M 2P8"}
⬆️ Output
Results are stored in a dataset accessible from the Output or Storage tab. Export as JSON, CSV, or Excel.
JSON output example
{"store": "T&T Supermarket","name": "Seedless Green Grape (~2.5lb)","price": "4.99","unit_price": "per lb","image_url": "https://www.tntsupermarket.com/media/catalog/product/...","product_url": "https://www.tntsupermarket.com/05026801-seedless-green-grape.html","product_id": "05026801","location": "MGFS","location_name": "Marine Gateway","category": "produce/fruits","selling_type": "by_weight","package_size": null,"comparable_unit_price": null,"was_price": null,"is_on_sale": false,"multi_buy_deal": null}
🏪 Supported stores
The actor calls T&T's live pickup-locations API at runtime, so it resolves to whatever stores T&T currently operates. Pass any Canadian postal code via postal_code and the actor picks the nearest store automatically. To target a specific store, pass its T&T code via locationId. Common codes (BC / AB / ON / QC):
| 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
Are sales and promotional prices included?
Not in this version — was_price is always null and is_on_sale is always false. We may add promotional field support in a future release.
Does the scraper return store-specific prices?
T&T serves a unified product catalog across all stores. The locationId and postal_code inputs label each output record with the nearest physical store, but the product data is the same across the chain.
Is there an official T&T API?
T&T does not offer a public API for product or pricing data. This actor gives you a reliable, structured alternative — fresh grocery data without the maintenance overhead of building your own scraper.
Is it legal to scrape T&T?
Scraping publicly available product and price information is generally legal, but you are responsible for complying with T&T's terms of service and any applicable laws in your jurisdiction. Use the data responsibly and avoid excessive request volume.
How much does it cost to run?
The actor runs on Apify's pay-per-usage model. Small scrapes (a few categories) typically fit within Apify's free tier credits. Larger full-store scrapes scale with the number of products and API calls.
Which provinces does T&T cover?
T&T Supermarket operates in British Columbia, Alberta, and Ontario. Postal code resolution works for major metro areas in those provinces.
Can I integrate the scraper with other tools?
Yes! Use Apify integrations to connect with Zapier, Make, Google Sheets, Airbyte, and more. You can also trigger runs via webhooks or the Apify API and export scraped data as JSON, CSV, or Excel.
Can I schedule recurring scrapes?
Yes — use Apify's built-in scheduler to run the actor daily, weekly, or on any cron schedule. This is ideal for tracking grocery price history over time.
📝 Your feedback
We're always working on improving the performance of our Actors. If you've got any technical feedback for the T&T Grocery Scraper or found a bug, please create an issue on the Actor's Issues tab.