Documentation Python quickstart Blog Free tools hello@quanticdata.ioLog in

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

POST /v1/scraper/collectors/capterra_products/run
$ 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
Capterra Scraper API: category and country in, a residential exit in the middle, delivered rows with rank, product_id and product_uuid on the right, $0.001 per product.
You send category and country; the run goes out through a residential exit and comes back as products with rank, product_id and product_uuid — 27 fields on every row — and you are billed $0.001 for each product actually delivered, nothing for a run that delivers none.
$0.001 / product2,000 products on the free $2 every month
Semantic inputcategory, country, max_results — no URL lists
Up to 500products per run, pagination handled for you
No browserread over HTTP/TLS — cheaper and faster than rendering

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.

Get my free API key

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.

FieldTypeWhat it holds
rankintegerPosition in Capterra's own order for this response, counting across pages. Note this order is bid-driven, not merit-driven — see `sponsored`.
product_idintegerCapterra's numeric product id (its `seoId`, the number in the product URL). Stable, and the key used to de-duplicate.
product_uuidstring · nullableCapterra's internal product UUID.
namestringProduct name.
vendorstring · nullableCompany 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.
ratingnumber · nullableOverall star rating out of 5, rounded to 2 decimals. Capterra publishes it at raw float precision (4.233430091920658) and prints it as 4.2.
reviewsinteger · nullableTotal number of reviews. 1 is a real value and is kept — several listed products have a single 5.0 review.
rating_breakdownobject · nullableStar histogram as {"1":n,…,"5":n}, keyed by star value. Capterra emits these buckets unordered and omits a star nobody awarded.
ease_of_usenumber · nullableCapterra's "Ease of Use" sub-score out of 5, rounded to 2 decimals.
customer_servicenumber · nullableCapterra's "Customer Service" sub-score out of 5, rounded to 2 decimals.
functionalitynumber · nullableCapterra's "Features" / functionality sub-score out of 5, rounded to 2 decimals.
value_for_moneynumber · nullableCapterra's "Value for Money" sub-score out of 5, rounded to 2 decimals.
likelihood_to_recommendnumber · nullableLikelihood to recommend as the 0–1 fraction Capterra publishes (0.63 = the 63% its UI shows).
descriptionstring · nullableThe short product description Capterra shows on the listing card.
categorystring · nullableThe category being listed, e.g. "CRM Software", read from the page breadcrumb.
category_idstring · nullableCapterra's internal UUID for the category.
starting_pricenumber · nullableStarting 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_currencystring · nullableCurrency of `starting_price`. Capterra doubles its symbol in the payload ("$$"); an exactly repeated symbol is collapsed back to one.
pricing_plansinteger · nullableHow many pricing plans Capterra lists for the product. Null when it publishes none.
has_free_trialboolean · nullableWhether Capterra flags a free trial.
has_free_versionboolean · nullableWhether Capterra flags a free version.
sponsoredbooleanTrue 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_spotinteger · nullableThe advertising slot the vendor paid for (1 = top). Null on organic rows.
logostring · nullableProduct logo image URL.
slugstring · nullableCapterra's URL slug for the product.
urlstring · nullableCapterra product page URL.
reviews_urlstring · nullableCapterra 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.

InputTypeRequiredWhat it does
categorystringyesThe 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.
countrystringnoISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool.
max_resultsintegernoHow 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.

$0.001per delivered product$1 per 1,000 delivered products
2,000 productson the free allowance$2 every month, no card
Zero rowszero chargeblocks, captchas and retries are on us
−30%on volume tiersthe catalog returns your key's price

Pay as you go

$0/mo
  • $2 free credit / month
  • 60 requests / min
  • List unit prices

Starter

$19/mo
  • $15 free credit / month
  • 300 requests / min
  • 10% off unit prices

Scale

$299/mo
  • $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/scraper/collectors/capterra_products/run.

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 scraperThis collector
Keyword searchTwenty identical “popular” rows for any queryThe category directory, resolved from your keyword
VendorNot on the cardFrom the embedded product record
RatingPresent on one A/B variant, absent on the otherFrom the record, with the 1–5 breakdown
Paid placementInvisiblesponsored per row

What people search for

Live autocomplete demand around Capterra software directory, pulled with our own Keyword ideas collector.

Capterra Scraper API: the POST to /v1/scraper/collectors/capterra_products/run with category and country on the left, and the JSON envelope on the right with 50 products and usage.cost_usd $0.05.
The same call you would paste into a terminal: a Bearer key, category and country in the body, and back the envelope every QuanticData endpoint returns — type, message, payload — where count is how many products arrived and usage.cost_usd is $0.05, which is 50 × $0.001. A run that delivers nothing costs nothing. The key is good for 60 req/min on the free tier.

Sources and standards

The platform documentation and standards this collector is built against — check any claim on this page against the primary source:

FAQ

Questions we get about the Capterra scraper API.

Something else? Ask us →

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.

Get my free API key