{
  "openapi": "3.0.1",
  "info": {
    "title": "UpFront Reviews Scraper & Property Intelligence",
    "description": "Scrape UpFront Reviews guest reviews, ratings and owner replies from public accommodation pages. Export CSV or JSON, compare holiday rental properties in an HTML report, and add optional AI guest feedback analysis. No source API key required.",
    "version": "0.1",
    "x-build-id": "yjpNVaoY0KhKmzmBY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/thescrapelab~upfront-reviews-intelligence/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-thescrapelab-upfront-reviews-intelligence",
        "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/thescrapelab~upfront-reviews-intelligence/runs": {
      "post": {
        "operationId": "runs-sync-thescrapelab-upfront-reviews-intelligence",
        "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/thescrapelab~upfront-reviews-intelligence/run-sync": {
      "post": {
        "operationId": "run-sync-thescrapelab-upfront-reviews-intelligence",
        "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": "Links to scrape",
            "maxItems": 100,
            "type": "array",
            "description": "Paste one or more UpFront Reviews property or company links. A property link collects that property's reviews; a company link visits its properties. Replace the example with your own link, or keep it for a quick test.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "Number of reviews",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Collect up to this many reviews in total across all links. Start with 10. Fewer may be available after filters or source limits. Property summaries do not count toward this number.",
            "default": 10
          },
          "enableAi": {
            "title": "Add AI insights",
            "type": "boolean",
            "description": "Optional: summarize strengths, complaints, and improvements with links to the supporting reviews. Public use requires a paid Apify plan and an available AI allowance; successful AI analysis has a separate charge when pricing is enabled. No key entry is needed. If AI is unavailable, reviews and the factual report are still saved.",
            "default": false
          },
          "dateFrom": {
            "title": "From date",
            "type": "string",
            "description": "Include reviews submitted on or after this date. Reviews without a known date are excluded when a date filter is used."
          },
          "dateTo": {
            "title": "To date",
            "type": "string",
            "description": "Include reviews submitted on or before this date. Leave empty for no end date."
          },
          "discover": {
            "title": "Search by location",
            "type": "boolean",
            "description": "Find companies in the public directory and visit their properties. Choose a country below. United Kingdom searches also need a region.",
            "default": false
          },
          "country": {
            "title": "Country to search",
            "enum": [
              "GB",
              "FR",
              "IT",
              "MT",
              "PT",
              "MA",
              "GR",
              "ES",
              "CY",
              "HR",
              "IE",
              "TR",
              "AL",
              "MU",
              "JE"
            ],
            "type": "string",
            "description": "Used only when Search by location is on.",
            "default": "GB"
          },
          "region": {
            "title": "UK region",
            "type": "string",
            "description": "Required only for United Kingdom location searches. Enter the directory's region name, for example Scotland. Not needed when scraping your own links."
          },
          "subregion": {
            "title": "UK subregion (optional)",
            "type": "string",
            "description": "Narrow a UK location search using the directory's exact subregion name. Leave empty to search the whole selected region."
          },
          "maxProperties": {
            "title": "Maximum properties to visit",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Stop after this many properties across all links and location searches. Does not change the total review limit.",
            "default": 10
          },
          "maxReviewsPerProperty": {
            "title": "Reviews per property (optional)",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Leave empty to use Number of reviews. Set a smaller value to spread a company sample across multiple properties. The total review limit still applies."
          },
          "maxAiReviews": {
            "title": "Reviews to analyze with AI (optional)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Leave empty to analyze the requested sample, up to 100 reviews. Set a smaller value to reduce AI usage. Only used when Add AI insights is on; time and spending limits still apply."
          },
          "maxRequests": {
            "title": "Maximum page visits",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Safety limit for page downloads, including retries. Leave at 10 for a small run. Increase this if the report says the page limit was reached while searching multiple companies or properties.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}