Event Import API

Send a public event link, or a Luma topic / city / calendar page, and get back clean, structured event data as JSON. Deterministic parsing of JSON-LD, Luma __NEXT_DATA__, and Open Graph.

Endpoint

POST https://YOUR-DOMAIN/api/scrape Content-Type: application/json{ "url": "https://lu.ma/sf" }

Or as a quick GET: GET /api/scrape?url=https://lu.ma/sf

What you get back

The response auto-detects whether the link is a single event or a list page.

A single event → mode: "single"

{
  "success": true,
  "mode": "single",
  "event": {
    "name": "Solana Breakpoint 2026",
    "description": "Breakpoint 2026 brings together…",
    "startDate": "2026-11-15",
    "startTime": "16:00",
    "endDate": "2026-11-17",
    "endTime": "19:00",
    "location": "Olympia, Hammersmith Rd, London W14 8UX, UK",
    "imageUrl": "https://images.lumacdn.com/…",
    "sourceUrl": "https://luma.com/breakpoint2026"
  }
}

A topic / city page → mode: "list"

{
  "success": true,
  "mode": "list",
  "sourceUrl": "https://lu.ma/sf",
  "items": [
    {
      "name": "AI Engineer World's Fair",
      "type": "event",
      "startDate": "2026-06-29",
      "startTime": "00:00",
      "location": "Moscone West, 747 Howard St, San Francisco, CA",
      "imageUrl": "https://images.lumacdn.com/…",
      "link": "https://lu.ma/aie-neo-irl"
    }
  ]
}

Fields

FieldNotes
nameEvent or community/series title
descriptionFull event description (list events are enriched from their own page)
startDate / startTimeYYYY-MM-DD / HH:MM (24h, source-local)
locationActual venue address when the host publishes it (street + city + postcode)
imageUrlCover image URL
type (list only)event = a dated event · calendar = a community/series

Pull every event from a topic

Topic pages (e.g. lu.ma/crypto) list communities/series. Add expand to drill into each series and return its actual events. One call, many events.

POST /api/scrape   { "url": "https://lu.ma/crypto", "expand": true }
# or:  GET /api/scrape?url=https://lu.ma/crypto&expand=1

Each returned event is enriched with its full description and address. (Expansion is capped for speed.)

What it can and can't do

SourceHosted APICLI (local)
Luma: events, topic pages (lu.ma/crypto), city pages (lu.ma/sf), calendars, expand
Eventbrite: in-person & online events
Partiful: events
Meetup: events⚠️ blocked*
Ticketmaster: events⚠️ blocked*experimental
Other pages with schema.org Event data

* Meetup and Ticketmaster block cloud/datacenter IPs, so the hosted API times out on them. Use the CLI (it runs on your machine, so those work). Some events only publish a city, not a full street address, until you RSVP: we return whatever the page exposes.

CLI & MCP (for developers)

# CLI: runs locally, all platforms
npx knod-events https://lu.ma/sf --csv
npx knod-events https://lu.ma/crypto --expand
# or install: npm i -g knod-events

# MCP server (Claude, Cursor, …): tool import_event(url, expand)
{ "mcpServers": { "knod-events": { "command": "npx", "args": ["-y", "knod-events-mcp"] } } }

Errors

// HTTP 422
{ "success": false, "error": "Couldn't find event details on that page." }