Myer Scraper - Products, Prices, Variants & Reviews
Pricing
from $1.00 / 1,000 product results
Myer Scraper - Products, Prices, Variants & Reviews
Scrape Myer (myer.com.au) department-store products: name, brand, price, was-price, saving, availability, category, images, attributes, colour & size variants, plus ratings and customer reviews. Search by keyword with brand, price and rating filters, or paste product, search or category URLs.
Pricing
from $1.00 / 1,000 product results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
4
Total users
1
Monthly active users
13 days ago
Last modified
Categories
Share
Myer Scraper: Products, Prices & Customer Reviews
Myer Scraper turns Myer's department-store catalogue into a clean, structured dataset. Search by keyword with brand, price and rating filters, browse Myer's own Sale and Clearance views, or paste product, search, category and sale URLs directly. Every product comes back with its price, was-price, saving and promo labels, and optionally the full description, size and colour variants, identifiers, an aggregate rating summary and customer reviews. Export to JSON, CSV or Excel, or pull results straight into your app through the API.
Why This Scraper?
- Two ways to find products. Search by keyword with filters, or paste product, search, category and sale URLs directly. No need to build URLs by hand.
- Sale and Clearance built in. Browse one of Myer's own promotional views (All sale, Clearance, or a department sale) as its own target, on its own or alongside a keyword search in the same run, and every result carries its own was-price, saved amount and saving percentage.
- Full product detail on demand. Switch on detail enrichment to add the full description, attributes, size and colour variants, identifiers, an aggregate rating summary and customer reviews to every product.
- Filters that actually filter. Brand, price range, minimum rating and stock status narrow the result set before it is collected, so filtered-out products are never returned or charged.
- Built for monitoring. Resume one interrupted crawl with a run or dataset id, or turn on Incremental mode to track the same search over time and get only what changed on each scheduled run.
- Nothing invented. Promo labels, ratings and review counts are read from Myer's own feeds; a product's rating and review fields are only included when Myer's feed actually returns them, never fabricated.
Use Cases
- Price and deal tracking: monitor was-price, saved amount and promo labels across Sale and Clearance to catch new markdowns first.
- Brand and competitor monitoring: track how a specific brand's range, pricing and stock status move on Myer's storefront over time.
- Retail and merchandising research: build category-level datasets of pricing, specifications and variant availability across departments.
- Customer sentiment analysis: collect ratings, review text and star distributions to analyse how a product is received.
- Deal alert tools: feed a shopper-facing app or bot with newly discounted or restocked products using Incremental mode.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
id | "700123456" |
name / title | "Velvet Bloom Hydrating Night Cream 50mL" |
brand | "Lumora" |
url | Myer link to the product, search or category page |
price | 68.0 |
listPrice / wasPrice | 85.0 / 85.0 |
savedAmount / savingsPercent | 17.0 / 20 |
promoLabel / promoLabels | "Reduced to clear" / ["Reduced to clear"] |
isOnSale / isClearance | true / false |
currency | "AUD" |
isAvailable / isBuyable | true / true |
afterPayEligible / hummEligible | true / false |
category / categories | "skincare-moisturiser" / ["beauty", "skincare", "skincare-moisturiser"] |
shortDescription / longDescription | "A rich night cream that visibly plumps skin by morning." / the full product description |
specifications | { "Formulation": "Cream", "Skin Type": "Dry, Normal" } |
variants | size / colour list with id, ean, price, wasPrice and savingsPercent (detail enrichment on) |
colourVariants | card-level colour list with id and colour (listing results only; null or absent for a pasted single product URL) |
imageUrl / images | main product photo / full image gallery |
rating / reviewCount | 4.69 / 1076 |
ratingDistribution / recommendedCount | { "5": 812, "4": 210, "3": 40, "2": 9, "1": 5 } / 940 |
reviews | array of per-review rating, title, body, author, date and verified-purchase flag (shown truncated to one entry for brevity) |
reviewsCollected | 1 (reviews actually returned this run, capped by Max reviews per product; equals the length of reviews) |
changeType | "NEW" (also "UPDATED", "UNCHANGED", "REAPPEARED", "EXPIRED"; incremental mode only, see "Resume and recurring updates" below) |
Each entry inside reviews[] also carries reviewId, verifiedPurchase, helpfulCount, notHelpfulCount, pros and cons. Each entry inside variants[] also carries size, colour and isBuyable. In incremental mode, every record also carries changedFields (populated only for UPDATED), firstSeenAt and lastSeenAt. Internal identifiers (internalId, seoToken, mfPartNumber), the raw merchCategory and categoryUri strings, metaDescription, supplierColour, hasMoreColours, brandUrl and productExclusive are also included for completeness.
How to Use
- Pick a mode:
search(keyword and filters) orurl(paste product, search, category or sale links). - For search mode, add one or more Search keywords, and optionally a Specials / sale category, brand, price range or minimum rating.
- Turn Fetch full product detail + reviews on or off, and set Max products and Max pages to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search by keyword with filters:
{"mode": "search","queries": ["moisturiser"],"brand": "Chanel","minRating": 4,"sortBy": "priceAsc","maxItems": 50,"maxPages": 10}
Browse the Clearance sale, listing fields only (no detail, no surcharge):
{"mode": "search","specialsCategory": "clearance","detailEnrichment": false,"maxItems": 100}
Paste a product URL and a category URL (replace the placeholder product link with a real one):
{"mode": "url","urls": ["https://www.myer.com.au/p/<product-slug-and-id>","https://www.myer.com.au/c/beauty/skincare"],"maxReviewsPerProduct": 10}
Scheduled run: only new, changed or freshly-expired products for one search (uncapped so a complete scan is possible):
{"mode": "search","queries": ["moisturiser"],"incrementalMode": true,"emitExpired": true,"maxItems": 0}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/myer-au-scraper").call(run_input={"mode": "search", "queries": ["moisturiser"]})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product["price"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/myer-au-scraper').call({ mode: 'search', queries: ['moisturiser'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
How Max pages shapes a search or URL walk
maxPages caps the number of pages walked per keyword, specials category, or search/category URL, not an absolute page number, and only applies with the default relevance sort; any other sort order reads the whole listing first before trimming to Max products, so maxPages has no effect there, set maxPages to a real bound when sorting by anything other than relevance. A pasted URL that already names a start page (for example pageNumber=5) counts from that page, so maxPages=2 on a page-5 URL walks pages 5 and 6. If the platform restarts this same run (a migration or a Resurrect), the automatic checkpoint continues the page count from where that run left off; a separate run started with resumeFromRunId gets its own fresh page cap starting at page 1. Use 0 to walk every page: the run still stops on its own once Max products is reached, a page repeats with no new products, or Myer's own result total for that search is reached.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one specific interrupted or previous run: paste its run or dataset id and this run skips products already collected there by id, returning only the remaining new products. This dedup is by product id, so it applies to search, specials category and category/search URL results; a pasted single product URL is always fetched and pushed again even if it was already collected in that earlier run. An automatic same-run checkpoint also protects against platform migrations without any input needed. - Incremental mode (
incrementalMode) is for scheduling the same search or URL set repeatedly (for example, daily). The first run returns everything asNEW. Later runs return onlyNEWandUPDATEDproducts by default; unchanged products are suppressed and not charged unlessemitUnchangedis on.EXPIREDrows are only produced whenemitExpiredis on and a run completes a full, uncapped scan of every tracked search or URL (not limited by Max products or Max pages, and not a Resume run); that same scan is also what first marks a product "not present".REAPPEAREDcan then only occur for a product that a prior completeemitExpiredscan already marked "not present" and that is now seen again; it never appears on its own.stateKeynames or shares a monitoring campaign; left empty, the actor derives one automatically from your mode, search terms or URLs, and filters, so different searches never mix state. Rating and review counts never drivechangeType: they change far more often than a product's own catalogue data, so they are excluded from change detection (but still returned normally).
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify → Settings → API & Integrations.
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where item pages should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (keyword and filters) or url (paste product, search, category or sale URLs). |
queries | array | prefill only: ["perfume"] | One or more keywords to search. Each keyword is searched separately, and runs as its own target alongside any Specials category. |
specialsCategory | string | "" (none) | Optional. Browse one of Myer's promotional views (All sale, Clearance, or a department sale) as an extra target in the same run, standalone or alongside Search keywords. Every product from it carries its own was-price and saving fields. |
urls | array | prefill only: ["https://www.myer.com.au/c/beauty/skincare"] | Product, search, category or sale URLs to scrape (url mode). A product URL returns that single product; a search or category URL returns multiple pages, continuing forward from the page in the URL. |
brand | string | (none) | Optional. Keep only products whose brand matches this value. Applies to both search and url mode. |
sortBy | string | relevance | Ordering within each keyword, specials category or URL, approximate rather than exact since enriched products push in the order their detail fetch finishes. Only relevance order respects Max pages; any other sort reads the whole listing first before trimming to Max products. |
minPrice | integer | (none) | Optional. Only keep products priced at or above this amount (AUD). |
maxPrice | integer | (none) | Optional. Only keep products priced at or below this amount (AUD). |
minRating | integer | (none) | Optional. Only keep products with an average rating at or above this value (1 to 5). Only takes effect when detail enrichment actually ran for that product (search/URL-listing paths need detail enrichment on; a pasted single product URL always has it); otherwise the rating isn't known yet and the filter has no effect. |
includeOutOfStock | boolean | true | Include products that are currently unavailable. Turn off to keep only available products. |
detailEnrichment | boolean | true | For each product found via search or a search/category URL, also fetch the product page for full description, attributes, variants, identifiers, ratings and reviews. A pasted single product URL always fetches full detail regardless of this setting. |
maxReviewsPerProduct | integer | 20 | Cap on reviews collected per product when detail is fetched. Use 0 for all available reviews (up to 900). |
maxItems | integer | 20 | Maximum number of products to return across the whole run. Use 0 for unlimited. |
maxPages | integer | 0 | Safety cap on result pages walked per keyword, specials category or URL. 0 walks every page. See "How Max pages shapes a search or URL walk" above. |
resumeFromRunId | string | (none) | Optional. A previous run id or dataset id. Products already in that dataset are skipped by id, so this run returns only the remaining new products; a pasted single product URL is not deduped this way and is always fetched again. |
incrementalMode | boolean | false | Turn on for recurring monitoring of the same search or URL set. Returns only NEW and UPDATED products by default on repeat runs; see "Resume and recurring updates" above for REAPPEARED / EXPIRED. |
stateKey | string | (none) | Optional, incremental mode only. Names or shares a monitoring campaign's state. Left empty, a key is derived automatically from the run's search/filter setup. |
emitUnchanged | boolean | false | Incremental mode only. Also return (and bill) products unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return (and bill) products no longer found, marked EXPIRED, but only once a run fully scans the tracked search or URL set (not capped by Max products/Max pages, not a Resume run). |
proxy | object | Apify Proxy | Connection settings. |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
reviewsis shown truncated to one entry for brevity;reviewsCollectedreflects the shown count.
{"id": "700123456","internalId": "8123456","name": "Velvet Bloom Hydrating Night Cream 50mL","brand": "Lumora","url": "https://www.myer.com.au/p/velvet-bloom-hydrating-night-cream-700123456","price": 68.0,"listPrice": 85.0,"wasPrice": 85.0,"savedAmount": 17.0,"savingsPercent": 20,"promoLabel": "Reduced to clear","promoLabels": ["Reduced to clear"],"isOnSale": true,"isClearance": false,"currency": "AUD","isAvailable": true,"isBuyable": true,"category": "skincare-moisturiser","categories": ["beauty", "skincare", "skincare-moisturiser"],"shortDescription": "A rich night cream that visibly plumps skin by morning.","specifications": { "Formulation": "Cream", "Skin Type": "Dry, Normal" },"imageUrl": "https://myer-media.com.au/wcsstore/MyerCatalogAssetStore/images/700123456_1_1_720x928.jpg","rating": 4.69,"reviewCount": 1076,"ratingDistribution": { "5": 812, "4": 210, "3": 40, "2": 9, "1": 5 },"recommendedCount": 940,"reviews": [{"reviewId": "58231","rating": 5,"title": "Great texture, noticeable results","body": "Absorbs quickly and my skin feels firmer after a few weeks.","author": "GlowSeeker22","date": "2026-03-14T09:15:00.000+00:00","verifiedPurchase": true,"helpfulCount": 4}],"reviewsCollected": 1}
Plan Requirement
The default proxy setting works out of the box, and the run rotates to a fresh connection automatically, escalating to a residential connection if refusals persist. For large or frequent runs, selecting the residential proxy group directly gives more headroom; pick it under Connection.
FAQ
How much does it cost?
You pay a small per-run start fee, plus per product returned, plus a detail-enrichment surcharge for every product whose full detail page was actually fetched and returned. Fetch full product detail + reviews defaults to on, so most runs pay that surcharge on every returned product, even ones that turn out to have no reviews at all (the surcharge covers reading the detail page, not how many reviews were found). Turn it off in search/URL-listing runs for listing-card fields only, with no surcharge. Pasting a specific product URL in url mode always fetches and returns the full detail plus reviews, and is always charged the surcharge, regardless of that setting. Suppressed incremental-mode rows (UNCHANGED with Emit unchanged off) are never charged for either event. The Pricing tab shows the current rates, and Max products caps the size of any run.
Is it legal to scrape Myer?
This actor collects only publicly available product data. You are responsible for how you use it: follow Myer's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product descriptions, photos and review text may be subject to third-party rights.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab with the same search or URLs and turn on Incremental mode. Each run then returns only new and updated products by default, and unchanged ones are not billed.
What's the difference between Resume and Incremental mode?
Resume (resumeFromRunId) continues one specific earlier run so it isn't re-collected or re-charged. Incremental mode is for running the exact same search or URLs again and again on a schedule and only wanting what changed each time; it remembers its own state, so you never paste a run id.
Why did my run finish successfully with an empty dataset instead of erroring out?
A run that could not connect at all (every request refused before any data could be read) still completes normally: the dataset is empty, and the run's status message says the connection was refused, so this is never confused with a genuine "no products found" result. Retry in a few minutes, or check the run log. A run only stops with an error for an invalid Resume id or dataset, or when Incremental mode already has saved state for that search and Resume was also set; every other outcome, including zero matches, completes as a normal successful run.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more fashion data?
Pair this actor with these related scrapers from the same team:
| 👗 El Corte Inglés Scraper Scrape El Corte Inglés elcorteingles.es products across fashion, electronics, home... | 🛒 Officeworks Scraper Scrape Officeworks products by keyword, category, or URL. Extract names, brands, prices... |
| 👗 OTTO.de Scraper Scrape OTTO.de products by search or URL. Extract prices, discounts, variants... | 🥦 Lidl.es Products, Weekly Offers, Prices & Reviews Scraper Scrape Lidl.es grocery and non-food products across weekly offers, tools, home, garden... |
| 👗 Zara Scraper Scrape Zara (zara.com) products: current price plus strike-through Rebajas (sale)... | 👗 UNIQLO Scraper Scrape UNIQLO products across 21 country storefronts in local currency. Price with pre... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.