# Software Advice (`canadesk/software-advice`) Actor

Get Products, Reviews, Statistics and Search results from Software Advice/Capterra. It's fast and costs little.

- **URL**: https://apify.com/canadesk/software-advice.md
- **Developed by:** [Canadesk Support](https://apify.com/canadesk) (community)
- **Categories:** Lead generation, SEO tools
- **Stats:** 66 total users, 1 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: No ratings yet

## Pricing

$12.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#rental-actors

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

⭐ Do you need high-volume scraping or bulk mode for reviews? Please try **canadesk/capterra-software-advice** instead!

### Features

- **Get Categories**

  Returns Software Advice's categories hierarchy. Useful to identify which Category keyword to use.

- **Get Products**

  Returns all products for all categories up to the Maximum Input.

  Setting high maximum values for the number of results and categories will trigger a very long job, likely to be blocked at some point.

  In case that happens, use the From \[i] Input to continue the process from where it stops (indicated in the logs as "\[i] is..").

- **Get Products by Category**

  You must set a Category keyword. All products belonging to a Category with that keyword will be returned.

  For example, if you set "accounting", the process will return products from Accounting Practice Management, Call Accounting, Nonprofit Accounting Software, etc.

- **Get Reviews**

  First, the process "Get Search Results" runs and takes the first result as input.

  Returns customers' reviews for the given software.

  🛑 It is highly recommended to use your own cookies. Install [any Cookie manager](https://chromewebstore.google.com/detail/cookie-editor/ookdjilphngeeeghgngjabigmpepanpl), then navigate to SoftwareAdvice and set the Input "Cookie" to the exported value. The **LD\_UserID** cookie may also be enough: "LD\_UserID={your\_value}".

  🔎 This actor is limited to 500 reviews per ruin. Use **canadesk/capterra-software-advice** for more.

  💡 "Legacy" relies on the older SoftwareAdvice engine. You can still use it for data up to **September 2024**.

- **Get Statistics**

  First, the process "Get Search Results" runs and takes the first result as input.

  Returns statistics about the software customers (industry/rating distribution).

- **Get Search Results**

  Returns search results from Software Advice database. This is useful to know which term comes first.

### About Duplicates

One product can be linked to multiple categories, leading to duplicates.

You can clean up the data with a simple filter() in your code (e.g., JS):

```
result = result.filter((arr, index, self) =>
    index === self.findIndex((t) => (t.productUri === arr.productUri)));
```

### How it works.

1. Enter the Software name (Get Reviews, Get Statistics).

2. Select a process to run (e.g., Get Reviews).

3. Set optional Input values and crawler settings.

4. Run it! 🎉

Note: All processes return raw data.

### Support

Always use a proxy, and wait between requests!

Open a new issue or contact support.

Cheers!

# Actor input Schema

## `process` (type: `string`):

Process to run.

## `query` (type: `string`):

Keyword to look for.

## `country` (type: `string`):

May influence some results.

## `mycat` (type: `string`):

Only applies to Get Products by Category. Will return products for any category matching the keyword.

## `sort` (type: `string`):

Only applies to Get Products.

## `maximumcats` (type: `integer`):

Only applies to Get Products/by Category. Maximum number of categories processed.

## `delay` (type: `integer`):

Only applies to Get Products. Waiting time between requests.

## `fromi` (type: `integer`):

Only applies to Get Products. Will restart process from occurrence \[i] (e.g., 5).

## `cookie` (type: `string`):

See Information tab!

## `maximum` (type: `integer`):

Nearest 25.

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "process": "gr",
  "query": "zendesk",
  "country": "us",
  "mycat": "accounting",
  "sort": "6",
  "maximumcats": 5,
  "delay": 5,
  "fromi": 0,
  "maximum": 75,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "zendesk",
    "mycat": "accounting",
    "cookie": "",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("canadesk/software-advice").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "zendesk",
    "mycat": "accounting",
    "cookie": "",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("canadesk/software-advice").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "zendesk",
  "mycat": "accounting",
  "cookie": "",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call canadesk/software-advice --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,canadesk/software-advice"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/vbHW0bSPkWumHGdqU/builds/82smmT888KTL2xvRt/openapi.json
