# Software Category Finder — Vendors & Companies Using Software (`inovaflow/software-category-finder`) Actor

Every vendor in a software category as clean data: product, website, domain, ratings and review counts across directories, entry price, pricing model, free trial, industries. Plus who reviews a product: reviewer, title, company, rating, likes, dislikes, switched from. No login, MCP-ready.

- **URL**: https://apify.com/inovaflow/software-category-finder.md
- **Developed by:** [inovaflow](https://apify.com/inovaflow) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 33.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 software vendors

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Software Category Finder — Vendors & Companies Using Software

**Every software category is a market map waiting to be drawn: who sells in it, how they are rated, what they
charge — and on the other side, who buys it and what they wish it did better.** Sales teams need the first half
to build competitive and partner lists; they need the second half to find companies already paying for a tool
like theirs.

This Actor draws both halves from public software directories, as clean rows: **the vendors in a category**
(product, website, domain, ratings and review counts from every directory that lists it, entry price, pricing
model, free trial, industries) and **the reviewers of a product** (name, title, company, rating, what they like,
what they dislike, what they switched from).

***

### Who it is for

- **Outbound and partnerships teams** — a category is an account list: every vendor with its domain, ready for
  enrichment, and every reviewer's company as a warm "already buys software like this" lead.
- **AI / GTM agents** — one call, a flat dataset, no login and no key. `product`, `website`, `domain`, `rating`,
  `reviewCount`, `entryPrice` on every vendor row; `reviewerCompany`, `rating`, `dislikes`, `switchedFrom` on
  every review row.
- **Product marketing and competitive intelligence** — the full field in a category, rated and priced side by
  side, with each directory's rating kept apart so you know which number you are quoting.
- **Investors and analysts** — market sizing by vendor count, pricing tiers and review momentum.
- **Founders** — see who you are up against before you position, and read what their customers complain about.

***

### What you get

#### Vendors mode — one row per product

```jsonc
{
  "product": "Pipedrive",
  "vendorCompany": "Pipedrive Inc.",
  "website": "https://www.pipedrive.com/",
  "domain": "pipedrive.com",
  "category": "CRM Software",
  "tagline": "Streamline your sales process: comprehensive, automated, and data-driven.",
  "rating": 4.4,
  "reviewCount": 5284,
  "ratingSource": "directory-b",
  "ratings": {
    "directory-a": { "rating": 4.4, "reviews": 29, "rank": 3, "url": "…" },
    "directory-b": { "rating": 4.4, "reviews": 5284, "score": 92, "rank": 2, "url": "…" },
    "launch-community": { "rating": 4.9, "reviews": 20, "followers": 900, "rank": 7, "url": "…" }
  },
  "entryPrice": "$14 Per Month",
  "pricingModel": "Per User",
  "freeTrial": "14 Days",
  "industries": ["Accounting", "Financial services", "Logistics"],
  "sources": ["directory-a", "directory-b", "launch-community"],
  "sourceCount": 3,
  "rank": 2
}
```

The same product listed by three directories is **one row**. Each directory's rating and review count is kept
under `ratings` — never averaged — and the headline `rating` / `reviewCount` come from the directory with the
most reviews, named in `ratingSource`.

#### Reviewers mode — one row per review

```jsonc
{
  "product": "Zoho CRM",
  "reviewer": "Davin Joseph",
  "reviewerTitle": "CEO",
  "reviewerCompany": "My Enamel Pins",
  "rating": 4,
  "sentiment": "positive",
  "reviewTitle": "Great integrations with other services",
  "reviewText": "…",
  "likes": "Workflow automation and the mobile app.",
  "dislikes": "Reporting could be more flexible.",
  "switchedFrom": null,
  "usageLength": "1 Years",
  "date": "2023-03-20",
  "sourceUrl": "…"
}
```

Set `maxRating` to 3 and you have the unhappy customers of a competitor — with their company on the row.

Two dataset views are built in: **Vendors** and **Reviews**.

***

### How to use it

| You want | Set |
| --- | --- |
| Every vendor in a category | `mode`: `vendors`, `categories`: `CRM`, `Email Marketing`, … |
| The established players first | `sort`: `most-reviewed` (default) |
| The best-rated products (5+ reviews) | `sort`: `best-rated` |
| Only vendors with a website on the row | `requireWebsite`: true |
| Who reviews a product | `mode`: `reviewers`, `products`: `Zoho CRM`, `HubSpot`, … |
| Only critical reviews | `maxRating`: 3 |

Category and product names are matched on the directories themselves; a directory URL works too. Anything that
cannot be found is reported in the run summary under `notFound`, never invented.

***

### Accuracy, on purpose

- Every field is read from a directory page. A field the directory did not show is `null`.
- Ratings from different directories are never combined into one number.
- A product is merged across directories only when the website domain matches, or the name matches once the
  category's own words are removed ("Pipedrive CRM" = "Pipedrive"). Same name, different site = two rows.
- `sentiment` is derived from the reviewer's own star rating (4–5 positive, 3 neutral, 1–2 negative) — not guessed
  from the text.
- No login, no API key, no browser. A few pages per category.

***

### Cost

Vendors mode: pay per vendor row. Reviewers mode: pay per review row. Plus the platform's start fee. Duplicates,
rows removed by your filters and empty runs are never charged; the caps limit both rows and spend.

### Pairs well with

- **Company Enrichment** — turn every vendor `domain` into firmographics and a tech stack.
- **Technology Lookup** — find the companies running a product from the category.
- **Decision-Maker Finder** and **Email Finder & Verifier** — from a reviewer's company to a verified inbox.
- **Switch-Intent Finder** — the unhappy reviewers of your competitors, scored and ready for outreach.

# Actor input Schema

## `mode` (type: `string`):

`vendors` = the products in a software category (one row per product). `reviewers` = the reviews of a product (one row per review).

## `categories` (type: `array`):

One per line — `CRM`, `Email Marketing`, `Help Desk`, `Applicant Tracking`, `Accounting`. Plain names work; a directory category URL works too.

## `products` (type: `array`):

One per line — `Zoho CRM`, `HubSpot`, `Pipedrive`. Plain names work; a directory product URL works too.

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

Vendors mode: `most-reviewed` = most reviews across directories first (the established players), `best-rated` = highest rating first (minimum 5 reviews), `most-popular` = directory ranking order.

## `maxVendorsPerCategory` (type: `integer`):

Vendors mode cap per category. Also caps what you pay: 30 is a quick sample, 100 (the default when unset) a full map of the category.

## `maxReviewsPerProduct` (type: `integer`):

Reviewers mode cap per product, newest first. Also caps what you pay.

## `minRating` (type: `integer`):

Keep only reviews rated at least this many stars (1–5). Leave at 1 for all.

## `maxRating` (type: `integer`):

Keep only reviews rated at most this many stars (1–5). Set 3 to get the unhappy reviewers.

## `requireWebsite` (type: `boolean`):

Vendors mode: drop products whose website could not be read from any directory.

## `maxConcurrency` (type: `integer`):

Concurrent page reads. Lower it if you see rate-limit warnings in the log.

## `proxyConfiguration` (type: `object`):

Directory pages are public; the default Apify proxy is enough. The launch-community source is read through a residential session automatically.

## Actor input object example

```json
{
  "mode": "vendors",
  "categories": [
    "CRM",
    "Email Marketing"
  ],
  "products": [
    "Zoho CRM",
    "HubSpot"
  ],
  "sort": "most-reviewed",
  "maxVendorsPerCategory": 15,
  "maxReviewsPerProduct": 100,
  "minRating": 1,
  "maxRating": 5,
  "requireWebsite": false,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `vendors` (type: `string`):

One row per software product in the category: website, domain, rating, review count, entry price, pricing model, free trial, industries.

## `reviews` (type: `string`):

One row per review: reviewer, title, company, product, rating, sentiment, likes, dislikes, switched from, date, source.

## `summary` (type: `string`):

Rows delivered and charged, categories/products covered, source coverage and what could not be found.

# 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 = {
    "categories": [
        "CRM"
    ],
    "maxVendorsPerCategory": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inovaflow/software-category-finder").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 = {
    "categories": ["CRM"],
    "maxVendorsPerCategory": 15,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("inovaflow/software-category-finder").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 '{
  "categories": [
    "CRM"
  ],
  "maxVendorsPerCategory": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call inovaflow/software-category-finder --silent --output-dataset

```

## MCP server setup

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

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/Pqa2qpqDVaiNSHqJu/builds/KZPU0kEyO5Ryzh4dK/openapi.json
