{
  "openapi": "3.0.1",
  "info": {
    "title": "TrustMate.io - Company Reviews, Ratings & Authors",
    "description": "Scrape complete company review histories from TrustMate.io. Paste company profile URLs, slugs, or domains, with support for both Polish `/opinie/` and English `/reviews/` profiles. Extract one row per review, including rating, full review text, author, date, and company details.",
    "version": "1.0",
    "x-build-id": "ZRIHFIqyc0Y35jZN2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~trustmate-io-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-trustmate-io-reviews-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/abotapi~trustmate-io-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-trustmate-io-reviews-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/abotapi~trustmate-io-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-trustmate-io-reviews-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "urls"
            ],
            "type": "string",
            "description": "Choose 'search' to paste a list of company profile URLs / slugs / domains, or 'url' to paste profile links directly. Both resolve to the same review feed.",
            "default": "search"
          },
          "companyUrls": {
            "title": "Company URLs, slugs or domains",
            "type": "array",
            "description": "Only used when mode = search - ignored in URL mode. One or more TrustMate company profile URLs, bare slugs or bare domains. Example: https://trustmate.io/opinie/trustmate-io , https://en.trustmate.io/reviews/trustmate-io , 'ogrodniczy.com' .",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Company profile URLs / slugs / domains",
            "type": "array",
            "description": "Only used when mode = urls - ignored in Search mode. One or more TrustMate company profile URLs, bare slugs or bare domains. Mix Polish (/opinie/) and English (/en/reviews/) links freely.",
            "items": {
              "type": "string"
            }
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "Applies in BOTH search and URL mode. Only return reviews with at least this star rating (1-5). 1 returns all reviews. Narrowing to 4 or 5 filters out lower-starred reviews from the result set (measured on trustmate-io: 1+ = 785 reviews, 4+ = 730, 5 = 714).",
            "default": "1"
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "oldest",
              "ratingDesc",
              "ratingAsc",
              "recentlyUpdated"
            ],
            "type": "string",
            "description": "Applies in BOTH search and URL mode. Orders the review feed before walking it. Newest first is the TrustMate default; 'Rating' options sort by star rating (pinned reviews float above the sort, mirroring the site).",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on the total number of review rows collected across all companies. This is THE cap - the run stops here even when review pages remain. Leave empty for no item cap (unlimited).",
            "default": 20
          },
          "maxPagesPerCompany": {
            "title": "Max review pages per company",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on the number of review pages (~100 reviews each) fetched per company. Leave empty (0) for no page limit - the run stops at Max Items. Do not set both this and a low Max Items expecting two caps: the run stops at whichever comes first, and Max Items is the primary one.",
            "default": 0
          },
          "includeTranslations": {
            "title": "Include machine translations",
            "type": "boolean",
            "description": "Whether to include the translations array (machine translations of each review body into other languages) on every row. Disable to slim the output.",
            "default": true
          },
          "fetchDetails": {
            "title": "Fetch company profile enrichment",
            "type": "boolean",
            "description": "When on, each company's public profile page is fetched and parsed (JSON-LD, social sameAs links, logo, meta descriptions) and the extra fields are attached to every review row of that company. Billed per review row returned via the detail-enrichment event. Leave off for the base review output.",
            "default": false
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "A previous run or dataset ID to continue from. Reviews already collected in that run/dataset are skipped. Leave empty to start fresh. Not compatible with Incremental mode once an incremental baseline exists for this scope (see State key)."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Remember this scope's reviews across runs and return only what changed since the last run, tagged changeType (NEW / UPDATED / REAPPEARED / EXPIRED). Default off - a normal run returns everything. Enables daily/weekly monitoring without pasting a run id every time.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Optional name for the incremental baseline. By default the baseline is keyed automatically on a hash of your mode + companies + filters. Set a key to run two separate monitoring campaigns over the same companies, or to rename an existing baseline."
          },
          "emitUnchanged": {
            "title": "Emit unchanged reviews",
            "type": "boolean",
            "description": "Incremental mode only. When on, reviews that did not change since the last run are also returned (tagged UNCHANGED). These rows are returned AND billed like any other row - leave off to get only what changed.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired reviews",
            "type": "boolean",
            "description": "Incremental mode only. When on, reviews present in the baseline but no longer found after a complete scan are returned as EXPIRED rows. These rows are returned AND billed like any other row. Only runs that reach the natural end of every company's feed can detect expirations; capped or resumed runs skip this.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for all requests. The default Apify proxy works on the free tier; residential is only needed for higher rotation.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped reviews into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-review export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which one page per review is created. Required to enable the Notion export; ignored by every other connector."
          },
          "maxNotifyListings": {
            "title": "Max reviews to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on how many review rows are written to each connector per run. Does not affect the dataset, and does not change what you are billed for.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}