{
  "openapi": "3.0.1",
  "info": {
    "title": "Luma Scraper — Events & Organizer Leads (lu.ma)",
    "description": "Scrape Luma (lu.ma / luma.com) events by city, keyword or URL. Rich event data: date, venue geo, price, capacity, spots left, categories and hosts, plus community calendars with social handles as organizer leads. Monitor mode pulls only new events. No login. Export JSON, CSV, Excel.",
    "version": "1.0",
    "x-build-id": "KqapIX1Cyust49c81"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~luma-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~luma-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-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/scrapesage~luma-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-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": {
          "outputType": {
            "title": "What to output",
            "enum": [
              "events",
              "calendars",
              "all"
            ],
            "type": "string",
            "description": "`Events` (default) returns Luma events. `Community calendars` returns the organizers/communities behind events as leads (with social handles). `All` returns events + their community calendars, each row tagged with a `type`.",
            "default": "events"
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Luma curates events by city. Enter city names or Luma slugs, e.g. `San Francisco`, `New York`, `Austin`, `London`, `Singapore` (or slugs like `sf`, `nyc`, `la`). Common names are mapped automatically.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Optional keywords to filter each city's events, e.g. `ai`, `crypto`, `startup`, `design`. Each keyword is combined with every city. Leave empty to get all of a city's events.",
            "items": {
              "type": "string"
            }
          },
          "eventType": {
            "title": "Event type",
            "enum": [
              "any",
              "offline",
              "online"
            ],
            "type": "string",
            "description": "Limit to in-person or online events.",
            "default": "any"
          },
          "dateFrom": {
            "title": "Start date (from)",
            "type": "string",
            "description": "Only events starting on/after this date. Format: YYYY-MM-DD."
          },
          "dateTo": {
            "title": "Start date (to)",
            "type": "string",
            "description": "Only events starting on/before this date. Format: YYYY-MM-DD."
          },
          "onlyFreeEvents": {
            "title": "Only free events",
            "type": "boolean",
            "description": "Return only events with free registration.",
            "default": false
          },
          "eventUrls": {
            "title": "Event URLs",
            "type": "array",
            "description": "Scrape specific Luma events directly. Accepts full URLs (`https://luma.com/abc123`), `lu.ma/abc123`, bare slugs, or event api_ids (`evt-...`).",
            "items": {
              "type": "string"
            }
          },
          "calendarUrls": {
            "title": "Community / calendar URLs",
            "type": "array",
            "description": "Scrape specific Luma communities (calendars) — returns the organizer lead and, optionally, all of its upcoming events. Accepts URLs, slugs, or calendar api_ids (`cal-...`).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Mixed Luma URLs",
            "type": "array",
            "description": "A mixed list of Luma event or calendar URLs — each is auto-detected and routed to the right scraper.",
            "items": {
              "type": "string"
            }
          },
          "enrichEvents": {
            "title": "Enrich events (description, categories, full hosts)",
            "type": "boolean",
            "description": "Open each event for its full detail — description, categories, exact capacity/spots-left, ticket price and full host list (with websites and bios). Adds one fast API call per event. Turn off for a faster run that still includes date, geo, hosts, capacity and the community.",
            "default": true
          },
          "includeCalendarLeads": {
            "title": "Output community/organizer leads",
            "type": "boolean",
            "description": "When output is `All`, also emit one community-calendar lead record per unique organizer behind the events (name, description, social handles, lead score).",
            "default": true
          },
          "includeCalendarEvents": {
            "title": "Also scrape each community's upcoming events",
            "type": "boolean",
            "description": "When scraping calendar URLs (or communities), also pull each community's upcoming events into the dataset.",
            "default": false
          },
          "onlyNewItems": {
            "title": "Monitor mode — only new items",
            "type": "boolean",
            "description": "Output only items that were NOT returned in previous runs. Remembers what it has delivered in a persistent store, so on a schedule each run gives you just the new events. Works alongside Apify Schedules — it does not replace or interfere with the scheduler.",
            "default": false
          },
          "monitorStateKey": {
            "title": "Monitor state key",
            "type": "string",
            "description": "Advanced: name the monitor memory so different searches track their own 'already seen' list. Use a different key per search/schedule to keep them independent.",
            "default": "default"
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of primary records (events, or community calendars in calendar mode) to output (0 = no limit). Keeps test runs cheap and predictable.",
            "default": 200
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of parallel API calls.",
            "default": 6
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Luma's public API is light on anti-bot, so Apify Proxy (datacenter, the default) works well.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}