{
  "openapi": "3.0.1",
  "info": {
    "title": "GoodFirms Scraper",
    "description": "[💰 $3.50 / 1K] Extract company profiles and verified client reviews from GoodFirms — software developers, IT services, marketing agencies, and design firms. Get ratings, hourly rates, team size, location, services, plus full reviews with sub-ratings. Great for B2B lead generation.",
    "version": "1.0",
    "x-build-id": "fF3c8BSMrCc5YEZYn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~goodfirms-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-goodfirms-scraper",
        "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/solidcode~goodfirms-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-goodfirms-scraper",
        "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/solidcode~goodfirms-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-goodfirms-scraper",
        "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",
        "properties": {
          "startUrls": {
            "title": "GoodFirms URLs",
            "type": "array",
            "description": "Paste one or more GoodFirms URLs. Accepts category listings (e.g. https://www.goodfirms.co/directory/languages/top-software-development-companies), country-scoped listings (e.g. https://www.goodfirms.co/directory/country/top-software-development-companies/us), and individual company profiles (https://www.goodfirms.co/company/<name>). Any filters already in the URL are used as-is. This is the most precise way to scrape exactly what you want.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Service Category",
            "enum": [
              "software-development",
              "web-development",
              "mobile-app-development",
              "ecommerce-development",
              "software-testing",
              "it-services",
              "cloud-computing",
              "artificial-intelligence",
              "digital-marketing",
              "seo",
              "social-media-marketing",
              "web-design",
              "app-design",
              "branding"
            ],
            "type": "string",
            "description": "Which kind of companies to list. Ignored when you provide URLs above (the URL already sets the category).",
            "default": "software-development"
          },
          "country": {
            "title": "Country",
            "enum": [
              "all",
              "us",
              "gb",
              "ca",
              "au",
              "in",
              "de",
              "es",
              "netherlands",
              "pl",
              "ua",
              "ae",
              "singapore",
              "pakistan",
              "bangladesh",
              "malaysia",
              "vietnam",
              "turkey",
              "south-africa",
              "egypt"
            ],
            "type": "string",
            "description": "Restrict results to companies headquartered in a specific country. Choose 'All countries' for the global listing. Some category/country combinations have no dedicated page — in that case the actor falls back to the global listing for that category.",
            "default": "all"
          },
          "includeReviews": {
            "title": "Include Client Reviews",
            "type": "boolean",
            "description": "Also collect each company's client reviews (overall star rating, quality/schedule/communication sub-ratings, project service, cost band and industry, reviewer name, role and company, and date). Each review is returned as its own result row. Turn this off for faster, cheaper runs that return only the company profiles.",
            "default": true
          },
          "maxReviewsPerCompany": {
            "title": "Max Reviews Per Company",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on how many reviews to capture per company. Default 10. Set to 0 to capture every available review, up to a safety ceiling of 1,000 per company. Popular companies can have hundreds of reviews, so raising this increases both run time and cost. Ignored when 'Include Client Reviews' is off.",
            "default": 10
          },
          "maxResults": {
            "title": "Max Companies",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on the total number of companies collected across all URLs and filters. Default 20 — increase for bigger runs (up to a maximum of 5,000), or set to 0 for no cap (an internal upper limit still applies to prevent runaway pagination). The actor stops requesting new listing pages once this number is reached but keeps the full final page even if it slightly overshoots (a single listing page holds about 48 companies).",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}