Competitive intelligence tools live and die by data freshness. When your product tracks how software vendors are perceived across the market, manually checking review pages is not a workflow — it is a bottleneck.
SaaS review sites are one of the richest public sources for this kind of signal. Each product page contains reviewer sentiment, feature-level ratings, use case context, and version-specific feedback. The problem is that this data is spread across thousands of individual URLs, updated continuously, and not available via any official API.
This guide covers how to extract that data programmatically using the Minexa API — a structured web extraction API that removes the need to write CSS selectors, manage rendering infrastructure, or deal with inconsistent LLM output.
📋 What a review detail page typically contains
Field reference card
| Field | Example value |
|---|---|
| Reviewer name | Anonymous / display name |
| Overall rating | 4.2 / 5 |
| Review title | 'Great for mid-market teams' |
| Review body | Full text content |
| Feature ratings | Ease of use, support, value |
| Reviewer role | 'Product Manager, 200-500 employees' |
| Verified purchase flag | true / false |
| Review date | 2024-11-03 |
| Helpful votes | 12 |
| Vendor response | Text + date |
All of these fields live in the HTML of a single review page. Minexa extracts them by reading the DOM structure directly — no interpretation, no guessing.
🔧 How the Minexa API works for this use case
The developer workflow has two stages.
Stage 1 — Train the scraper once
Open a representative review URL in Chrome with the Minexa extension active. Minexa detects the page structure automatically and surfaces all available data points. Confirm the fields you want. The extension generates a stable scraper_id — for example 7431. That ID is reusable indefinitely across any structurally similar review page.
Stage 2 — Call the API at scale
Pass your list of review URLs to the API along with the scraper_id. Minexa handles JavaScript rendering, anti-bot layers, and geo-targeted content automatically — no additional configuration needed.
import requests
response = requests.post(
'https://api.minexa.ai/data',
headers={
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_API_KEY'
},
json={
'scraper_id': '7431',
'columns': ['top_25'],
'urls': [
'https://reviewsite.com/product/123/reviews',
'https://reviewsite.com/product/456/reviews'
]
}
)
data = response.json()
You can batch up to 50,000 URLs in a single request. For competitive intelligence pipelines covering hundreds of products across multiple review platforms, this matters.
🔁 Handling paginated responses
When results span multiple pages, the API returns a next_token field. Use it to fetch subsequent pages until the token is absent.
all_results = []
token = None
while True:
payload = {'scraper_id': '7431', 'columns': 'top_25',
'urls': ['https://reviewsite.com/product/123/reviews']}
if token:
payload['next_token'] = token
res = requests.post('https://api.minexa.ai/data',
headers=headers, json=payload).json()
all_results.extend(res.get('data', []))
token = res.get('next_token')
if not token:
break
⚠️ Why LLM-based extraction breaks down here
Callout: the accuracy problem at scale
Review pages often contain multiple date fields (review date, vendor response date, last edited date) and multiple rating values (overall, feature-specific). LLM-based extractors have to infer which value maps to which field. At small volume this is manageable. Across tens of thousands of pages, misassigned values accumulate silently and corrupt downstream analysis.
Minexa binds each column to a specific DOM position. If a value is not present on a page, the output returns null — never a fabricated value.
⏱️ Scheduling and cron setup
The Minexa API does not manage scheduling internally. For recurring extraction — weekly review snapshots, daily sentiment checks — set up your own cron job and pass fresh URL lists to the API on each run. This gives you full control over cadence and URL scope without depending on any external scheduler.
👥 Who benefits from this
Persona takeaway — Competitive intelligence platforms
Your customers expect current data. Review sentiment shifts after product launches, pricing changes, and support incidents. A pipeline that pulls structured review data on a defined schedule gives your platform a live signal layer that static datasets cannot match. The scraper trains once per review site structure and runs indefinitely from that point.
Start building with the Minexa API
For related reading on extracting structured data at scale, see: Scraping e-commerce product pages for price monitoring

Top comments (0)