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

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

- **URL**: https://beta-securitybyobscurity.apify.com/canadesk/software-advice.md
- **Developed by:** [Canadesk Support](https://beta-securitybyobscurity.apify.com/canadesk) (community)
- **Categories:** Lead generation, SEO tools
- **Stats:** 52 total users, 2 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/platform/actors/running/actors-in-store#rental-actors

# README

## 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**

  🛑 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}".

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

  Returns customers' reviews for the given software.

  \*\* "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("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=canadesk/software-advice",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Software Advice",
        "description": "Get Products, Reviews, Statistics and Search results from Software Advice/Capterra. It's fast and costs little.",
        "version": "1.4",
        "x-build-id": "WLvyAK7ibIKvFouko"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/canadesk~software-advice/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-canadesk-software-advice",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/canadesk~software-advice/runs": {
            "post": {
                "operationId": "runs-sync-canadesk-software-advice",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/canadesk~software-advice/run-sync": {
            "post": {
                "operationId": "run-sync-canadesk-software-advice",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "query",
                    "process"
                ],
                "properties": {
                    "process": {
                        "title": "Process",
                        "enum": [
                            "gc",
                            "gp",
                            "gb",
                            "gn",
                            "gr",
                            "gt",
                            "gs"
                        ],
                        "type": "string",
                        "description": "Process to run.",
                        "default": "gr"
                    },
                    "query": {
                        "title": "Software",
                        "type": "string",
                        "description": "Keyword to look for."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "us",
                            "ca",
                            "au",
                            "sg",
                            "uk",
                            "nz",
                            "ie",
                            "fr",
                            "de",
                            "at",
                            "ch",
                            "za"
                        ],
                        "type": "string",
                        "description": "May influence some results.",
                        "default": "us"
                    },
                    "mycat": {
                        "title": "Products - Category keyword",
                        "type": "string",
                        "description": "Only applies to Get Products by Category. Will return products for any category matching the keyword."
                    },
                    "sort": {
                        "title": "Products - Sort By",
                        "enum": [
                            "6",
                            "1",
                            "2",
                            "3",
                            "8"
                        ],
                        "type": "string",
                        "description": "Only applies to Get Products.",
                        "default": "6"
                    },
                    "maximumcats": {
                        "title": "Products - Maximum categories",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Only applies to Get Products/by Category. Maximum number of categories processed.",
                        "default": 5
                    },
                    "delay": {
                        "title": "Products - Delay",
                        "minimum": 1,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Only applies to Get Products. Waiting time between requests.",
                        "default": 5
                    },
                    "fromi": {
                        "title": "Products - From [i]",
                        "minimum": 0,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Only applies to Get Products. Will restart process from occurrence [i] (e.g., 5).",
                        "default": 0
                    },
                    "cookie": {
                        "title": "Cookie",
                        "type": "string",
                        "description": "See Information tab!"
                    },
                    "maximum": {
                        "title": "Maximum results",
                        "minimum": 25,
                        "maximum": 9975,
                        "type": "integer",
                        "description": "Nearest 25.",
                        "default": 75
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by your crawler."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
