{
  "openapi": "3.0.1",
  "info": {
    "title": "B2B Agency Leads: Clutch, Sortlist & More (Merged)",
    "description": "Find agencies across Clutch, Sortlist, GoodFirms and TechBehemoths in one run — the same agency listed on several sites is merged into a single lead with a combined rating, review total and website.",
    "version": "0.1",
    "x-build-id": "wG0oOhGwb1dJZhqdv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/artsiom_k~agency-directory-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-artsiom_k-agency-directory-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/artsiom_k~agency-directory-scraper/runs": {
      "post": {
        "operationId": "runs-sync-artsiom_k-agency-directory-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/artsiom_k~agency-directory-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-artsiom_k-agency-directory-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": {
          "services": {
            "title": "Services",
            "type": "array",
            "description": "Which agency categories to collect. Each is translated to the matching category on every selected directory (a directory with no equivalent page is skipped for that service). Defaults to Digital marketing.",
            "items": {
              "type": "string",
              "enum": [
                "digital-marketing",
                "seo",
                "web-development",
                "web-design",
                "software-development",
                "mobile-app-development"
              ],
              "enumTitles": [
                "Digital marketing",
                "SEO",
                "Web development",
                "Web design",
                "Software development",
                "Mobile app development"
              ]
            },
            "default": [
              "digital-marketing"
            ]
          },
          "country": {
            "title": "Country",
            "enum": [
              "",
              "US",
              "GB",
              "CA",
              "AU",
              "DE",
              "FR",
              "ES",
              "IT",
              "NL",
              "BE",
              "CH",
              "AT",
              "SE",
              "DK",
              "NO",
              "FI",
              "IE",
              "PL",
              "PT",
              "IN",
              "PK",
              "BD",
              "SG",
              "AE",
              "SA",
              "TR",
              "UA",
              "BR",
              "MX",
              "AR",
              "CO",
              "ZA",
              "NZ",
              "PH",
              "VN",
              "MY",
              "ID",
              "JP",
              "IL",
              "EG",
              "NG",
              "KE",
              "RO",
              "BG",
              "EE"
            ],
            "type": "string",
            "description": "Optional: only agencies based in this country. Leave on Worldwide for no filter. Sortlist, TechBehemoths and Clutch are narrowed by URL; GoodFirms is filtered by each agency's listed location.",
            "default": ""
          },
          "sources": {
            "title": "Directories",
            "type": "array",
            "description": "Which directories to read. Agencies found on more than one selected directory are merged into a single row (the more directories you pick, the more merges).",
            "items": {
              "type": "string",
              "enum": [
                "clutch",
                "goodfirms",
                "sortlist",
                "techbehemoths"
              ],
              "enumTitles": [
                "Clutch",
                "GoodFirms",
                "Sortlist",
                "TechBehemoths"
              ]
            },
            "default": [
              "clutch",
              "goodfirms",
              "sortlist",
              "techbehemoths"
            ]
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many agencies (and read at most this many records from each directory). Defaults to 50 — a fast, cheap preview, and what keeps an unconfigured run within Apify's automated 5-minute QA check. Agencies listed on several directories are pushed first. Raise it or clear it (set to null) for a full crawl — worldwide categories hold tens of thousands of agencies.",
            "default": 50
          },
          "enrichClutchProfiles": {
            "title": "Fetch Clutch profile pages",
            "type": "boolean",
            "description": "Clutch's listing pages don't show an agency's website. When on (recommended), each Clutch agency's profile page is fetched to get its website, phone and founding year — the website is what lets Clutch agencies merge reliably with the other directories. Turn off for a faster, cheaper run that matches Clutch agencies by name only.",
            "default": true
          },
          "mode": {
            "title": "Incremental mode",
            "enum": [
              "auto",
              "full",
              "incremental"
            ],
            "type": "string",
            "description": "\"auto\" (recommended): full scan on the first uncapped run for a given scope, incremental (new/changed only) afterwards; a run with Max results set always returns rows. \"full\": always push every agency and refresh the baseline. \"incremental\": always push only new/changed agencies. Only uncapped runs update the baseline or detect delisted agencies.",
            "default": "auto"
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many profile pages to fetch in parallel per directory (TechBehemoths and Clutch need one profile fetch per agency).",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration (Clutch)",
            "type": "object",
            "description": "Apify Proxy used for Clutch only — the other directories are fetched directly. Leave on the RESIDENTIAL group: Clutch returns HTTP 403 to nearly all requests from Apify's datacenter/cloud IPs (confirmed on real infra: 1 of 18 pages with no proxy, 2 of 18 through datacenter proxy). Residential works for roughly 70% of attempts and each failed attempt is retried on a fresh IP.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}