{
  "openapi": "3.0.1",
  "info": {
    "title": "Luma Event Scraper",
    "description": "[💰 $2.5 / 1K] Extract public events from Luma (lu.ma) — titles, dates, hosts, venues with coordinates, ticket prices, sold-out status, categories, and host social handles. Works on event pages, city/place pages, category pages, calendar/community pages, and the global discover feed.",
    "version": "1.0",
    "x-build-id": "PdKSgtOj76j5xirGa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~luma-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-luma-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/solidcode~luma-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-luma-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/solidcode~luma-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-luma-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": {
          "lumaUrls": {
            "title": "Luma URLs",
            "type": "array",
            "description": "Paste one or more Luma URLs. Accepts direct event pages (lu.ma/<event>), calendar or community pages (lu.ma/yc), city or place pages (lu.ma/sf), category pages (lu.ma/tech), the discover feed (lu.ma/discover), and user-profile pages (lu.ma/user/<name>). Mix any types in one list. If sources overlap (e.g. a city page plus a matching search query), each event is returned and billed only once.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Free-text queries to run against Luma's discover feed (e.g. 'AI Tokyo', 'Brooklyn music'). Each query runs independently. Leave empty if you only want to use URLs above. Events that also appear under another source are returned only once.",
            "items": {
              "type": "string"
            }
          },
          "discoverCity": {
            "title": "Restrict Search to a City",
            "type": "string",
            "description": "Optional. When set, every search query above runs scoped to this Luma city (e.g. 'san-francisco', 'nyc', 'london', 'tokyo'). Use the Luma city slug from the URL (lu.ma/<slug>). Leave empty to search globally."
          },
          "category": {
            "title": "Category",
            "enum": [
              "all",
              "ai",
              "tech",
              "crypto",
              "food",
              "arts",
              "climate",
              "fitness",
              "wellness"
            ],
            "type": "string",
            "description": "Restrict discover and search results to a Luma category. 'All' disables the filter. Ignored when a URL already specifies a category.",
            "default": "all"
          },
          "dateFrom": {
            "title": "Earliest event date",
            "type": "string",
            "description": "Only include events starting on or after this date (YYYY-MM-DD). Leave empty for no lower bound."
          },
          "dateTo": {
            "title": "Latest event date",
            "type": "string",
            "description": "Only include events starting on or before this date (YYYY-MM-DD). Leave empty for no upper bound."
          },
          "eventType": {
            "title": "Event type",
            "enum": [
              "all",
              "in_person",
              "virtual"
            ],
            "type": "string",
            "description": "Filter by in-person vs virtual events. Applied after results are fetched (Luma's API does not expose a server-side filter for this).",
            "default": "all"
          },
          "pricing": {
            "title": "Pricing",
            "enum": [
              "all",
              "free",
              "paid"
            ],
            "type": "string",
            "description": "Filter by free vs paid events. Applied after results are fetched (Luma's API does not expose a server-side filter for this).",
            "default": "all"
          },
          "scrapeEventDetails": {
            "title": "Include full event details",
            "type": "boolean",
            "description": "Fetch the full event payload for each result — description, ticket types, sessions, hosts with social handles, and public registration questions. Turn off for faster, lighter runs that return only the listing-level fields. Charged at the same per-result rate either way.",
            "default": true
          },
          "includeFeaturedGuests": {
            "title": "Include featured guests",
            "type": "boolean",
            "description": "When on, each event row carries Luma's public featured-guest list (up to 10 names per event). The full attendee list is never available — it requires the event organizer's login and is not part of Luma's public data.",
            "default": false
          },
          "maxEventsPerUrl": {
            "title": "Maximum events per source",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on events extracted per URL or per search query. Set to 0 for no per-source cap (the total maximum below still applies).",
            "default": 1000
          },
          "maxResults": {
            "title": "Maximum results (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total event rows across every source. Use 0 for no cap — an internal safety limit of 50,000 still applies to prevent runaway pagination. The actor stops requesting new pages once this number is reached but keeps the full final page even if it slightly overshoots. Note: Luma's discover and category feeds are geo-biased and typically top out at a few hundred events per location — use specific cities or search queries to broaden coverage.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}