Warehouse & Grocery Review Intelligence Scraper
Pricing
from $1.00 / 1,000 review extracteds
Warehouse & Grocery Review Intelligence Scraper
Monitor new and changed Ulta Beauty product reviews with optional watchlists, review text, ratings and complaint summaries. Existing retailer inputs remain available with source-access limitations; direct iHerb access is currently blocked.
Pricing
from $1.00 / 1,000 review extracteds
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Warehouse & Grocery Review Intelligence Scraper
Monitor new and changed Ulta Beauty product reviews for a small product watchlist. Export review text, ratings and product context, then use repeat runs to review newly observed or corrected feedback instead of re-exporting the same rows.
Start with one Ulta product URL, ten reviews and AI disabled. Optional named history adds baseline/new/updated evidence; ordinary exports keep their existing behavior. Review summaries can help beauty brands and agencies inspect complaint and praise themes, with source links for human review.
This release focuses on the tested Ulta direct-product workflow. Existing retailer adapters and inputs remain available, but access varies. Direct iHerb product and review pages were blocked in the October 17 checks; other retailer paths have not been revalidated for this release. Metadata or status rows alone do not establish successful review extraction.
What You Can Do With It
- Monitor product complaints across major retailers.
- Search for matching product pages from product names or keywords.
- Compare customer sentiment for competing products.
- Find recurring quality, packaging, delivery, freshness, value, and durability issues.
- Extract product ratings, review counts, prices, images, SKUs, brands, categories, and availability where public.
- Build buyer-warning lists from negative reviews.
- Discover brand opportunities from praise and complaints.
- Analyze beauty, pet, wellness, grocery, household, and warehouse-club reviews with optional AI.
- Export clean review rows, review signals, product summaries, errors, and run summaries from the Apify Dataset.
Coverage and existing adapters
- Ulta Beauty: use direct product URLs for the starter and repeat-monitoring workflow.
- Existing adapters retained: Costco, Kroger, Sam's Club, BJ's Wholesale Club, Target, Chewy, iHerb and Sephora. Their old inputs remain accepted; current review access is source-dependent and is not guaranteed by this Ulta-focused release.
- iHerb access limitation: the tested direct product/review routes were blocked. Status/error rows explain failed access; missing reviews are never treated as removals.
- Keyword product discovery remains available for existing clients. It is outside the narrow direct-URL release checks and can cost more than a known product URL.
Input
Paste direct product URLs into Product URLs, enter keywords in Search terms, or use both. Search terms discover matching public product pages first, then the Actor scrapes reviews from the discovered product URLs.
{"productUrls": ["https://www.ulta.com/p/lash-princess-false-lash-effect-mascara-xlsImpprod12741009"],"searchTerms": [],"maxReviewsPerProduct": 10,"outputMode": "raw_reviews_and_summary","includeOpenRouterAnalysis": false}
Visible inputs:
productUrls: direct product page URLs to scrape.searchTerms: product names or keywords to search for across supported retailers.maxReviewsPerProduct: review cap per product.outputMode: choose raw reviews, summaries, review signals, or raw reviews plus summaries.includeOpenRouterAnalysis: enable optional AI-powered review intelligence.
For repeat monitoring, add optional historyName and changePolicy as shown below. Check status/error rows and real review text before expanding the input.
Quick-Start Examples
Use these examples as small, affordable first runs before scaling to larger product lists.
Small Ulta review sample
This is the best first run. It uses one direct product URL, avoids search discovery, keeps AI disabled, and usually returns product, review, summary, and status rows quickly.
{"productUrls": ["https://www.ulta.com/p/lash-princess-false-lash-effect-mascara-xlsImpprod12741009"],"searchTerms": [],"maxReviewsPerProduct": 10,"outputMode": "raw_reviews_and_summary","includeOpenRouterAnalysis": false}
Beauty Complaint And Buyer-Warning Summary
Use this when you want review intelligence signals, complaint categories, buyer warnings, and brand opportunities without exposing every raw review row.
{"productUrls": ["https://www.ulta.com/p/lash-princess-false-lash-effect-mascara-xlsImpprod12741009"],"searchTerms": [],"maxReviewsPerProduct": 25,"outputMode": "review_signals_and_summary","includeOpenRouterAnalysis": false}
Existing supplement input (access-dependent)
This input shape remains accepted for existing workflows. The direct iHerb route was blocked in current checks; use the Ulta example for a first evaluation. Health and wellness summaries, when available, describe reviewer-reported themes.
{"productUrls": ["https://www.iherb.com/pr/california-gold-nutrition-gold-c-usp-grade-vitamin-c-1-000-mg-60-veggie-capsules/61864"],"searchTerms": [],"maxReviewsPerProduct": 25,"outputMode": "raw_reviews_and_summary","includeOpenRouterAnalysis": false}
Product Search Discovery
Use search terms when you do not already know product URLs. Search discovery can vary by retailer, so direct product URLs are still the most predictable input for production runs.
{"productUrls": [],"searchTerms": ["mascara"],"maxReviewsPerProduct": 10,"outputMode": "summary_only","includeOpenRouterAnalysis": false}
Output
The Actor writes results to the default Apify Dataset. Output can include product rows, review rows, review signal rows, product review summaries, search discovery status rows, source status rows, error rows, and a run summary.
Review Row
{"itemType": "review","source": "ulta","productTitle": "Lash Princess False Lash Effect Mascara - Black","brand": "essence","productId": "xlsImpprod12741009","reviewId": "ulta_582848920","reviewHash": "sha256...","reviewRating": 5,"reviewTitle": "Great mascara","reviewText": "Review text is included for raw review outputs.","reviewDate": "2026-06-24T16:20:39.989Z","reviewerName": "Reviewer","verifiedPurchase": false,"helpfulVotes": 0,"wouldRecommend": true,"reviewProvider": "powerreviews","scrapedAt": "2026-07-02T21:35:24.000Z"}
Illustrative Product Review Summary
This synthetic example describes the output structure, not current iHerb availability or a live AI run.
{"itemType": "product_review_summary","source": "iherb","productTitle": "California Gold Nutrition, Gold C, USP Grade Vitamin C","brand": "California Gold Nutrition","reviewsScraped": 100,"reviewsAnalyzed": 100,"reviewsAnalyzedWithOpenRouter": 80,"reviewsAnalyzedWithFallback": 20,"sentimentBreakdown": {"positive": 82,"neutral": 10,"negative": 8,"mixed": 0,"unknown": 0},"topComplaints": [{"topic": "capsule size","count": 6,"severity": "medium","summary": "Some reviewers mention capsule size or swallowing difficulty."}],"topBuyerWarnings": ["Some review themes mention capsule size or reviewer-reported digestive discomfort."],"executiveSummary": "Reviews are mostly positive, with recurring reviewer-reported themes around value and capsule usability.","generatedAt": "2026-07-02T21:35:24.000Z"}
Error Row
{"itemType": "error","source": "costco","productUrl": "https://www.costco.com/.product.1491084.html","errorType": "BLOCKED","message": "Product page request was blocked after retries.","details": "Request blocked - received 403 status code.","detectedAt": "2026-07-02T21:35:24.000Z"}
Extracted Product Data
Product metadata can include:
- retailer source
- product URL and canonical URL
- product ID, SKU, item number, TCIN, DPCI, UPC, or GTIN where visible
- product title and brand
- product description
- category path and breadcrumbs
- price and currency
- availability
- average rating and review count
- image URLs
- variants such as size, flavor, color, shade, weight, or pack size
- autoship fields for pet products where visible
- supplement, ingredient, beauty, skin, hair, and pet attributes where visible
- scrape timestamp
Extracted Review Data
Review rows can include:
- retailer source
- product context
- native or generated review ID
- stable review hash for deduplication within the run
- rating, title, and review text
- review date
- public reviewer display name
- verified purchase flag where visible
- incentivized review flag where visible
- helpful and not-helpful votes
- review images as URLs
- variant, shade, size, flavor, pet, skin, hair, and beauty attributes where visible
- review provider where visible
- scrape timestamp
Review Intelligence
The Actor can produce review signal rows and product-level summaries for:
- sentiment
- complaint topic
- issue type
- priority
- buyer warning
- brand opportunity
- top complaints
- top praise
- recurring quality issues
- packaging issues
- delivery issues
- freshness issues
- pricing and value objections
- repeat-purchase signals
- executive summary
Retail-specific intelligence includes:
- grocery and warehouse: quality, packaging, freshness, value, bulk buying, delivery, and buyer-warning themes
- pet products: pet refusal, taste acceptance, digestive complaints, allergy or sensitivity mentions, autoship complaints, durability, and sizing
- health and wellness: taste, smell, texture, ingredient concerns, dosage confusion, expiration issues, and reviewer-reported side-effect mentions
- beauty and haircare: shade match, oxidation, texture, scent, irritation mentions, breakout mentions, wear time, transfer, pilling, hair dryness, frizz, applicator issues, and hype mismatch
Health, skin, hair, pet, and wellness summaries are reviewer-reported themes only. They are not medical, dermatological, or veterinary advice.
Output Modes
raw_reviews: product metadata and review rows.summary_only: product-level summaries only, plus status or error rows when needed.review_signals_and_summary: review signal rows plus product summaries.raw_reviews_and_summary: product metadata, raw reviews, source status, and product summaries.
Optional OpenRouter AI Analysis
OpenRouter is optional. When AI analysis is disabled, the Actor does not call OpenRouter and uses local fallback classification.
To enable AI review analysis:
- Make sure the Actor has an
OPENROUTER_API_KEYsecret configured. - Set
includeOpenRouterAnalysistotrue.
Cost control behavior:
- The default AI model is
openai/gpt-4o-mini. - The default AI analysis cap is
500reviews per run. - Extra reviews use local fallback classification after the cap is reached.
- Invalid or failed OpenRouter responses fall back to local classification.
- The Actor never logs the OpenRouter API key.
- Named watchlists can retain bounded cached analysis under the same model for reuse; ordinary runs do not establish shared analysis history. Cached reuse does not trigger a new AI-analysis event.
Recommended Run Sizes
| Run size | Product URLs | Reviews per product | Suggested output |
|---|---|---|---|
| First test | 1-5 | 10-25 | Raw reviews and summary |
| Small run | 10-50 | 50-100 | Raw reviews and summary |
| Medium run | 50-150 | 100-200 | Summary only or raw reviews and summary |
| High-volume run | 150+ | 200-500 | Summary only |
| AI analysis run | Any | 30-100 | Review signals and summary |
| Search-heavy run | 5+ search terms | 10-50 | Summary only or raw reviews and summary |
To keep costs low:
- Test with 1-5 product URLs first.
- Use search terms to discover products, but expect search-heavy runs to cost more than direct URL runs.
- Use
summary_onlywhen you only need product-level insights. - Keep
maxReviewsPerProductbounded. - Keep OpenRouter disabled until review extraction quality is confirmed.
- Let the Actor use its default speed, delay, and networking settings.
Use the existing default 2048 MB for the starter. Different memory tiers and large workloads are not established by the small direct-URL checks in this release.
Pricing and cost control
The active Store price and estimated platform usage appear before each run. Cost grows with product discovery, retailer blocking, review volume, and optional OpenRouter analysis. Direct product URLs are normally cheaper than search discovery. For a predictable first run, use one Ulta product URL, request ten reviews and keep AI disabled. Check the event-price example below; suppression of unchanged review output does not make extracted-review events free.
Source Reliability Notes
Retailer blocking and public review availability can vary by region, network, product, and time. The Actor is designed to fail gracefully by returning status or error rows instead of crashing the whole run.
The latest saved validation for this release supports a small direct Ulta product-review workflow. The October 17 checks found direct iHerb product and review access blocked. Other retailer adapters remain available for existing integrations, but their current review coverage has not been verified for this release.
A product metadata row, rating total, or source status is not a delivered customer review. Confirm non-empty review text and the coverage fields before using a retailer for research or recurring monitoring. Older successful runs do not guarantee current retailer access.
Limitations
- Direct product URLs and bounded keyword discovery; category crawling is not included.
- Product search from keywords is included. Category crawling is not included.
- Search discovery depends on public retailer search pages and may return partial results when a retailer blocks or changes search pages.
- Review availability depends on the product and retailer.
- Some products show ratings but no accessible public review text.
- Price, availability, shipping, currency, autoship, membership, club, selected store, and fulfillment fields may vary by location, account state, region, or delivery destination.
- Public pages can change, and source reliability can vary over time.
- Network reachability can vary by source and run environment.
- The Actor does not use login sessions.
- The Actor does not bypass CAPTCHAs, human verification, paywalls, or access controls.
- The Actor does not use paid third-party scraping APIs.
- OpenRouter analysis is optional and depends on the capability configured by the Actor operator. Keep it disabled for a first review sample; you do not need to supply an AI key.
- Health, skin, hair, pet, and wellness insights are reviewer-reported themes only, not medical or veterinary advice.
Compliance
This Actor scrapes only public product pages and public frontend data. It does not log in, use customer accounts, bypass access controls, store previous-run history in ordinary mode. Optional monitoring retains compact review comparison history and optional analysis cache. It is not an official integration with Costco, Kroger, Sam's Club, BJ's Wholesale Club, Target, Chewy, iHerb, Sephora, Ulta, or any other retailer.
How To Run
- Open the Actor in Apify Console.
- Paste direct product URLs, enter search terms, or use both.
- Set Reviews per product.
- Choose a Result type.
- Keep AI analysis off for the first scraping test.
- Start the run.
- Open the Dataset tab to download JSON, CSV, Excel, or connect through the API.
Python API Example
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")actor_client = client.actor("thescrapelab/warehouse-grocery-review-intelligence-scraper")run_input = {"productUrls": ["https://www.ulta.com/p/lash-princess-false-lash-effect-mascara-xlsImpprod12741009"],"searchTerms": [],"maxReviewsPerProduct": 10,"outputMode": "raw_reviews_and_summary","includeOpenRouterAnalysis": False}run = actor_client.call(run_input=run_input)if run is None:raise RuntimeError("Actor call returned no run or storage metadata")dataset_client = client.dataset((run["defaultDatasetId"] if isinstance(run, dict) else run.default_dataset_id))for item in dataset_client.iterate_items():print(item)
Troubleshooting
BLOCKEDorRATE_LIMITED: reduce review caps, try fewer URLs, and retry later.REVIEWS_NOT_FOUND: the product may expose ratings but not public review text in the current run environment.- Partial product metadata: price and availability may depend on store, club, location, membership, or fulfillment context.
- OpenRouter did not run: check that AI analysis is enabled and the Actor-level OpenRouter secret is configured.
- OpenRouter costs too high: keep AI disabled for large runs or use fewer reviews per product.
- Large runs are slow: split the input into smaller batches.
FAQ
Is this a Costco review scraper?
The Costco adapter and its existing inputs remain available, alongside other legacy retailers. This release is focused on Ulta monitoring; it does not establish current Costco or all-retailer review access.
Does it require retailer accounts?
No. The Actor does not use login sessions or customer accounts.
Does it store review history?
Ordinary mode is stateless. Supply a history name for optional repeat monitoring; results still use the default dataset.
Can it crawl search results or category pages?
It supports product search from keywords and direct product URLs. Category crawling is not included.
Can it extract every review from every product?
Not always. Review availability depends on each retailer, product, network environment, and public frontend behavior.
Should I enable OpenRouter for every run?
No. First confirm scraping output, then enable AI with a conservative review limit.
Can I use it for competitive intelligence?
Yes. Common use cases include complaint tracking, product comparison, brand monitoring, private-label research, review mining, and buyer-warning analysis.
Incremental product feedback watchlists
Start with one direct Ulta product URL, ten reviews and AI disabled. Existing retailers remain available with their source limitations; the current direct iHerb route is blocked, and other retailer workflows were not revalidated for this release. A run with metadata or status rows alone does not prove review extraction succeeded.
{"productUrls": ["https://www.ulta.com/p/lash-princess-false-lash-effect-mascara-xlsImpprod12741009"],"searchTerms": [],"maxReviewsPerProduct": 10,"outputMode": "raw_reviews_and_summary","includeOpenRouterAnalysis": false,"historyName": "my-product-feedback","changePolicy": "newOrChanged"}
The first run returns a baseline. Repeating the same watchlist returns new or corrected reviews within the observed review window. Summaries describe that selected subset, not the entire product history. An unchanged repeat has no new review rows, although status/run-summary rows remain. Reviews add changeType, changed-field evidence and first/last observed timestamps. locale_baseline identifies the first observed language/locale variant of a known native review; it is not a newly posted complaint. Without a stable source review ID, matching corrections or translated versions may be incomplete.
The existing review_extracted event still bills each extracted review, including unchanged reviews fetched for comparison. Duplicate output suppression alone does not reduce that event count. AI events apply to newly analyzed results; cached analysis under the same watchlist/model is reused without a new AI event. Keep AI off until extraction is useful. Result caps and charge capacity bound review work; exhausted or uncertain receipts stop further processing. Partial source or delivery failures never prove removal.
At current prices, one product and ten extracted reviews with AI off at the default 2 GB cost $0.06 in Actor events: two $0.02 startup units, $0.01 product processing and $0.01 reviews. Separately billed platform usage, if enabled, is additional. This is an event-price example, not an all-inclusive quote. Prices, event definitions, memory defaults and existing output modes are unchanged.
History limits and retries
Named histories are opt-in and separate watchlists by normalized inputs. Use a different history name for unrelated work and run only one job per watchlist at a time. Changing the watchlist settings creates a new baseline. Histories retain up to 10,000 compact observations for 90 days; expiry/truncation is reported and forgotten observations may appear again. Missing items in a bounded, blocked or partial scan are not removals. Output and storage writes are not atomic: an ambiguous write stops safely, and retries can repeat already delivered items. No exactly-once or overlapping-run guarantee is made. The run summary reports coverage, limits and history updates.
When a review page is unavailable
A reachable product page does not guarantee access to its reviews. iHerb source-status rows include reviewPageCoverage with pages requested/succeeded, the requested review limit and a stopping reason. Blocked, rate-limited, failed or missing review pages generate an explicit error while retaining reviews already collected. An empty visible page is an observation, not proof that a product has no reviews. The run summary aggregates review-page coverage by source. No missing review is classified as removed.
The browser-fallback option does not currently launch a browser in these adapters. Changing it alone does not resolve an access block. Start with a small direct-URL trial and check real review rows, coverage and errors before scheduling larger exports. Review-page access failures are not solved by increasing the output limit. Existing product/review event prices still apply to the successfully processed/extracted work; startup usage can remain payable when a source is blocked.