{
  "openapi": "3.0.1",
  "info": {
    "title": "Restaurant Review Aggregator",
    "description": "Add restaurant names and get reviews from Yelp, Google Maps, Doordash, UberEats, Tripadvisor, and Facebook. Extract review text, place address, rating, date, reviewer's name. Export reviews in JSON, CSV, HTML, use API, schedule and monitor runs or integrate reviews data with other tools.",
    "version": "0.0",
    "x-build-id": "cDNLkkG0gJgmbfbEp"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tri_angle~restaurant-review-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tri_angle-restaurant-review-aggregator",
        "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/tri_angle~restaurant-review-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-tri_angle-restaurant-review-aggregator",
        "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/tri_angle~restaurant-review-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-tri_angle-restaurant-review-aggregator",
        "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": {
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search on Google Maps.",
            "items": {
              "type": "string"
            }
          },
          "checkNames": {
            "title": "Check place names",
            "type": "boolean",
            "description": "Filter out places found on Google Maps whose name is too far from all the search keywords or the given names.",
            "default": false
          },
          "requireExactNameMatch": {
            "title": "The name must contain exactly the keyword",
            "type": "boolean",
            "description": "Only include places whose name contains the exact keyword or one of the given names (case insensitive). Does nothing if \"check place titles\" is not selected.",
            "default": false
          },
          "altMatchingNames": {
            "title": "Alternative names for title matching (separated by comma)",
            "type": "array",
            "description": "Allows to specify alternative names (to the right, separated by comma) for each place (to the left). Ignored if \"checkTitle\" is not selected.",
            "items": {
              "type": "object",
              "properties": {
                "key": {
                  "title": "Place name",
                  "type": "string",
                  "description": "Name of the place, as given in the search keywords."
                },
                "value": {
                  "title": "Alternative names",
                  "type": "string",
                  "description": "Alternative names for the place, separated by commas.",
                  "pattern": "[^,]+(,[^,]+)*"
                }
              },
              "required": [
                "key",
                "value"
              ]
            }
          },
          "location": {
            "title": "Search location",
            "type": "string",
            "description": "Location for the Google Maps search. Use simple locations, e.g., city and country."
          },
          "deeperCityScrape": {
            "title": "Deeper city scrape",
            "type": "boolean",
            "description": "Extract more places inside each city in a region, from Google Maps (more expensive).",
            "default": false
          },
          "maxPlaces": {
            "title": "Limit the number of places scraped with Google Maps",
            "minimum": 1,
            "type": "integer",
            "description": "Only considered if searching places using a keyword. If you want to scrape all available places, set this value to <code>9999999</code>. If the number is less than <code>200</code>, <code>deeperCityScrape</code> will be disabled."
          },
          "startUrls": {
            "title": "Google Maps start URLs",
            "type": "array",
            "description": "The URLs of the Google Maps pages to start from. Only URLs containing the substring \"/maps/search\" support using the faster Google Maps Extractor. If specified, keyword and other search parameters will be ignored, except for Place IDs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "startIds": {
            "title": "Google Maps start Place IDs",
            "type": "array",
            "description": "Google Maps IDs to start from, e.g., `ChIJ9WHIk0RDwokRepvvClAy9Ss`. They will be converted to URLs and added to possible existing start URLs, and they require using the regular Google Maps scraper (slower). If specified, keyword and other search parameters will be ignored, except for Start URLs.",
            "items": {
              "type": "string"
            }
          },
          "providers": {
            "title": "Review providers",
            "type": "array",
            "description": "Select the providers to scrape for reviews. Even if you deselect Google Maps, it will still be used to scrape the places at the beginning. If omitted, all the providers will be automatically selected.",
            "items": {
              "type": "string",
              "enum": [
                "google-maps",
                "tripadvisor",
                "yelp",
                "facebook",
                "uber-eats",
                "door-dash"
              ],
              "enumTitles": [
                "Google Maps",
                "Tripadvisor",
                "Yelp",
                "Facebook",
                "Uber Eats",
                "DoorDash"
              ]
            }
          },
          "maxReviewsPerPlaceAndProvider": {
            "title": "Max number of reviews per place/provider",
            "type": "integer",
            "description": "The number of reviews to scrape for each place, from each provider. Some providers may not support scraping a very high number of reviews: the number will be clipped.",
            "default": 10
          },
          "reviewsFromDate": {
            "title": "Scrape reviews from date (only for Google Maps and Tripadvisor)",
            "type": "string",
            "description": "Scrape only reviews from a given date. Some providers may not be compatible with this feature."
          },
          "scrapeReviewPictures": {
            "title": "Scrape review pictures",
            "type": "boolean",
            "description": "Add review pictures into the output. Currently supported providers: Facebook, Google Maps, TripAdvisor, Yelp.",
            "default": false
          },
          "scrapeReviewResponses": {
            "title": "Scrape owner's responses to reviews",
            "type": "boolean",
            "description": "Add owner's responses to reviews into the output. Currently supported providers: Google Maps, TripAdvisor, Yelp.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}