{
  "openapi": "3.0.1",
  "info": {
    "title": "Luma Events Scraper: Tech, AI & Crypto Events by City",
    "description": "Scrape Luma (lu.ma / luma.com) events by city, category (AI, tech, crypto...), calendar or event URL: dates, venue, coordinates, ticket prices, guest counts, hosts with public social links, description. Incremental \"only new events\" mode. No login.",
    "version": "0.1",
    "x-build-id": "WXMsddHNbEC0pID8i"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rjmacarthy~luma-events-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rjmacarthy-luma-events-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/rjmacarthy~luma-events-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rjmacarthy-luma-events-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/rjmacarthy~luma-events-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rjmacarthy-luma-events-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": {
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Luma discover cities: the slug from luma.com/discover (e.g. \"london\", \"sf\", \"nyc\", \"berlin\", \"singapore\") or the city name (\"New York\", \"San Francisco\"). Without categories you get the events featured on each city's page (luma.com/london). With categories, the cities set where to look for category events.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Luma discover categories (luma.com/ai, luma.com/crypto, ...). Combine with cities to get, e.g., AI events in London and San Francisco. Luma localises category feeds, so without a city you get events near the location of the run's IP address.",
            "items": {
              "type": "string",
              "enum": [
                "ai",
                "tech",
                "crypto",
                "climate",
                "arts",
                "fitness",
                "wellness",
                "food",
                "books",
                "games",
                "running",
                "family"
              ],
              "enumTitles": [
                "AI",
                "Tech",
                "Crypto",
                "Climate",
                "Arts & Culture",
                "Fitness",
                "Wellness",
                "Food & Drink",
                "Books",
                "Games",
                "Running",
                "Family"
              ]
            }
          },
          "calendarUrls": {
            "title": "Calendar URLs",
            "type": "array",
            "description": "Luma calendars (communities and organisers), e.g. https://luma.com/ls, lu.ma/genai-collective or just the slug \"ls\". All upcoming events of each calendar, including events it lists from other calendars and external sites.",
            "items": {
              "type": "string"
            }
          },
          "eventUrls": {
            "title": "Event URLs",
            "type": "array",
            "description": "Single Luma events, e.g. https://luma.com/abc123xy or https://lu.ma/event/evt-... These are always output with full details; the date and keyword filters do not apply to them.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Only events whose name, description, calendar, hosts, venue, city, tags or categories contain one of these words. Separate several with commas (any of them matches). Case-insensitive; short words such as \"ai\" match whole words only. Leave empty for all events."
          },
          "dateFrom": {
            "title": "Events from",
            "type": "string",
            "description": "Only events that end on or after this date (YYYY-MM-DD, or relative such as \"7 days\"). Empty = from now (upcoming events, including ones in progress)."
          },
          "dateTo": {
            "title": "Events until",
            "type": "string",
            "description": "Only events that start on or before this date (end of that day, UTC). YYYY-MM-DD or relative such as \"30 days\". Empty = no end date."
          },
          "includePastEvents": {
            "title": "Include past events (calendars)",
            "type": "boolean",
            "description": "For calendar URLs, also scrape the calendar's past events (most recent first) after its upcoming ones. Combine with \"Events from\" to limit how far back. Luma's city and category pages only list upcoming events.",
            "default": false
          },
          "includeExternalEvents": {
            "title": "Include external events listed on calendars",
            "type": "boolean",
            "description": "Calendars can list events hosted on other websites. They are output with name, time, place, organiser name, tags and the external link (no tickets, hosts' profiles or description). Turn off to get only events hosted on Luma.",
            "default": true
          },
          "maxEvents": {
            "title": "Max events per source",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many events from each source (each city, each category x city pair and each calendar is one source). 0 = no limit.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Load each event's page data for the plain-text description, ticket types with prices and Luma categories (one extra request per event). Turn off for a faster scrape from list data only (still includes dates, location, price range, hosts, calendar and guest count).",
            "default": true
          },
          "onlyNewEvents": {
            "title": "Only new events (incremental mode)",
            "type": "boolean",
            "description": "Output (and charge) only events this monitor has not output in earlier runs. Schedule the Actor daily to get a feed of newly announced events. The first run outputs everything and becomes the baseline.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of this monitor's memory of already-output events. Use different names for unrelated scheduled tasks; runs with the same name share it.",
            "default": "default"
          },
          "stateStoreName": {
            "title": "State key-value store",
            "type": "string",
            "description": "Named key-value store that keeps the incremental state between runs.",
            "default": "luma-events-scraper-state"
          },
          "maxConcurrency": {
            "title": "Max parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many requests to Luma run at the same time.",
            "default": 3
          },
          "maxRequestsPerSecond": {
            "title": "Max requests per second",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Upper limit on the request rate to Luma. The Actor slows down further by itself if Luma answers HTTP 429.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed normally: Luma's public API answers without a proxy. Enable Apify Proxy if Luma starts answering HTTP 403 or 429 for this run's IP.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}