{
  "openapi": "3.0.1",
  "info": {
    "title": "Wedding Scraper: The Knot, WeddingWire, Zola, Wedding Spot",
    "description": "Unified scraper for wedding vendor profiles across The Knot, WeddingWire, Wedding Spot and Zola. Returns vendor name, phone, email and website (where public), social handles, location, ratings, review count, awards, price range, and capacity. Built for wedding-industry sales teams.",
    "version": "1.0",
    "x-build-id": "6oY2BWv8S61lCb0bf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jungle_synthesizer~wedding-vendor-aggregator-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jungle_synthesizer-wedding-vendor-aggregator-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/jungle_synthesizer~wedding-vendor-aggregator-scraper/runs": {
      "post": {
        "operationId": "runs-sync-jungle_synthesizer-wedding-vendor-aggregator-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/jungle_synthesizer~wedding-vendor-aggregator-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-jungle_synthesizer-wedding-vendor-aggregator-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": {
          "sp_intended_usage": {
            "title": "What is the intended usage of this data?",
            "minLength": 1,
            "type": "string",
            "description": "What will this data feed? E.g. lead lists, KYB checks, price tracking."
          },
          "sp_improvement_suggestions": {
            "title": "How can we improve this crawler for you?",
            "minLength": 1,
            "type": "string",
            "description": "Provide any feedback or suggestions for improvements."
          },
          "sp_contact": {
            "title": "Contact email (optional)",
            "minLength": 1,
            "type": "string",
            "description": "We'll personally help with your use case. No spam."
          },
          "resumeCursor": {
            "title": "Resume cursor (continue a previous run)",
            "type": "string",
            "description": "Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs)."
          },
          "searchUrls": {
            "title": "Search / Category URLs",
            "type": "array",
            "description": "List of category or city pages to crawl. Mix freely between The Knot\n(`https://www.theknot.com/marketplace/...`), WeddingWire\n(`https://www.weddingwire.com/c/...-rca.html`), Wedding Spot\n(`https://www.wedding-spot.com/wedding-venues/georgia/atlanta/`) and Zola\nvendor search pages\n(`https://www.zola.com/wedding-vendors/search/atlanta-ga--wedding-venues`).\nThe actor discovers vendor profiles from each, paginates, and extracts them.\nFor Zola use the search URL your browser shows after picking a category and\na location (`/wedding-vendors/search/...`).\n",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "categories": {
            "title": "Vendor Categories",
            "type": "array",
            "description": "Pick vendor categories instead of pasting listing URLs. Used together with\nLocations: every category is searched in every location on The Knot and Zola\n(Wedding Venues also on Wedding Spot). WeddingWire is reached through Search\nURLs only. Search URLs and Categories can be combined.\n",
            "items": {
              "type": "string",
              "enum": [
                "wedding-venues",
                "wedding-photographers",
                "wedding-planners",
                "wedding-videographers",
                "wedding-officiants",
                "wedding-djs",
                "wedding-florists"
              ],
              "enumTitles": [
                "Wedding Venues",
                "Photographers",
                "Planners",
                "Videographers",
                "Officiants",
                "DJs and Bands",
                "Florists"
              ]
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "US cities as \"City, ST\" (for example `Austin, TX`). Used together with\nCategories. A city the platform does not list stops the run with an error\ninstead of returning unrelated vendors.\n",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of vendor profile records to scrape across all search\nURLs. Defaults to 15 to stay inside Apify's 5-minute test window;\nusers targeting full-directory pulls should raise this explicitly.\n",
            "default": 15
          },
          "maxPagesPerSearch": {
            "title": "Max Pages Per Search URL",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on how many paginated pages to fetch per search URL. 1 page on\nThe Knot is ~33 vendors; WeddingWire is ~50; Wedding Spot is 36; Zola is 30.\nKeep low for sampling.\n",
            "default": 5
          },
          "platforms": {
            "title": "Platforms",
            "type": "array",
            "description": "Filter which platforms to keep. By default all are included. Useful\nwhen a search URL list mixes platforms and you only want some.\n",
            "items": {
              "type": "string",
              "enum": [
                "theknot",
                "weddingwire",
                "weddingspot",
                "zola"
              ],
              "enumTitles": [
                "The Knot",
                "WeddingWire",
                "Wedding Spot",
                "Zola"
              ]
            },
            "default": [
              "theknot",
              "weddingwire",
              "weddingspot",
              "zola"
            ]
          },
          "includeReviews": {
            "title": "Include Reviews",
            "type": "boolean",
            "description": "Add each vendor's review text to its record (`reviews`: reviewer, rating,\ndate, title, text). Each vendor whose record carries reviews is billed one\nextra data-record event on top of the normal record charge. Off by default.\nThe Knot returns up to 50 reviews per vendor, Zola up to 6, WeddingWire the\nfew it shows on the profile page; Wedding Spot has no reviews.\n",
            "default": false
          },
          "maxReviewsPerVendor": {
            "title": "Max Reviews Per Vendor",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Cap on reviews saved per vendor when Include Reviews is on.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}