{
  "openapi": "3.0.1",
  "info": {
    "title": "No Booking Finder — Local Business Opportunities",
    "description": "Rank appointment-driven businesses by public demand, apparent online booking gaps and nearby competitor evidence.",
    "version": "1.3",
    "x-build-id": "qaqkOm4t3yzOuq79T"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/segm~no-booking-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-segm-no-booking-finder",
        "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/segm~no-booking-finder/runs": {
      "post": {
        "operationId": "runs-sync-segm-no-booking-finder",
        "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/segm~no-booking-finder/run-sync": {
      "post": {
        "operationId": "run-sync-segm-no-booking-finder",
        "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": {
          "searchTerms": {
            "title": "Search",
            "minItems": 1,
            "maxItems": 5,
            "type": "array",
            "description": "Appointment-driven businesses to search, for example dentist or barber.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            },
            "default": [
              "dentist"
            ]
          },
          "location": {
            "title": "Location",
            "minLength": 1,
            "maxLength": 300,
            "type": "string",
            "description": "One city and country, for example Lyon, France.",
            "default": "Lyon, France"
          },
          "maxResults": {
            "title": "Maximum businesses",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum source records read. Upstream limits are split across search terms. Duplicates or malformed records can reduce final results.",
            "default": 100
          },
          "source": {
            "title": "Business source",
            "enum": [
              "google_maps",
              "dataset",
              "direct"
            ],
            "type": "string",
            "description": "Search Google Maps (paid upstream Actor), reuse a Dataset, or supply businesses directly.",
            "default": "google_maps"
          },
          "businesses": {
            "title": "Your businesses",
            "maxItems": 1000,
            "type": "array",
            "description": "Normalized records for source=direct. Name is required; supply category, geography, reviews and a website for useful scoring.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 300,
                  "title": "Business name",
                  "description": "Required normalized business name.",
                  "editor": "textfield"
                },
                "address": {
                  "default": "",
                  "type": "string",
                  "maxLength": 2000,
                  "title": "Address",
                  "description": "Street address when available.",
                  "editor": "textfield"
                },
                "city": {
                  "default": "",
                  "type": "string",
                  "maxLength": 200,
                  "title": "City",
                  "description": "City where the business operates.",
                  "editor": "textfield"
                },
                "country": {
                  "default": "",
                  "type": "string",
                  "maxLength": 100,
                  "title": "Country",
                  "description": "Country where the business operates.",
                  "editor": "textfield"
                },
                "category": {
                  "default": "",
                  "type": "string",
                  "maxLength": 200,
                  "title": "Category",
                  "description": "Business category used for ranking.",
                  "editor": "textfield"
                },
                "latitude": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 90,
                  "nullable": true,
                  "title": "Latitude",
                  "description": "Optional latitude in decimal degrees.",
                  "editor": "number"
                },
                "longitude": {
                  "type": "number",
                  "minimum": -180,
                  "maximum": 180,
                  "nullable": true,
                  "title": "Longitude",
                  "description": "Optional longitude in decimal degrees.",
                  "editor": "number"
                },
                "websiteUrl": {
                  "type": "string",
                  "maxLength": 2000,
                  "nullable": true,
                  "title": "Website URL",
                  "description": "Optional public website to analyze.",
                  "editor": "textfield"
                },
                "phone": {
                  "type": "string",
                  "maxLength": 100,
                  "nullable": true,
                  "title": "Phone",
                  "description": "Optional public phone number.",
                  "editor": "textfield"
                },
                "email": {
                  "type": "string",
                  "maxLength": 320,
                  "nullable": true,
                  "title": "Email",
                  "description": "Optional public email address.",
                  "editor": "textfield"
                },
                "rating": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 5,
                  "nullable": true,
                  "title": "Rating",
                  "description": "Optional rating from 0 to 5.",
                  "editor": "number"
                },
                "reviewCount": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000,
                  "nullable": true,
                  "title": "Review count",
                  "description": "Optional nonnegative review count.",
                  "editor": "number"
                },
                "source": {
                  "default": "direct",
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200,
                  "title": "Source",
                  "description": "Origin label for this normalized record.",
                  "editor": "textfield"
                },
                "sourceId": {
                  "type": "string",
                  "maxLength": 500,
                  "nullable": true,
                  "title": "Source ID",
                  "description": "Optional identifier in the originating source.",
                  "editor": "textfield"
                }
              },
              "required": [
                "name"
              ],
              "additionalProperties": false
            }
          },
          "datasetId": {
            "title": "Existing Dataset ID",
            "pattern": "^[\\w-]+$",
            "maxLength": 100,
            "type": "string",
            "description": "Cloud Dataset to reuse with source=dataset. No new Google Maps run is started."
          },
          "datasetAdapter": {
            "title": "Dataset format",
            "enum": [
              "google_maps",
              "normalized"
            ],
            "type": "string",
            "description": "Choose the Google Maps format or normalized OpportunityFilter business inputs.",
            "default": "google_maps"
          },
          "minimumRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "0 disables the filter. Missing ratings fail a positive minimum.",
            "default": 0
          },
          "minimumReviews": {
            "title": "Minimum reviews",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "0 disables the filter. Missing review counts fail a positive minimum.",
            "default": 0
          },
          "analyzeWebsites": {
            "title": "Analyze public websites",
            "type": "boolean",
            "description": "Inspect bounded static HTML and useful internal pages.",
            "default": true
          },
          "analyzeCompetitors": {
            "title": "Compare local competitors",
            "type": "boolean",
            "description": "Reuse only the businesses already collected. No extra searches.",
            "default": true
          },
          "includeLowConfidenceResults": {
            "title": "Include uncertain results",
            "type": "boolean",
            "description": "Keep partial, unscorable and low-confidence results for review.",
            "default": true
          },
          "minimumConfidence": {
            "title": "Minimum confidence",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Applied only when uncertain results are excluded. Confidence measures evidence completeness, not a calibrated probability.",
            "default": 0.65
          },
          "competitorRadiusKm": {
            "title": "Competitor radius (km)",
            "minimum": 0.1,
            "maximum": 50,
            "type": "number",
            "description": "Great-circle radius when both businesses have coordinates; otherwise same nonempty city and country.",
            "default": 10
          },
          "minimumCompetitorSample": {
            "title": "Minimum analyzed peers",
            "minimum": 2,
            "maximum": 20,
            "type": "integer",
            "description": "Smaller samples reduce the competitor weight and confidence.",
            "default": 3
          },
          "websiteConcurrency": {
            "title": "Concurrent websites",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum parallel business tasks. Transport additionally serializes requests to the same host.",
            "default": 10
          },
          "requestTimeoutMs": {
            "title": "Request timeout (ms)",
            "minimum": 1000,
            "maximum": 30000,
            "type": "integer",
            "description": "Bounded deadline for one request attempt, including redirects.",
            "default": 15000
          },
          "maxResponseBytes": {
            "title": "Maximum response bytes",
            "minimum": 1024,
            "maximum": 2000000,
            "type": "integer",
            "description": "Maximum decompressed HTML response size.",
            "default": 1000000
          },
          "maxPagesPerWebsite": {
            "title": "Pages per website",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Homepage plus at most two same-origin pages; stop early when a booking mechanism is detected.",
            "default": 2
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 2,
            "type": "integer",
            "description": "Retry transient network errors, HTTP 429 and selected 5xx responses only.",
            "default": 1
          },
          "upstreamActorId": {
            "title": "Upstream Google Maps Actor",
            "pattern": "^(?:[\\w-]+\\/)?[\\w-]+$",
            "maxLength": 150,
            "type": "string",
            "description": "Identifier of a compatible Actor. The adapter expects the documented compass schema.",
            "default": "compass/crawler-google-places"
          },
          "upstreamBuild": {
            "title": "Upstream build",
            "pattern": "^[\\w.-]+$",
            "maxLength": 50,
            "type": "string",
            "description": "Pinned tested input-schema build. Adjust when choosing another compatible Actor.",
            "default": "0.14.750"
          },
          "upstreamMaxChargeUsd": {
            "title": "Upstream event-charge ceiling (USD)",
            "minimum": 0.1,
            "maximum": 20,
            "type": "number",
            "description": "Apify pay-per-event limit passed to the upstream Actor. Platform compute/storage charges may be separate.",
            "default": 2
          },
          "upstreamTimeoutSecs": {
            "title": "Upstream timeout (seconds)",
            "minimum": 30,
            "maximum": 3600,
            "type": "integer",
            "description": "Maximum duration passed to the Google Maps Actor.",
            "default": 600
          },
          "scoringWeights": {
            "title": "Scoring weights",
            "type": "object",
            "description": "Nonnegative weights are normalized by their sum. Default: demand .35, booking gap .35, competitor gap .20, digital gap .10.",
            "properties": {
              "demand": {
                "default": 0.35,
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "title": "Demand weight",
                "description": "Relative weight for public demand.",
                "editor": "number"
              },
              "bookingGap": {
                "default": 0.35,
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "title": "Booking gap weight",
                "description": "Relative weight for the apparent booking gap.",
                "editor": "number"
              },
              "competitorGap": {
                "default": 0.2,
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "title": "Competitor gap weight",
                "description": "Relative weight for nearby competitor evidence.",
                "editor": "number"
              },
              "digitalGap": {
                "default": 0.1,
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "title": "Digital gap weight",
                "description": "Relative weight for the digital presence gap.",
                "editor": "number"
              }
            },
            "default": {
              "demand": 0.35,
              "bookingGap": 0.35,
              "competitorGap": 0.2,
              "digitalGap": 0.1
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}