CVS Product Reviews Scraper
Pricing
from $0.01 / 1,000 review extracteds
CVS Product Reviews Scraper
Extract public CVS product reviews with ratings, text, verified-purchase signals, quality dimensions, helpful votes, media, and merchant replies.
Pricing
from $0.01 / 1,000 review extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Collect public CVS customer reviews as clean, structured records.
Enter CVS product URLs, -reviews URLs, or numeric CVS product IDs.
The Actor returns one dataset row per review with exact IDs, timestamps, ratings, review text, reviewer signals, product context, helpful votes, media, and merchant replies.
Use the output for voice-of-customer research, quality monitoring, brand reputation, retail intelligence, and competitor benchmarking. No CVS account or browser automation is required.
What does CVS Product Reviews Scraper do?
CVS Product Reviews Scraper turns public review pages such as:
https://www.cvs.com/shop/...-prodid-358135-reviews
into export-ready JSON, CSV, Excel, XML, or RSS records.
It can:
- 🛍️ process one or many CVS products per run;
- ⭐ collect ratings and written reviews;
- ✅ identify verified-purchase reviews;
- 👍 capture recommendations and helpful votes;
- 📊 return Value, Meets expectations, Quality, and other dimensions;
- 💬 preserve merchant or supplier replies;
- 🖼️ expose review photo and video URLs;
- 🗓️ filter by exact review dates;
- 🔁 support scheduled monitoring with stable review IDs.
Who is it for?
Brand and product teams use CVS feedback to find recurring complaints, packaging issues, perceived value gaps, and customer language.
Manufacturers and suppliers monitor how products perform after launch and whether merchant replies resolve customer concerns.
Retail intelligence analysts compare ratings, review volume, verified-purchase share, and recommendation signals across CVS SKUs.
Agencies collect repeatable evidence for client reputation, product-positioning, and consumer-insight reports.
Data teams load normalized reviews into warehouses, BI tools, NLP pipelines, spreadsheets, and alerting systems.
Why use this CVS reviews scraper?
CVS product pages are useful to shoppers but awkward for bulk analysis. This Actor gives every review a stable row and preserves the source context needed for audits.
Benefits include:
- no manual copy and paste;
- no CVS login or user-supplied cookies;
- direct structured extraction rather than fragile visual scraping;
- deterministic limits and filters;
- typed fields suitable for databases;
- stable
productIdandreviewIdvalues for deduplication; - predictable pay-per-result billing.
What CVS review data can I extract?
| Field | Meaning |
|---|---|
productId | CVS product identifier parsed from the URL or input |
productName | CVS product name |
brand | Product brand |
category | CVS category identifier |
productUrl | Canonical CVS product URL |
productImageUrl | Main product image URL |
upc | First available UPC |
reviewId | Stable public review identifier |
rating | Overall star rating |
title | Review title, when supplied |
body | Written review text, when supplied |
reviewerName | Public reviewer nickname |
verifiedPurchase | Whether CVS marks the review as verified |
recommended | Reviewer recommendation flag |
ratingsOnly | Whether the entry has ratings but no written text |
reviewDate | Exact ISO submission timestamp |
helpfulVotes | Positive helpful-vote count |
dimensions | All secondary rating dimensions |
valueRating | Value score |
meetsExpectationsRating | Meets expectations score |
qualityRating | Quality score |
merchantReplies | Public merchant or supplier responses |
mediaUrls | Review photo and video URLs |
incentivized | Promotion/incentive badge signal |
totalProductReviews | Product-level review count |
averageProductRating | Product-level average rating |
sourceUrl | CVS reviews page for verification |
scrapedAt | UTC extraction timestamp |
Optional values remain null rather than being guessed.
Input
You can combine URL and ID inputs. Duplicate products are processed once.
{"startUrls": [{"url": "https://www.cvs.com/shop/cvs-ibuprofen-pain-reliever-fever-reducer-nsaid-200-mg-24-coated-tablets-prodid-358135-reviews"}],"productIds": ["247031"],"maxReviewsPerProduct": 50,"sort": "newest","includeRatingsOnly": true}
At least one URL or product ID is required.
Input options
| Option | Type | Default | Description |
|---|---|---|---|
startUrls | array | sample CVS URL | CVS product or -reviews URLs containing prodid-<ID> |
productIds | string array | [] | Numeric CVS product IDs |
maxReviewsPerProduct | integer | 50 | Maximum matching rows saved per product |
sort | string | newest | newest, oldest, highest_rating, lowest_rating, or most_helpful |
rating | integer | none | Return only 1, 2, 3, 4, or 5-star reviews |
fromDate | string | none | Inclusive YYYY-MM-DD start date |
toDate | string | none | Inclusive YYYY-MM-DD end date |
includeRatingsOnly | boolean | true | Include star ratings without title/body text |
Invalid URLs and dates fail closed with a clear error.
Output example
{"productId": "358135","productName": "CVS Ibuprofen Pain Reliever & Fever Reducer (NSAID) 200 mg, 24 Coated Tablets","brand": "CVS","reviewId": "252332286","rating": 5,"title": "Perfect amount at a great price","body": "CVS brand ibuprophen tablets are small and easy to swallow.","reviewerName": "Alice","verifiedPurchase": false,"recommended": true,"ratingsOnly": false,"reviewDate": "2026-06-29T18:42:01.000+00:00","helpfulVotes": 0,"valueRating": 5,"meetsExpectationsRating": 5,"qualityRating": 5,"merchantReplies": [],"mediaUrls": [],"sourceUrl": "https://www.cvs.com/shop/...-prodid-358135-reviews"}
Fields omitted from this short example remain available in the dataset.
How to scrape CVS product reviews
- Open the Actor input page.
- Paste one or more CVS product URLs or review URLs.
- Alternatively, enter numeric CVS product IDs.
- Choose a low
maxReviewsPerProductfor your first run. - Select ordering and optional filters.
- Click Start.
- Open the Dataset tab.
- Export or integrate the records.
The default prefill is intentionally small enough for a quick first run.
How much does it cost to scrape CVS product reviews?
The Actor uses pay-per-event pricing. A small one-time start charge covers run initialization, and each saved CVS review is charged as one review event.
The initial local configuration is:
- start: $0.005 per run;
- CVS review at BRONZE: $0.000024795 per saved row;
- CVS review tiers range from $0.000028515 on FREE to $0.00001 on PLATINUM and DIAMOND.
The Console shows the exact maximum charge before a run starts. Filters that reduce saved rows also reduce per-result charges.
Filtering CVS reviews
Set rating to focus on a star segment.
For example, rating: 1 surfaces critical customer feedback.
Set fromDate and toDate for a reporting period:
{"productIds": ["358135"],"fromDate": "2026-01-01","toDate": "2026-06-30","sort": "newest","maxReviewsPerProduct": 500}
Date boundaries are inclusive and evaluated against exact UTC review timestamps.
Ratings-only reviews
CVS contains entries where a shopper submitted stars and dimensions without written text. These are valid rating records and are included by default.
Set includeRatingsOnly to false when your NLP or sentiment workflow requires written title/body content.
The ratingsOnly field lets downstream workflows distinguish both record types even when they are collected together.
Tips for reliable monitoring
- Start with 10–50 rows while validating a product ID.
- Sort by
newestfor scheduled monitoring. - Use
reviewIdas the deduplication key. - Store the latest
reviewDateand reuse it as the nextfromDate. - Keep
productIdin warehouse joins; product names can change. - Preserve
sourceUrlfor analyst verification. - Use
includeRatingsOnly: falseonly if written feedback is mandatory. - Split very large multi-product portfolios into scheduled batches.
Integrations
Send results to:
- Google Sheets for review triage and weekly reporting;
- Slack for one-star review alerts;
- Zapier or Make for no-code workflows;
- Airtable for product-level issue tracking;
- BigQuery or Snowflake for historical analysis;
- Amazon S3 for a review data lake;
- webhooks for near-real-time ingestion;
- language models for themes and summarization.
A useful alert workflow filters rating <= 2, checks reviewId against previously seen records, and posts the title, body, dimensions, and source link to the product owner.
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/cvs-product-reviews-scraper').call({productIds: ['358135'],maxReviewsPerProduct: 100,sort: 'newest',includeRatingsOnly: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/cvs-product-reviews-scraper").call(run_input={"productIds": ["358135"],"maxReviewsPerProduct": 100,"sort": "most_helpful",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
cURL API example
curl "https://api.apify.com/v2/acts/automation-lab~cvs-product-reviews-scraper/runs?token=$APIFY_TOKEN" \-X POST \-H 'Content-Type: application/json' \-d '{"productIds": ["358135"],"maxReviewsPerProduct": 50,"sort": "newest"}'
Read the resulting default dataset after the run succeeds.
Use with Apify MCP
Connect AI assistants through the Apify MCP server:
https://mcp.apify.com?tools=automation-lab/cvs-product-reviews-scraper
Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/cvs-product-reviews-scraper"
Claude Desktop and Cursor
Add this to the Claude Desktop or Cursor MCP configuration and provide your token through the client authentication flow:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/cvs-product-reviews-scraper"}}}
VS Code
Open the VS Code MCP configuration, add an HTTP server named apify, and use the same scoped URL above.
Example prompts:
- “Collect the newest 50 CVS reviews for product 358135.”
- “Find one-star written CVS reviews since January and summarize recurring quality problems.”
- “Compare Value and Quality dimensions for these three CVS product IDs.”
- “Show reviews with merchant replies and link each one to its source.”
Data quality and deduplication
Every record uses CVS/Bazaarvoice source identifiers rather than generated hashes.
reviewId is the preferred unique key.
The Actor deduplicates repeated review IDs during a run. It also deduplicates product IDs when the same product appears as both URL and direct ID input.
Product-level counts and averages come from the same public review response as the rows. The Actor does not infer sentiment, demographics, or reviewer identity.
Limitations
- CVS can change its public storefront or review integration.
- A CVS page slug may change while its numeric product ID remains stable.
- Some older URLs may point to a product variant whose visible
prodidhas no active review record. - Optional fields are absent when the reviewer or merchant did not submit them.
- Ratings-only entries do not contain text for NLP analysis.
- Deleted or moderated reviews are not returned by the public source.
- Very broad date filters may require reading multiple API pages.
The Actor is designed for public review data, not account-only content, prescriptions, orders, or customer profiles.
Troubleshooting
Why did my run save zero rows?
Confirm the URL contains prodid-<ID>, remove date/rating filters, and keep includeRatingsOnly enabled.
Some CVS product variants have no public review records.
Why are some titles or bodies null?
CVS accepts ratings without written text.
Set includeRatingsOnly: false if your workflow requires text.
Why was my URL rejected?
Only cvs.com product URLs containing a numeric prodid-<ID> are accepted.
Search/category URLs do not identify a single review collection.
How do I avoid duplicate alerts?
Persist reviewId and alert only for IDs not seen in previous scheduled runs.
Is scraping CVS reviews legal?
The Actor collects public product-review content without logging in. Review data can still contain user-generated text and public nicknames.
You are responsible for your use case and applicable laws, contracts, and platform terms. Avoid attempts to identify reviewers, do not use the data for harassment or sensitive profiling, and retain only what your workflow needs. For regulated or high-risk use cases, obtain legal advice.
Related scrapers
Build a wider retail voice-of-customer workflow with:
Use each source-specific Actor independently and join records in your warehouse by product mapping.
FAQ
Can I submit a normal product URL instead of a -reviews URL?
Yes. The Actor extracts the numeric prodid from either form.
Can I enter only a numeric ID?
Yes. Add it to productIds as a string such as "358135".
Does this Actor need a residential proxy?
No. It uses CVS's public structured review delivery path directly.
Can I sort by helpfulness?
Yes. Use sort: "most_helpful".
Are date filters inclusive?
Yes. Both fromDate and toDate include the specified calendar day.
Can I export to CSV or Excel?
Yes. Open the dataset and select any Apify-supported export format.
Can I schedule recurring runs?
Yes. Use Apify Schedules, store the last review date/IDs, and deliver new rows through a webhook or integration.
Support
If a valid CVS product unexpectedly returns no reviews, include:
- the CVS URL or product ID;
- the Actor run URL;
- the input used;
- the approximate review count visible on CVS;
- the expected versus actual result.
This evidence makes source changes and variant mismatches faster to diagnose.