{
  "openapi": "3.0.1",
  "info": {
    "title": "PartySlate Scraper — Event Venue & Vendor Leads",
    "description": "Scrape event venues and vendors from PartySlate: venue type or category, city, state, seated and standing capacity, event spaces, website, phone, Instagram, photo counts, published pricing, claimed status. 119 US metros, 48,600 companies, plus every pro credited on 44,593 real events. No login.",
    "version": "0.1",
    "x-build-id": "EY3EsfobYdNHFfHkb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~partyslate-venue-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-partyslate-venue-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/scrapersdelight~partyslate-venue-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-partyslate-venue-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/scrapersdelight~partyslate-venue-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-partyslate-venue-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": {
          "startUrls": {
            "title": "Start URLs (paste from your browser)",
            "type": "array",
            "description": "Run the search you want on partyslate.com, copy the address bar, paste it here. Three shapes work, and you can mix them:\n\n• https://www.partyslate.com/find-venues/near/chicago  (also /near/chicago-il-usa, and /near/<place>/types/ballroom)\n• https://www.partyslate.com/find-vendors/wedding-photographer/area/new-york-city\n• https://www.partyslate.com/real-events/weddings  (every pro credited on published events)\n\nA company profile URL (/venues/<slug>, /vendors/<slug>) is NOT a search page and is rejected rather than half-scraped. Anything else fails immediately with PartySlate's live vocabulary printed, so you never get a green run with an empty dataset. Leave empty to use the pickers below.",
            "items": {
              "type": "string",
              "pattern": "^https?://(?:www\\.)?partyslate\\.com/(?:find-venues|find-vendors|real-events)/.+$"
            },
            "default": []
          },
          "listingType": {
            "title": "Source (used when Start URLs is empty)",
            "enum": [
              "venues",
              "vendors",
              "both",
              "real-events"
            ],
            "type": "string",
            "description": "Venues are event spaces (18,992 on PartySlate); vendors are the event businesses around them — planners, photographers, caterers, florists, DJs, rentals and 9 more categories (29,608). \"Both\" returns them in one dataset with identical columns and a listingType flag on every row. \"Real events\" is a different route to the same companies: it walks PartySlate's 44,593 published real events and returns every pro credited on them — including venues and pros that never appear in the directory search. Real-event rows are thinner (no capacity, no published pricing, no photo counts) — see the README's fill table D.",
            "default": "venues"
          },
          "locations": {
            "title": "Metro areas",
            "type": "array",
            "description": "PartySlate metro slugs — chicago, new-york-city, los-angeles, miami, dallas, atlanta, austin, houston, boston, san-francisco, seattle, denver, nashville, las-vegas, orlando, phoenix, washington-d-c, philadelphia … 119 in all (the README lists every one). Or just type a plain city name — \"New York\", \"Washington DC\" — and it is resolved through PartySlate's own geocoder, with the run log printing exactly what it resolved to. A slug that matches nothing stops the run with the full live list rather than returning zero rows. LEAVE EMPTY to sweep all 119 metros: the sweep is breadth-first, so a 500-row nationwide run came back across 14 metros in 21 states, not all-Albany. Ignored when the source is Real events.",
            "items": {
              "type": "string"
            }
          },
          "eventCategories": {
            "title": "Real-event categories (Real events source only)",
            "type": "array",
            "description": "Which slices of PartySlate's published-event gallery to walk. Empty = all six. Live event counts: Weddings 25,053 · Corporate Events 8,988 · Celebrations 3,841 · Birthdays 2,438 · Mitzvahs 2,272 · Fundraisers 2,001. Categories are interleaved, so a capped run is not all weddings. Ignored unless the source is Real events.",
            "items": {
              "type": "string",
              "enum": [
                "weddings",
                "corporate-events",
                "celebrations",
                "birthdays",
                "mitzvahs",
                "fundraisers"
              ],
              "enumTitles": [
                "Weddings (25,053 events)",
                "Corporate Events (8,988)",
                "Celebrations (3,841)",
                "Birthdays (2,438)",
                "Mitzvahs (2,272)",
                "Fundraisers (2,001)"
              ]
            },
            "default": []
          },
          "vendorCategories": {
            "title": "Vendor categories (vendors only)",
            "type": "array",
            "description": "Limit vendors to these categories. Empty = all 15. Nationwide counts: Event Planner 7,104 · Photographer 4,939 · Design & Floral 3,922 · Entertainment 3,497 · Caterer 3,098 · Rentals 1,841 · Bakery & Desserts 894 · Videographer 724 · Invitations & Print 688 · Parking & Transportation 668 · Hair, Makeup & Stylist 640 · AV & Technology 508 · Event Agency 441 · Favors & Gifts 394 · Staffing 250. This is a server-side filter, so it costs nothing extra. Ignored when you scrape venues.",
            "items": {
              "type": "string",
              "enum": [
                "planner",
                "photographer",
                "design-decor-floral",
                "caterer",
                "rentals",
                "entertainment",
                "bakery-desserts",
                "invitations-print",
                "videographer",
                "agency",
                "hair-makeup-stylist",
                "av-and-technology",
                "favors-gifts",
                "staffing",
                "parking-transportation"
              ],
              "enumTitles": [
                "Event Planner (7,104)",
                "Photographer (4,939)",
                "Design & Floral (3,922)",
                "Caterer (3,098)",
                "Rentals (1,841)",
                "Entertainment (3,497)",
                "Bakery & Desserts (894)",
                "Invitations & Print (688)",
                "Videographer (724)",
                "Event Agency (441)",
                "Hair, Makeup & Stylist (640)",
                "AV & Technology (508)",
                "Favors & Gifts (394)",
                "Staffing (250)",
                "Parking & Transportation (668)"
              ]
            },
            "default": []
          },
          "venueTypes": {
            "title": "Venue types (venues only)",
            "type": "array",
            "description": "Limit venues to these space types. Empty = all 34. Most common nationwide: Event Space 11,373 · Meeting Space 6,470 · Hotel 6,243 · Outdoor 5,846 · Ballroom 5,384 · Restaurant 4,884 · Historic Space 3,470 · Bar 1,868 · Garden 1,687 · Waterfront 1,643 · Country Club 1,548 · Museum 1,522. Server-side, so it costs nothing extra — but only 55.0% of venues have ANY space type on file, so a type filter also discards every venue that never filled its spaces in. Ignored when you scrape vendors.",
            "items": {
              "type": "string",
              "enum": [
                "event-space",
                "meeting-space",
                "hotel",
                "outdoor",
                "ballroom",
                "restaurant",
                "historic-space",
                "bar",
                "garden",
                "waterfront",
                "country-club",
                "museum",
                "venue-with-activities",
                "landmark",
                "resort",
                "estate",
                "theater",
                "mansion",
                "barn",
                "rooftop",
                "art-gallery",
                "winery",
                "vineyard",
                "farm",
                "brewery",
                "distillery",
                "loft",
                "ranch",
                "boat",
                "beach",
                "park",
                "tent",
                "retail-space",
                "convention-center"
              ],
              "enumTitles": [
                "Event Space (11,373)",
                "Meeting Space (6,470)",
                "Hotel (6,243)",
                "Outdoor (5,846)",
                "Ballroom (5,384)",
                "Restaurant (4,884)",
                "Historic Space (3,470)",
                "Bar (1,868)",
                "Garden (1,687)",
                "Waterfront (1,643)",
                "Country Club (1,548)",
                "Museum (1,522)",
                "Venue with Activities",
                "Landmark",
                "Resort",
                "Estate",
                "Theater",
                "Mansion",
                "Barn",
                "Rooftop",
                "Art Gallery",
                "Winery",
                "Vineyard",
                "Farm",
                "Brewery",
                "Distillery",
                "Loft",
                "Ranch",
                "Boat",
                "Beach",
                "Park",
                "Tent",
                "Retail Space",
                "Convention Center"
              ]
            },
            "default": []
          },
          "eventType": {
            "title": "Rank results for this event type",
            "enum": [
              "",
              "wedding",
              "corporate-event",
              "gala",
              "fundraiser",
              "bar-mitzvah",
              "bat-mitzvah",
              "milestone-birthday",
              "kids-birthday",
              "baby-shower",
              "engagement-party",
              "holiday-party",
              "corporate-holiday-party",
              "conference-summit",
              "product-launch",
              "experiential-activation",
              "quinceanera",
              "sweet-16",
              "graduation-party",
              "anniversary"
            ],
            "type": "string",
            "description": "PartySlate's event-type parameter is a RANKING signal, not a filter — measured: New York photographers return 406 matches with or without it, and Los Angeles returns 1,214 venues either way; only the ORDER changes. So on a capped run this decides WHICH wedding-first or corporate-first companies you get, and on an uncapped run it changes nothing but the sequence. Applies to both venues and vendors.",
            "default": ""
          },
          "diversityClassifications": {
            "title": "Diversity-owned vendors (vendors only)",
            "type": "array",
            "description": "Keep only vendors that self-declare one of these ownership classifications on PartySlate. 20.8% of vendors declare at least one, so expect this to remove about four rows in five. Server-side, so it costs nothing extra. Empty = no filter.",
            "items": {
              "type": "string",
              "enum": [
                "woman-owned",
                "black-owned",
                "hispanic-or-latinx-owned",
                "south-asian-owned",
                "east-asian-owned",
                "pacific-islander-owned",
                "middle-eastern-owned",
                "native-american-owned",
                "lgbtq-owned",
                "veteran-owned"
              ],
              "enumTitles": [
                "Woman owned",
                "Black owned",
                "Hispanic or Latinx owned",
                "South Asian owned",
                "East Asian owned",
                "Pacific Islander owned",
                "Middle Eastern owned",
                "Native American owned",
                "LGBTQ+ owned",
                "Veteran owned"
              ]
            },
            "default": []
          },
          "minCapacity": {
            "title": "Minimum capacity (venues)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop venues whose largest published capacity (seated or standing) is below this. Only 78.9% of venues publish any capacity, and every venue without one is dropped when you set a floor. Vendor rows are unaffected — vendors have no capacity — so a \"Both\" run keeps them. Not available on the Real events source, which carries no capacity at all; it is ignored there with a warning in the log. 0 = keep everyone.",
            "default": 0
          },
          "withPublishedPricingOnly": {
            "title": "Only listings with published pricing",
            "type": "boolean",
            "description": "Ask PartySlate for only the companies that publish a minimum spend or per-guest price — 15.7% of venues nationwide, 20.0% of vendors in a whole-metro walk, so this cuts the pool by roughly five to one. Server-side, so it costs nothing extra. Ignored on the Real events source.",
            "default": false
          },
          "claimedOnly": {
            "title": "Only claimed listings",
            "type": "boolean",
            "description": "Keep only companies that have claimed their PartySlate profile — a live account rather than a directory stub. 67.5% of venues and 83.5% of vendors in a whole-metro walk are claimed. Claimed listings are far likelier to carry a phone, photos and a real description.",
            "default": false
          },
          "withPhoneOnly": {
            "title": "Only listings with a phone number",
            "type": "boolean",
            "description": "Keep only companies with a public phone number (80.9% of venues, 60.3% of vendors nationwide). On the directory sources it is applied BEFORE the website lookup, so it also makes the run cheaper; on the Real events source the phone only exists after that lookup, so it is applied afterwards instead and the run fetches spare candidates to compensate.",
            "default": false
          },
          "withWebsiteOnly": {
            "title": "Only listings with a website",
            "type": "boolean",
            "description": "Keep only companies with a public website (86.7% of venues, 79.0% of vendors in a whole-metro walk). A website is only known AFTER the contact lookup, so this filter discards already-fetched rows — the run collects roughly twice as many candidates to compensate. You are still billed only for rows delivered. Requires \"Look up website, Instagram and city/state\" to stay on.",
            "default": false
          },
          "enrichContacts": {
            "title": "Look up website, Instagram and city/state",
            "type": "boolean",
            "description": "Fetch each company's public profile record for its website, Instagram, Google Place ID and — on venue and real-event rows — real city and state fields. One extra ~0.5 KB request per company; it does not change the price. Turn it OFF for a fast structural sweep, but website, Instagram and Google Place ID then come back empty. Leave it ON for the Real events source: a credit line carries almost nothing without it.",
            "default": true
          },
          "includeEventSpaces": {
            "title": "Include the per-room breakdown (venues)",
            "type": "boolean",
            "description": "Add an eventSpaces array to venue rows: every bookable room with its own name, seated and standing capacity, space types, amenities and photo count. Present on 60.9% of venues in a whole-metro walk. Off by default because it makes the CSV export wide and ragged. Directory venue rows only — real-event credit rows never carry it.",
            "default": false
          },
          "includeDescription": {
            "title": "Include the profile description",
            "type": "boolean",
            "description": "Keep the company's full self-written profile description (85.8% of venues, 75.3% of vendors in a whole-metro walk). It is often several hundred words — turn it off for a compact CSV.",
            "default": true
          },
          "maxItems": {
            "title": "Max results — your cost cap",
            "minimum": 1,
            "type": "integer",
            "description": "How many companies to return, and therefore what the run costs: 100 = $0.40, 1,000 = $4.00, the whole 48,600-company directory = $194.40. Listings arrive 20 per request and each company costs one small extra lookup, so this is the runtime dial too (measured 20-30 companies/second). Rows are charged as they are pushed, so a budget cap stops you on a whole row.",
            "default": 100
          },
          "skip": {
            "title": "Skip (paging across runs)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip this many matching companies before collecting. Results follow PartySlate's own search order, which is stable, so set skip=100 on the next run to continue where a maxItems=100 run stopped instead of re-buying the same leads. Skipped rows are never charged.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel requests. 5 was measured at 24-34 requests/second with zero failures across 3,115 live requests; there is no reason to go higher and PartySlate is a small site.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "OPTIONAL — leave off for a normal run. PartySlate's public API answered 3,115 of 3,115 direct requests with no block and no CAPTCHA, and an Apify datacenter proxy did WORSE (39/40, and 2.7 req/s against 24). It DOES throttle a single IP at high volume, though: measured 2026-08-18, roughly 4,500 requests from one address inside a few minutes returns HTTP 429 with Retry-After 300 for five minutes — in round numbers about 3,000-4,000 companies in one run. The Actor stops politely at that point, keeps and charges for the rows it already has, and tells you the number to put in Skip to continue. Turn this on if you want one uninterrupted very large run, or if you are running from a network PartySlate blocks.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}