{
  "openapi": "3.0.1",
  "info": {
    "title": "Airbnb URL Finder Scraper — listing discovery",
    "description": "Scrape airbnb.com — enumerate every listing URL for a city or neighborhood · return listing id URL & name · the cheapest way to map available stays. Incremental mode tracks new and changed listings across scheduled runs.",
    "version": "0.1",
    "x-build-id": "rIvwdYQfa6qcfg9Hj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~airbnb-url-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-airbnb-url-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/blackfalcondata~airbnb-url-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-airbnb-url-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/blackfalcondata~airbnb-url-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-airbnb-url-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": {
          "searchLocations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "One or more places: a city, a neighborhood, or \"City, ST\" (e.g. \"New York, NY\"). Each is searched independently. Leave empty if you only use Start URLs.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "💯 Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listing URLs to return (0 = full coverage). Full coverage works even for very large cities.",
            "default": 100
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Paste Airbnb room URLs (e.g. https://www.airbnb.com/rooms/12345678) or search-result URLs. Room URLs become URL rows directly; search URLs read their location from the URL and the filters below still apply. If a pasted URL carries check-in and check-out dates, they are used for that listing's cancellation policy.",
            "items": {
              "type": "string"
            }
          },
          "priceMin": {
            "title": "💰 Min Price (USD / night)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return URLs for listings at or above this nightly price."
          },
          "priceMax": {
            "title": "💰 Max Price (USD / night)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return URLs for listings at or below this nightly price."
          },
          "roomTypes": {
            "title": "🏠 Room Types",
            "type": "array",
            "description": "Restrict to one or more room types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ],
              "enumTitles": [
                "Entire home/apt",
                "Private room",
                "Shared room",
                "Hotel room"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "🛏️ Min Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms."
          },
          "adults": {
            "title": "👥 Guests",
            "minimum": 1,
            "type": "integer",
            "description": "Number of guests (adults) to price for."
          },
          "checkin": {
            "title": "📅 Check-in",
            "type": "string",
            "description": "Optional stay start date (YYYY-MM-DD). Use with Check-out to price a specific stay and, with detail enrichment, to get the cancellation policy for it."
          },
          "checkout": {
            "title": "📅 Check-out",
            "type": "string",
            "description": "Optional stay end date (YYYY-MM-DD)."
          },
          "children": {
            "title": "🧒 Children",
            "minimum": 0,
            "type": "integer",
            "description": "Children (ages 2–12) travelling. They count toward the number of guests a place must sleep."
          },
          "infants": {
            "title": "👶 Infants",
            "minimum": 0,
            "type": "integer",
            "description": "Infants (under 2) travelling."
          },
          "pets": {
            "title": "🐾 Pets",
            "minimum": 0,
            "type": "integer",
            "description": "Pets travelling. Only places that allow pets are returned."
          },
          "minBeds": {
            "title": "🛏️ Min Beds",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of beds."
          },
          "minBathrooms": {
            "title": "🛁 Min Bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bathrooms."
          },
          "propertyTypes": {
            "title": "🏘️ Property Types",
            "type": "array",
            "description": "Restrict to one or more property types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "House",
                "Apartment",
                "Guesthouse",
                "Hotel"
              ],
              "enumTitles": [
                "House",
                "Apartment",
                "Guesthouse",
                "Hotel"
              ]
            }
          },
          "amenities": {
            "title": "🧺 Amenities",
            "type": "array",
            "description": "Only places that have every amenity listed, including accessibility features (step-free access, grab bars, wide entrances) and Waterfront. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "Wifi",
                "Kitchen",
                "Washer",
                "Dryer",
                "Air conditioning",
                "Heating",
                "Dedicated workspace",
                "TV",
                "Hair dryer",
                "Iron",
                "Pool",
                "Hot tub",
                "Free parking",
                "EV charger",
                "Crib",
                "King bed",
                "Gym",
                "BBQ grill",
                "Breakfast",
                "Indoor fireplace",
                "Smoking allowed",
                "Self check-in",
                "Smoke alarm",
                "Carbon monoxide alarm",
                "Step-free access",
                "Disabled parking spot",
                "Guest entrance wider than 32 inches",
                "Step-free bedroom access",
                "Bedroom entrance wider than 32 inches",
                "Step-free bathroom access",
                "Bathroom entrance wider than 32 inches",
                "Toilet grab bar",
                "Shower grab bar",
                "Step-free shower",
                "Shower or bath chair",
                "Ceiling or mobile hoist",
                "Waterfront"
              ],
              "enumTitles": [
                "Wifi",
                "Kitchen",
                "Washer",
                "Dryer",
                "Air conditioning",
                "Heating",
                "Dedicated workspace",
                "TV",
                "Hair dryer",
                "Iron",
                "Pool",
                "Hot tub",
                "Free parking",
                "EV charger",
                "Crib",
                "King bed",
                "Gym",
                "BBQ grill",
                "Breakfast",
                "Indoor fireplace",
                "Smoking allowed",
                "Self check-in",
                "Smoke alarm",
                "Carbon monoxide alarm",
                "Step-free access",
                "Disabled parking spot",
                "Guest entrance wider than 32 inches",
                "Step-free bedroom access",
                "Bedroom entrance wider than 32 inches",
                "Step-free bathroom access",
                "Bathroom entrance wider than 32 inches",
                "Toilet grab bar",
                "Shower grab bar",
                "Step-free shower",
                "Shower or bath chair",
                "Ceiling or mobile hoist",
                "Waterfront"
              ]
            }
          },
          "instantBook": {
            "title": "⚡ Instant Book only",
            "type": "boolean",
            "description": "Only places you can book without waiting for host approval."
          },
          "guestFavorite": {
            "title": "🏅 Guest favorites only",
            "type": "boolean",
            "description": "Only places Airbnb marks as a guest favorite."
          },
          "superhost": {
            "title": "⭐ Superhosts only",
            "type": "boolean",
            "description": "Only places hosted by a Superhost."
          },
          "luxe": {
            "title": "💎 Airbnb Luxe only",
            "type": "boolean",
            "description": "Only Airbnb Luxe places."
          },
          "hostLanguages": {
            "title": "🗣️ Host Languages",
            "type": "array",
            "description": "Only hosts who speak one of these languages. Two-letter codes (e.g. \"en\", \"fr\", \"es\") or language names.",
            "items": {
              "type": "string"
            }
          },
          "privateBathroom": {
            "title": "🚿 Private attached bathroom only",
            "type": "boolean",
            "description": "Only places where your bathroom is private and attached to your room (en-suite)."
          },
          "neighborhoods": {
            "title": "🏘️ Neighbourhoods",
            "type": "array",
            "description": "Only places in these neighbourhoods of the searched location, as Airbnb names them in its own filter (e.g. \"Zilker\", \"East Austin\"). An Airbnb neighbourhood id from a search URL works too. If a name is not offered for your location, the run stops and lists the names that are.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "title": "💱 Currency",
            "pattern": "^([A-Za-z]{3})?$",
            "type": "string",
            "description": "Three-letter currency code prices are quoted in, such as EUR, GBP or JPY. Price filters use the same currency. Leave empty to use the currency a pasted Airbnb URL names (?currency=EUR), otherwise USD."
          },
          "locale": {
            "title": "🌐 Language",
            "pattern": "^([A-Za-z]{2}([-_][A-Za-z]{2,4})?)?$",
            "type": "string",
            "description": "Language for titles, labels and text, as an Airbnb language code such as de, fr, es or pt-BR. Leave empty to use the language a pasted Airbnb URL names (?locale=de), otherwise English."
          },
          "centerLat": {
            "title": "🧭 Center Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Optional radius filter — center latitude (decimal, e.g. 40.7128). Combine with Center Longitude + Radius to keep only listings within the radius."
          },
          "centerLng": {
            "title": "🧭 Center Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Radius filter — center longitude (decimal, e.g. -74.0060)."
          },
          "radiusKm": {
            "title": "📏 Radius (km)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only listings within this many kilometres of the center point."
          },
          "lat": {
            "title": "🌐 Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "Same as Center Latitude, used when that is empty. Pair with lon and set Radius to keep only listings near the point."
          },
          "lon": {
            "title": "🌐 Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "Same as Center Longitude, used when that is empty. Pair with lat."
          },
          "excludeEmptyFields": {
            "title": "🧹 Exclude Empty Fields",
            "type": "boolean",
            "description": "Drop null / empty-string fields from each URL record.",
            "default": false
          },
          "compact": {
            "title": "📦 Compact Output (for AI / MCP)",
            "type": "boolean",
            "description": "Return only core fields. Reduces payload size for LLM pipelines and agent tools.",
            "default": false
          },
          "includeDetails": {
            "title": "📋 Include Full Listing Details",
            "type": "boolean",
            "description": "Fetch each listing's page to add the full description, amenities, house rules, cancellation policy (when the pasted URL has check-in and check-out dates) and host profile (about, response rate and time). Increases run time. Leave off for a fast, low-cost run.",
            "default": false
          },
          "includeCalendar": {
            "title": "📅 Include Availability Calendar",
            "type": "boolean",
            "description": "Add each listing's availability for the next 12 months (one row per day: bookable or not, minimum and maximum stay), the number of free and taken nights in the next 30, 90 and 365 days, and an occupancy and revenue estimate (taken nights times the current nightly rate; an estimate, not reported earnings). The estimate needs a nightly rate, so it is filled for listings found through a search URL and empty for pasted room URLs. One extra request per listing, so runs take a little longer. Off by default.",
            "default": false
          },
          "notifyOnlyChanges": {
            "title": "🔄 Notify Only New/Updated",
            "type": "boolean",
            "description": "When change tracking applies, only send notifications for new or updated records.",
            "default": false
          },
          "notificationLimit": {
            "title": "📊 Max Records Per Notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of records included in each notification message (1–20).",
            "default": 5
          },
          "telegramToken": {
            "title": "🔑 Telegram Bot Token",
            "type": "string",
            "description": "Telegram bot token (from @BotFather). Required for Telegram notifications."
          },
          "telegramChatId": {
            "title": "💬 Telegram Chat ID",
            "type": "string",
            "description": "Telegram chat or channel ID where alerts are sent."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord Webhook URL",
            "type": "string",
            "description": "Discord incoming webhook URL."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack Webhook URL",
            "type": "string",
            "description": "Slack incoming webhook URL."
          },
          "whatsappPhoneNumberId": {
            "title": "📱 WhatsApp Phone Number ID",
            "type": "string",
            "description": "WhatsApp Business phone number ID from Meta Business Manager."
          },
          "whatsappAccessToken": {
            "title": "🔐 WhatsApp Access Token",
            "type": "string",
            "description": "Meta Cloud API access token with whatsapp_business_messaging scope."
          },
          "whatsappTo": {
            "title": "📨 WhatsApp Recipient",
            "type": "string",
            "description": "Recipient phone number in E.164 format (e.g. +14155551234)."
          },
          "webhookUrl": {
            "title": "🪝 Generic Webhook URL",
            "type": "string",
            "description": "Universal escape hatch for n8n / Make / Zapier / custom HTTP backends. Receives a JSON POST per run."
          },
          "webhookHeaders": {
            "title": "🪝 Webhook Headers (optional)",
            "type": "object",
            "description": "Additional HTTP headers sent with the generic webhook POST."
          },
          "appConnector": {
            "title": "📤 Send results to a connected app",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results. A run-summary is written to the connected app; support is best-effort as Apify expands its connector catalog."
          },
          "mcpIssueTeam": {
            "title": "🏷️ Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one."
          },
          "maxQueries": {
            "title": "🧮 Max Queries (cost guard)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional hard ceiling on how much work full-coverage runs do. Leave empty for the default. Lower it to cap cost on very dense areas."
          },
          "cityName": {
            "title": "🏙️ City Name",
            "type": "string",
            "description": "City name (e.g. \"Paris\", \"Lyon\"). Resolved to the nearest known city."
          },
          "query": {
            "title": "🔍 Search Term(s)",
            "type": "string",
            "description": "A place to search, read like one Locations entry. Used only when Locations and City Name are empty. Enter a single term or a JSON array for several."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}