{
  "openapi": "3.0.1",
  "info": {
    "title": "Hipcamp Scraper - Campgrounds, RV Parks & Glamping",
    "description": "Scrape Hipcamp campgrounds, RV parks, glamping and unique stays by US or AU region or listing link: price per night, rating, reviews, host, amenities, sites, photos, coordinates. Incremental monitoring, resume, MCP export.",
    "version": "0.1",
    "x-build-id": "jf3IcRafDOtiG9Mop"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~hipcamp-camping-glamping-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-hipcamp-camping-glamping-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~hipcamp-camping-glamping-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-hipcamp-camping-glamping-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~hipcamp-camping-glamping-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-hipcamp-camping-glamping-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search reads listings across one or more regions (US states, Australian states and territories). URL mode reads the exact listings you name.",
            "default": "search"
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Search mode: one or more regions by name or slug. United States: all 50 states plus Puerto Rico. Australia: all states and territories. Example: california, new south wales, texas, tasmania. See the README for the full list.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category (search mode)",
            "enum": [
              "all",
              "pets",
              "glamping",
              "rv",
              "cabins",
              "beach",
              "lake",
              "treehouse"
            ],
            "type": "string",
            "description": "Search mode: narrow each region to one Hipcamp sub-category page. Pets, glamping, RV, cabins, beach, lake or treehouse return that page's front-page listings (about 20 per region; the deep catalogue walk applies to All only). Not every region has every sub-category; one that does not exist is reported and skipped. Ignored in URL mode.",
            "default": "all"
          },
          "listingInputs": {
            "title": "Listing links",
            "type": "array",
            "description": "URL mode: Hipcamp links. Accepts listing links (with or without the locale prefix, query parameters ignored), region, city and category pages (/d/...), and per-region listing sitemaps (/sitemaps/v2/us-lands-ca.xml.gz). Left untouched, URL mode reads one example of each distinct scope (the pre-filled list also shows the ?page, ?sort, locale-less and query-parameter variants, which resolve to a scope already in the default). Multi-value supported.",
            "default": [
              "https://www.hipcamp.com/en-US/d/united-states/california/camping/all",
              "https://www.hipcamp.com/en-AU/d/australia/new-south-wales/camping/all",
              "https://www.hipcamp.com/en-US/d/united-states/california/big-sur/camping/all",
              "https://www.hipcamp.com/en-US/d/united-states/california/camping/pets",
              "https://www.hipcamp.com/en-US/land/california-oz-farm-gv1qhdd5",
              "https://www.hipcamp.com/sitemaps/v2/us-lands-ca.xml.gz"
            ],
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Listing links (alias)",
            "type": "array",
            "description": "Alias for Listing links, accepted under the name other Apify actors use for URL mode (startUrls is accepted too, as plain links or {url} objects).",
            "default": [
              "https://www.hipcamp.com/en-US/d/united-states/california/camping/all",
              "https://www.hipcamp.com/en-AU/d/australia/new-south-wales/camping/all",
              "https://www.hipcamp.com/en-US/d/united-states/california/big-sur/camping/all",
              "https://www.hipcamp.com/en-US/d/united-states/california/camping/pets",
              "https://www.hipcamp.com/en-US/land/california-oz-farm-gv1qhdd5",
              "https://www.hipcamp.com/sitemaps/v2/us-lands-ca.xml.gz"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (alias)",
            "type": "array",
            "description": "Alias for Listing links, accepted under the name used by other Apify scrapers (plain links).",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many records (0 = no limit; the run then stops when the regions' catalogues are exhausted).",
            "default": 20
          },
          "maxReviewsPerListing": {
            "title": "Max reviews per listing",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Camper reviews included on each fully-read listing (reviewer, date, text, positive flag, site). 0 turns reviews off. A listing page carries at most its first 30 reviews, so no listing returns more than 30 (see totalReviews for the site's count). Every started block of 10 delivered reviews adds one Detail enrichment event.",
            "default": 20
          },
          "fetchDetails": {
            "title": "Read full detail for front-page listings",
            "type": "boolean",
            "description": "Off by default: front-page tiles already carry price, rating, photos and coordinates. Turn on to also read every front-page listing's detail page (host, amenities, sites, policies). Each read adds one Detail enrichment event.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. Works on every proxy plan; the source is served through connection pools with automatic exit rotation."
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large pull without returning listings already collected there."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns every matching listing as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED listings. A listing counts as UPDATED when any returned field changes (price, availability, per-site data, photos, host, amenities and so on). The engagement counters favoritesCount, bookingsCount and recommendsCount are still returned but never make a listing UPDATED; you can exclude more fields below. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search, filter and lookup setup; use State key to name or deliberately share a monitoring campaign.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search and filter settings."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Output field names that should NOT make a listing count as UPDATED, in addition to the always-ignored favoritesCount, bookingsCount and recommendsCount. A name is ignored wherever it appears, including inside the per-site list. Ignored fields are still returned in the output.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results 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-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which listing pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on listings written to each connector per run. Does not affect the dataset.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}