{
  "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": "VWxjS0z2Rzz3g0TBo"
  },
  "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/superteam), 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 and returns up to 50 best matches, so add several terms (and a city or category) to widen coverage. 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, results are scoped to this Luma city. Luma uses short city handles, not full names: 'sf' (San Francisco), 'nyc' (New York), 'la' (Los Angeles), plus 'london', 'tokyo', 'berlin', 'paris', 'singapore', 'toronto', 'amsterdam', 'sydney', 'mumbai', 'dubai', 'seoul' and more. It is the handle in the city's own Luma address (lu.ma/<handle>). A handle Luma doesn't recognise stops the run with a message instead of returning results for the wrong place. Leave empty to search worldwide."
          },
          "category": {
            "title": "Category",
            "enum": [
              "all",
              "ai",
              "tech",
              "crypto",
              "food",
              "arts",
              "climate",
              "fitness",
              "wellness"
            ],
            "type": "string",
            "description": "Restrict discover, city, and search results to a Luma category — combine it with a city to get, for example, only the AI events in London, or with a search query to narrow it further. 'All' disables the filter. Ignored when a URL already specifies a category."
          },
          "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)."
          },
          "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)."
          },
          "scrapeEventDetails": {
            "title": "Include full event details",
            "type": "boolean",
            "description": "On by default. Fetches the full event payload for each result — description, ticket types, hosts with social handles, and public registration questions. Turn it off for faster, lighter runs that return only the listing-level fields, but then description, ticketTypes and registrationQuestions come back empty. Charged at the same per-result rate either way."
          },
          "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."
          },
          "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)."
          },
          "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: the unfiltered discover feed is location-biased and tops out at around fifty events — set a city, a category, or a search query to broaden coverage. A category run sweeps every region and can return several hundred events."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}