CVS Product Reviews Scraper avatar

CVS Product Reviews Scraper

Pricing

from $0.01 / 1,000 review extracteds

Go to Apify Store
CVS Product Reviews Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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 productId and reviewId values for deduplication;
  • predictable pay-per-result billing.

What CVS review data can I extract?

FieldMeaning
productIdCVS product identifier parsed from the URL or input
productNameCVS product name
brandProduct brand
categoryCVS category identifier
productUrlCanonical CVS product URL
productImageUrlMain product image URL
upcFirst available UPC
reviewIdStable public review identifier
ratingOverall star rating
titleReview title, when supplied
bodyWritten review text, when supplied
reviewerNamePublic reviewer nickname
verifiedPurchaseWhether CVS marks the review as verified
recommendedReviewer recommendation flag
ratingsOnlyWhether the entry has ratings but no written text
reviewDateExact ISO submission timestamp
helpfulVotesPositive helpful-vote count
dimensionsAll secondary rating dimensions
valueRatingValue score
meetsExpectationsRatingMeets expectations score
qualityRatingQuality score
merchantRepliesPublic merchant or supplier responses
mediaUrlsReview photo and video URLs
incentivizedPromotion/incentive badge signal
totalProductReviewsProduct-level review count
averageProductRatingProduct-level average rating
sourceUrlCVS reviews page for verification
scrapedAtUTC 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

OptionTypeDefaultDescription
startUrlsarraysample CVS URLCVS product or -reviews URLs containing prodid-<ID>
productIdsstring array[]Numeric CVS product IDs
maxReviewsPerProductinteger50Maximum matching rows saved per product
sortstringnewestnewest, oldest, highest_rating, lowest_rating, or most_helpful
ratingintegernoneReturn only 1, 2, 3, 4, or 5-star reviews
fromDatestringnoneInclusive YYYY-MM-DD start date
toDatestringnoneInclusive YYYY-MM-DD end date
includeRatingsOnlybooleantrueInclude 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

  1. Open the Actor input page.
  2. Paste one or more CVS product URLs or review URLs.
  3. Alternatively, enter numeric CVS product IDs.
  4. Choose a low maxReviewsPerProduct for your first run.
  5. Select ordering and optional filters.
  6. Click Start.
  7. Open the Dataset tab.
  8. 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 newest for scheduled monitoring.
  • Use reviewId as the deduplication key.
  • Store the latest reviewDate and reuse it as the next fromDate.
  • Keep productId in warehouse joins; product names can change.
  • Preserve sourceUrl for analyst verification.
  • Use includeRatingsOnly: false only 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 ApifyClient
client = 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().items
print(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 prodid has 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.

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.

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.