Kogan.com Scraper | Products, Prices, Stock & Reviews
Pricing
from $1.00 / 1,000 product scrapeds
Kogan.com Scraper | Products, Prices, Stock & Reviews
Scrape Kogan.com products with full details and customer reviews. Search by keyword or paste category/search URLs across the AU, NZ and US stores. Returns price, stock, brand, GTIN, images, ratings, and review text.
Pricing
from $1.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Kogan.com Product & Reviews Scraper
Collect products and customer reviews from Kogan.com across the Australia, New Zealand and United States stores. Search by keyword with brand, price and sort filters, or paste category and search URLs directly. Every product comes back as one flat record with price, stock, brand, GTIN, images, category, average rating and, optionally, full review text.
Why this scraper
- Three stores in one actor: Australia (kogan.com/au), New Zealand (/nz) and United States (/us).
- Two ways to run: keyword search with filters, or paste your own category/search URLs.
- Rich product fields: title, brand, SKU, GTIN, price, currency, availability, condition, category, description and image gallery.
- Specials browsing: pick Kogan's own Hot Deals, Clearance or Smart Savers grid, and get
originalPrice/discountPercent/isOnSpecialwhenever Kogan itself shows a Was/SRP/Don't Pay/RRP reference price (never fabricated -- null when Kogan shows no such price). - Customer reviews on demand: review text, star rating, author, date and helpful count, with a per-product cap you control.
- Brand, price-range and sort filters, plus forward pagination across result pages.
- Optional one-click export of results into Notion, Linear, Airtable or Apify via MCP connectors.
Data you get
Sample shape, values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| store | "au" |
| url | "https://www.kogan.com/au/buy/sample-product-slug-000000/" |
| title | "Sample 55 inch 4K Smart TV" |
| brand | "Kogan" |
| sku | "ABC-000000" |
| gtin | "0000000000000" |
| price | 499 |
| priceMax | 549 |
| originalPrice | 699 |
| originalPriceLabel | "Was" |
| discountAmount | 200 |
| discountPercent | 28.6 |
| isOnSpecial | true |
| specialsCategory | "clearance" |
| currency | "AUD" |
| availability | "InStock" |
| condition | "New" |
| category | "TVs" |
| description | "Full product description text appears here when fetchDetails is on." |
| image | "https://assets.kogan.com/images/sample/000000/1-000000.jpg" |
| images | ["https://assets.kogan.com/images/sample/000000/1-000000.jpg"] |
| averageRating | 4.8 |
| ratingCount | 166 |
| reviewCount | 5 |
| reviews | [ { "author": "Sample Reviewer", "stars": 5, "comment": "Great value.", "reviewDate": "2026-01-01T00:00:00" } ] |
| productId | "000000000" |
| changeType | "NEW" (incremental mode only -- see below) |
| changedFields | [] (incremental mode only) |
| firstSeenAt / lastSeenAt | "2026-01-01T00:00:00Z" (incremental mode only) |
How to use
Search by keyword:
{"mode": "search","queries": ["air fryer"],"store": "au","maxItems": 50}
Search with brand, price and sort filters:
{"mode": "search","queries": ["tv"],"store": "au","brand": "Kogan","minPrice": 200,"maxPrice": 800,"sortBy": "price_asc","maxItems": 100}
Products with full details and reviews:
{"mode": "search","queries": ["headphones"],"store": "au","fetchDetails": true,"fetchReviews": true,"maxReviewsPerProduct": 20,"maxItems": 30}
Browse a specials category (Hot Deals, Clearance, Smart Savers):
{"mode": "search","specialsCategory": "clearance","store": "au","maxItems": 50}
Scrape pasted URLs:
{"mode": "url","urls": ["https://www.kogan.com/au/shop/?q=laptop","https://www.kogan.com/au/c/smart-tvs/"],"maxItems": 60}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | "search" | "search" for keyword + filters, "url" for pasted links. |
| queries | array | ["headphones"] | Keywords to search (search mode). Each is searched separately. |
| store | string | "au" | Store region: "au", "nz" or "us". |
| brand | string | (none) | Limit to one brand, exact Kogan spelling (search mode). |
| sortBy | string | "relevance" | "relevance", "price_asc", "price_desc", "newest" or "rating". |
| specialsCategory | string | (none) | Browse "hot-deals", "clearance" or "smart-savers" as an extra search target (search mode). |
| minPrice | integer | (none) | Keep products priced at or above this amount. |
| maxPrice | integer | (none) | Keep products priced at or below this amount. |
| urls | array | (example) | Category/search URLs to scrape (url mode). |
| fetchDetails | boolean | true | Open each product page for description, images, category, condition and rating. |
| fetchReviews | boolean | false | Also collect customer reviews per product. |
| maxReviewsPerProduct | integer | 20 | Cap on reviews per product (0 = all). |
| maxItems | integer | 6 | Max products for the whole run (0 = unlimited). |
| maxPages | integer | 0 | Safety cap on pages per keyword/URL/specials category (0 = walk every page; the run still stops at Max products, a repeated page, or the store's own result total). |
| resumeFromRunId | string | (none) | ID of a previous run or dataset. Already-collected products are skipped so this run returns only new ones (a delta). |
| incrementalMode | boolean | false | Turn on for daily/recurring monitoring of the SAME search -- see "Resume & recurring updates" below. |
| stateKey | string | (auto) | Optional name for a monitoring campaign; leave empty to derive one automatically from the search scope. |
| emitUnchanged | boolean | false | Also return (and bill) products unchanged since the last run, marked UNCHANGED. |
| emitExpired | boolean | false | Also return (and bill) products no longer found, marked EXPIRED -- only after a complete scan. |
| proxy | object | Apify Proxy | Connection settings. Pin to the store's country for best results. |
Resume & recurring updates (incremental mode)
Two distinct features:
- Resume from a previous run (
resumeFromRunId) continues ONE specific interrupted run -- paste a run/dataset ID and this run returns only products not already in it. - Incremental mode (
incrementalMode) is for scheduling this actor daily/weekly against the SAME search or URLs and getting only what changed. The actor remembers the previous run itself (no ID to paste): the first run returns everything asNEW; later runs returnNEW/UPDATED/REAPPEAREDby default, pluschangeType,changedFields,firstSeenAtandlastSeenAton every row. Turn onemitUnchangedoremitExpiredonly if you also want those rows back (they are billed like any other row).
State is tracked per keyword/URL, store, brand, price range, sort, specials category, and detail/review settings -- two differently configured runs never share a baseline. Use stateKey to name a campaign explicitly or to deliberately share state across runs; leave it empty and the actor derives a stable key automatically. maxItems, maxPages and the proxy configuration are deliberately excluded from the key, so raising a cap or changing the connection never starts a fresh baseline.
EXPIRED rows are only produced after a run that genuinely scanned the whole tracked search to the end -- never when resumeFromRunId was used, maxItems capped the run early, or maxPages cut a walk short. Those cases keep the previous state as-is and log why EXPIRED was skipped.
Volatility screen. ⚠️ A live two-fetch field diff (the required measurement method) could not be completed this session -- every attempt to reach the site was blocked before returning real product data; this is disclosed rather than guessed. One field is excluded from change detection on structural grounds instead: position (a product's rank within the search result page), because Kogan inserts promoted items that reshuffle every other card's position between fetches independent of any real product change. No other field is excluded -- price, stock, rating and description all remain part of the change fingerprint, so a real change is never hidden.
What is stored, and why reviewCount but not reviews. The incremental baseline stores a compact snapshot per product, not the full record -- the reviews array (which can hold up to maxReviewsPerProduct review texts) is excluded to keep the state blob small; reviewCount (a single number) stays in the fingerprint, so a genuine change in review volume is still detected. A synthetic (not live-measured) record shaped like a real fetchDetails+fetchReviews output is ~2.3 KB raw / ~0.5 KB gzip-compressed once reviews is excluded -- comfortably supports many thousands of tracked products per state key well under the fleet's conservative ~9 MB compressed-record planning ceiling.
Gap-aware carry-forward. If a product's detail page or reviews genuinely fail to fetch on a given run (not "the product has none"), that gap is carried forward from the last known value for change-detection purposes only, so a transient fetch failure never reads as a mass UPDATED. The dataset row itself always shows exactly what that run fetched -- carry-forward never rewrites the output, only the internal comparison.
Output example
Sample shape, values are illustrative placeholders, not from a live listing.
{"store": "au","url": "https://www.kogan.com/au/buy/sample-product-slug-000000/","title": "Sample 55 inch 4K Smart TV","brand": "Kogan","sku": "ABC-000000","gtin": "0000000000000","price": 499,"priceMax": 549,"originalPrice": 699,"originalPriceLabel": "Was","discountAmount": 200,"discountPercent": 28.6,"isOnSpecial": true,"specialsCategory": "clearance","currency": "AUD","availability": "InStock","condition": "New","category": "TVs","description": "Full product description text appears here when fetchDetails is on.","image": "https://assets.kogan.com/images/sample/000000/1-000000.jpg","images": ["https://assets.kogan.com/images/sample/000000/1-000000.jpg"],"averageRating": 4.8,"ratingCount": 166,"reviewCount": 1,"reviews": [{"reviewId": 0,"author": "Sample Reviewer","rating": 10,"stars": 5,"comment": "Great value for the price.","reviewerType": "kogan","reviewDate": "2026-01-01T00:00:00","isK1Member": null,"helpfulCount": 0}],"productId": "000000000"}
Send results into your apps (MCP connectors)
You can optionally pipe results into the apps you already use, via Model Context Protocol (MCP) connectors, without changing the dataset output.
- Authorize a connector under Apify, Settings, API & Integrations (Notion, Linear, Airtable or Apify).
- Select it in the "Export to your apps" section of the input.
- For Notion, set the parent page URL so a page is created per product.
Each connector receives a condensed, human-readable summary per product (title plus key fields as plain text), not the full JSON. The complete record always stays in the Apify dataset. Leave the connector field empty to skip this step.
Plan requirement
Runs on any Apify plan, including the free tier. For the most reliable coverage, enable Apify Proxy and pin it to the store's country.