Capterra Scraper API
A Capterra scraper API that reads a software category — “crm”, “project management”, “help desk” — and returns the products it lists with the vendor behind each (Oracle for NetSuite, Intuit for Mailchimp), the star rating with its full 1–5 histogram, Capterra’s four sub-scores, description, starting price, free-trial and free-version flags, the paid-placement flag, logo and URL.
$0.001 per delivered product · $2 free every month · Failed runs never billed
$ curl $QD/capterra_products/run \
-H "Authorization: Bearer $QD_API_KEY" \
-d '{"category": "crm", "max_results": 50}'
{ "status": "done", "count": 50,
"results": [
{
"product_id": …,
"product_uuid": "…",
"name": "…",
"vendor": "…" } ],
"cost": 0.05 }
# 50 products × $0.001 · nothing delivered, nothing charged
Try it
Capterra software directory, running now
Change the input and run it against the live collector — nothing to install, no sign-up.
Run it from your own code, on your own inputs
Same collector, same rows — $2 of free API credit every month, no card.
What a Capterra scraper API does
Read this before asking for keyword search. Capterra’s search URL answers a plain fetch with a full page containing twenty product cards — and they are the same twenty whatever you searched for: a hard-coded “popular products” shell, verified by comparing two unrelated queries that returned the same names in the same order. The real search is an AI query-understanding call made after hydration. A naive collector reports twenty happy, wrong rows. So this one reads the category directory, which is fully server-rendered, resolves your keyword against Capterra’s own index of over a thousand categories, and a category is what “software search” means on Capterra anyway.
The rows come from the GraphQL product records Capterra embeds in its server payload, not from the cards. The vendor name, for one, is published only there. The cards are A/B-tested: on one variant the rating lives in an element that simply does not exist on the other, so a DOM parser is right on some page loads and blind on others. From the records every product carries its rating breakdown, the four sub-scores, pricing and campaign data — and the campaign field is what marks paid placements, delivered as sponsored rather than blended in.
Limits, in plain numbers
Everything that bounds one run of this collector. No hidden throttles.
Max per run
500 products
Price
$0.001 / product
Per 1,000
$1.00
Failed runs
Free zero rows, zero charge
Free every month
$2 no card
Rate limit
60 req/min on the free tier
What one product looks like
Every delivered product carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.
| Field | Type | What it holds |
|---|---|---|
rank | integer | Position in Capterra's own order for this response, counting across pages. Note this order is bid-driven, not merit-driven — see `sponsored`. |
product_id | integer | Capterra's numeric product id (its `seoId`, the number in the product URL). Stable, and the key used to de-duplicate. |
product_uuid | string · nullable | Capterra's internal product UUID. |
name | string | Product name. |
vendor | string · nullable | Company behind the product, e.g. "Oracle" for NetSuite. Published in Capterra's data layer only — it does not appear anywhere in the rendered listing card. |
rating | number · nullable | Overall star rating out of 5, rounded to 2 decimals. Capterra publishes it at raw float precision (4.233430091920658) and prints it as 4.2. |
reviews | integer · nullable | Total number of reviews. 1 is a real value and is kept — several listed products have a single 5.0 review. |
rating_breakdown | object · nullable | Star histogram as {"1":n,…,"5":n}, keyed by star value. Capterra emits these buckets unordered and omits a star nobody awarded. |
ease_of_use | number · nullable | Capterra's "Ease of Use" sub-score out of 5, rounded to 2 decimals. |
customer_service | number · nullable | Capterra's "Customer Service" sub-score out of 5, rounded to 2 decimals. |
functionality | number · nullable | Capterra's "Features" / functionality sub-score out of 5, rounded to 2 decimals. |
value_for_money | number · nullable | Capterra's "Value for Money" sub-score out of 5, rounded to 2 decimals. |
likelihood_to_recommend | number · nullable | Likelihood to recommend as the 0–1 fraction Capterra publishes (0.63 = the 63% its UI shows). |
description | string · nullable | The short product description Capterra shows on the listing card. |
category | string · nullable | The category being listed, e.g. "CRM Software", read from the page breadcrumb. |
category_id | string · nullable | Capterra's internal UUID for the category. |
starting_price | number · nullable | Starting price of the default plan, in `price_currency`. Null where Capterra publishes no pricing plan — which is the case for every sponsored row, so expect nulls across the first page. |
price_currency | string · nullable | Currency of `starting_price`. Capterra doubles its symbol in the payload ("$$"); an exactly repeated symbol is collapsed back to one. |
pricing_plans | integer · nullable | How many pricing plans Capterra lists for the product. Null when it publishes none. |
has_free_trial | boolean · nullable | Whether Capterra flags a free trial. |
has_free_version | boolean · nullable | Whether Capterra flags a free version. |
sponsored | boolean | True when the row is a paid placement. Capterra orders its directories by bid, so this is how to tell an advertisement from an organic listing. |
bid_spot | integer · nullable | The advertising slot the vendor paid for (1 = top). Null on organic rows. |
logo | string · nullable | Product logo image URL. |
slug | string · nullable | Capterra's URL slug for the product. |
url | string · nullable | Capterra product page URL. |
reviews_url | string · nullable | Capterra reviews page URL, only when the product actually publishes one. |
Inputs
The whole request. Anything you leave out falls back to the default shown in the catalog.
| Input | Type | Required | What it does |
|---|---|---|---|
category | string | yes | The software category to list, as a plain keyword — "crm", "project management", "help desk", "accounting". Matched against Capterra's own category index, where an exact name wins over the categories that merely contain it ("crm" resolves to CRM, not Construction CRM). A Capterra slug or category URL is accepted too and skips the lookup fetch. |
country | string | no | ISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool. |
max_results | integer | no | How many products to deliver at most (1–500). You pay only for delivered products. |
Pricing
Capterra Scraper API pricing
$0.001 per delivered product. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 products before you spend anything.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $250 free credit / month
- 1,200 requests / min
- 30% off unit prices
Same wallet, same key and same $2 monthly allowance as every other Data API. Prices are launch pricing read live from the billing config — GET /v1/scraper/collectors returns the price your key actually pays.
Integration
One POST, typed rows
Base URL https://api.quanticdata.io/v1, Bearer auth, the same key as every other Data API. Endpoint: POST /v1/.
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/capterra_products/run \
-H "Authorization: Bearer $QD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category":"crm","max_results":50}'
What people build with the Capterra scraper API
Three shapes of work this endpoint was designed around.
Competitive landscape
Every product in a category with rating, review histogram and sub-scores — the table behind a positioning or battlecard exercise.
Vendor mapping
The company behind each product, stated in the data layer, joinable with the G2 and company-data collectors.
Pricing intelligence
Starting price, currency, plan list and free-trial flags per product, re-run monthly.
Capterra Scraper API versus rolling your own
The differences that actually cost time when you build this in-house.
| DIY scraper | This collector | |
|---|---|---|
| Keyword search | Twenty identical “popular” rows for any query | The category directory, resolved from your keyword |
| Vendor | Not on the card | From the embedded product record |
| Rating | Present on one A/B variant, absent on the other | From the record, with the 1–5 breakdown |
| Paid placement | Invisible | sponsored per row |
What people search for
Live autocomplete demand around Capterra software directory, pulled with our own Keyword ideas collector.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
Why does it take a category and not a search phrase?
Because Capterra’s search page returns the same twenty “popular” products for every query on a plain fetch — the real search happens after hydration. The category directory is server-rendered and complete, and your keyword is resolved against Capterra’s own category index.
Are reviews included?
The rating with its full histogram and Capterra’s four sub-scores, plus the review count and the reviews URL. Individual review text is on the product page, which this collector does not read.
How are sponsored listings handled?
Delivered and flagged. Capterra states the campaign on the product record, so sponsored is data rather than a guess.
What if my keyword matches no category?
The run reports that it could not resolve the category rather than returning an unrelated one; try the term Capterra uses, which is usually the plain product-category name.
Is there a free Capterra scraper API?
Every account gets $2 of credit every month with no card, which is about 2,000 delivered products on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.
How much does one run cost?
Multiply the rows you actually receive by $0.001. A run capped at 500 products — the maximum for this collector — costs $0.5 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and GET /v1/scraper/collectors returns the price your key actually pays.
Run the Capterra scraper API now
$2 of free credit every month, no card. Your key returns its own prices from GET /v1/scraper/collectors.