# My Goodfirms Actor (`getdataforme/my-goodfirms-actor`) Actor

Extract detailed company reviews from GoodFirms.co—including overall software ratings, review counts, service offerings, highlighted feedback, full review text, reviewer name and date, plus structured Q\&A responses. Easy setup with URLs and item limit; outputs ready-to-use JSON.

- **URL**: https://apify.com/getdataforme/my-goodfirms-actor.md
- **Developed by:** [GetDataForMe](https://apify.com/getdataforme) (community)
- **Categories:** E-commerce, Jobs, Real estate
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

***

## 📦 my-goodfirms-actor

Extract detailed company reviews and software insights from [GoodFirms.co](https://www.goodfirms.co) with ease. Retrieve ratings, service offerings, and structured Q\&A data in JSON format.

***

### 🌐 What does this actor do?

`my-goodfirms-actor` crawls GoodFirms company pages and returns:

- Aggregate software ratings and review counts
- List of services provided
- Highlighted review and full review text
- Reviewer name and date
- Structured answers to all Q\&A items

Ideal for market research, competitor analysis, or feed into dashboards.

***

### 📥 Input

Provide a JSON object with:

```json
{
  "item_limit": 25,
  "urls": [
    "https://www.goodfirms.co/company/unified-infotech"
  ]
}
```

| Field        | Type    | Description                                           |
| ------------ | ------- | ----------------------------------------------------- |
| `item_limit` | Integer | Max number of reviews/Q\&A entries to scrape per URL. |
| `urls`       | Array   | List of GoodFirms company review page URLs.           |

***

### 📤 Output

Returns an array of objects, e.g.:

```json
{
  "software_info": {
    "total_rating": "5.0",
    "total_reviews": "26",
    "services": [
      "Mobile App Development",
      "Web Development",
      "Software Development",
      "Implementation Services"
    ]
  },
  "review_highlight": "CRM project done remarkably by professionals",
  "author": "Claire Cynthia",
  "date": "Posted on Nov 20, 2023",
  "review": "Closeloop demonstrated an organized and agile project management style. They utilized communication tools like Jira and Slack for real-time collaboration, ensuring transparency and adherence to project timelines. Regular updates on project progress, milestones, and objectives contributed to a highly efficient partnership.",
  "question_answers": [
    {
      "question": "What was the project name that you have worked with Closeloop Technologies?",
      "answer": "CRM project professionally managed by Closeloop"
    },
    {
      "question": "What service was provided as part of the project?",
      "answer": "Software Development, Implementation Services"
    },
    {
      "question": "Describe your project in brief",
      "answer": "We enlisted the expertise of Closeloop Technologies to enhance our CRM software offerings and improve our project management. Our primary objectives were to refine our CRM solutions, create a more seamless user experience, and strengthen our project management capabilities."
    },
    {
      "question": "What is it about the company that you appreciate the most?",
      "answer": "What truly stood out about Closeloop was their remarkable ability to understand our specific CRM requirements and tailor solutions to meet them."
    },
    {
      "question": "What was it about the company that you didn't like which they should do better?",
      "answer": "In our collaboration with Closeloop Technologies, we found no areas for improvement or any aspects."
    }
  ]
}
```

***

### 🧰 Use Cases

- Competitive benchmarking of software agencies
- Aggregating service offerings and ratings
- Feeding structured review data into BI tools
- Automating reputation monitoring

***

### 🚀 How to run

1. Log in to the [Apify Console](https://console.apify.com).
2. Deploy or locate **my-goodfirms-actor**.
3. Paste your JSON input and start the run.
4. View results in the Console or fetch via API.

***

### ❓ Need help?

For custom output formats, enterprise support, or to report issues:

📧 **Email:** <support@getdataforme.com>
🔗 **Contact form:** <https://getdataforme.com/contact/>

> **Subject line:** `my-goodfirms-actor Support`

***

# Actor input Schema

## `urls` (type: `array`):

A list of URLs of the web pages you want to scrape data from.

## `item_limit` (type: `integer`):

The maximum number of items to scrape from the input URLs. The scraper will stop when this limit is reached.

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

Specifies proxy servers that will be used by the scraper in order to hide its origin.

## Actor input object example

```json
{
  "urls": [
    "https://www.goodfirms.co/company/unified-infotech"
  ],
  "item_limit": 10,
  "proxyConfiguration": {
    "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 = {
    "urls": [
        "https://www.goodfirms.co/company/unified-infotech"
    ],
    "item_limit": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getdataforme/my-goodfirms-actor").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 = {
    "urls": ["https://www.goodfirms.co/company/unified-infotech"],
    "item_limit": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getdataforme/my-goodfirms-actor").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 '{
  "urls": [
    "https://www.goodfirms.co/company/unified-infotech"
  ],
  "item_limit": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getdataforme/my-goodfirms-actor --silent --output-dataset

```

## MCP server setup

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

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/NkfkowZR1QsyG3tlp/builds/iVWfL7CcpXWkxdBtj/openapi.json
