# Changelog of Event Profiles · Export Attendees & Speakers (`corent1robert/brella-event-profiles`) Actor

- **URL**: https://apify.com/corent1robert/brella-event-profiles/changelog.md
- **Full Actor documentation**: https://apify.com/corent1robert/brella-event-profiles.md

## Changelog

All notable changes to this Actor are documented in this file.

### \[2.1] - 2026-08-27

#### Changed

- Store Try: missing `BRELLA_*` secrets no longer fail the run — warning + 0 rows + exit 0 (Try cannot supply maintainer tokens).
- Prefill / `exampleRunInput` `maxResults` 5.

### \[2.0.11] - 2026-03

#### Changed

- **Brella attendees POST:** Request headers aligned with the web app (`cache-control: no-cache`, `include-extra-schedule-data: true`). Body stays on **`tab: "attendees"`** (full directory), not `matches` / `show_only_best_matches` from the matchmaking UI.

### \[2.0.10] - 2026-03

#### Changed

- **`.actor/actor.json`:** Declared **START Summit** Brella secrets (`BRELLA_*_STARTSUMMIT` → `@brellaAccessTokenStartsummit`, `@brellaClientStartsummit`, `@brellaUidStartsummit`) alongside ChangeNOW so cloud runs with `"event": "startsummit"` resolve credentials like the other preset. Create those three secrets in the Actor settings if missing.

### \[2.0.9] - 2026-03

#### Changed

- **Store & docs copy:** Title, description, and README now align with **Brella** as an **event platform** (schedules, networking, meetings) while staying clear this Actor is a **third-party export** to CSV/Dataset — not an official Brella product. Input/output schema titles and short descriptions updated for the same tone.

### \[2.0.8] - 2026-03

#### Changed

- **`exportOptions`:** Restored **`default": ["complete_profiles"]`** alongside **`prefill`** — without `default`, the Console JSON preview often omitted `exportOptions` even though `prefill` was set. `mode` / `event` stay prefill-only (no `default`) so the sample still shows those two explicitly.

### \[2.0.7] - 2026-03

#### Changed

- **Input schema:** Removed **`default`** on `mode`, `event`, and `exportOptions` (they were collapsing the JSON sample to almost only `exportOptions` in the Console). Replaced with **`prefill`** + **`example`** so the form still opens on Attendees / ChangeNOW / complete profiles while the **JSON sample** can list all three. Runtime fallbacks remain in code (`main.ts`, `parseExportInput`).

### \[2.0.6] - 2026-03

#### Changed

- **Input schema copy** — Shorter, clearer root `description` and hidden-field text (no outdated “5 people + prefilled JSON” wording).

### \[2.0.5] - 2026-03

#### Fixed

- **`exportOptions` default:** `prefill` does not apply to the actual run input — replaced with **`default": ["complete_profiles"]`** so Console/API merges **complete profiles** when users only pick mode + event. **`parseExportInput`:** missing `exportOptions` (e.g. local `INPUT.json`) defaults to the same.

### \[2.0.4] - 2026-03

#### Changed

- **Input schema / sample JSON:** Removed **`default`** from hidden fields (`detailConcurrency`, `detailBatchDelayMs`) so the Console JSON sample no longer shows those unless set. **`pageSize`** is not part of the schema (removed earlier).
- **Prefill (UI only):** `maxResults` **5**, `exportOptions` **`["complete_profiles"]`** — small enriched test run; omit both for a full export. Root `input.json` matches.
- **`exportOptions` schema:** Apify does not allow `items.enum` when `editor` is `hidden` — `items` is only `{ "type": "string" }`. Allowed values stay documented in README / code (`parseExportInput`).

### \[2.0.3] - 2026-03

#### Changed

- **`exportOptions` hidden from Console UI** — only **Mode** and **Event** remain on the form. Filters / complete profiles: JSON input or API (see README).

### \[2.0.2] - 2026-03

#### Changed

- **Removed `pageSize` from input** — list calls always use the Brella API maximum (100 rows per page) and paginate until the full list is loaded. Use optional `maxResults` only to cap rows (e.g. tests). Default export = **everyone** (no cap).

### \[2.0.1] - 2026-03

#### Changed

- **Input UI:** Replaced separate checkboxes with a single **multiselect** (`exportOptions`, Apify `type: array` + `editor: select`) for all filters and **Complete profiles**.

### \[2.0] - 2026-03

#### Added

- **Export options** — one **multiselect** (`exportOptions`): row filters (email, website, LinkedIn, company, photo, intro) plus optional **Complete profiles**. Filters apply **after** the list load and **before** the profile step. Legacy JSON booleans and `attendeeData` / `completeProfiles` still work.

#### Changed

- **Default** is **quick export** (no options selected). Pick **Complete profiles** in the multiselect when you need the richest file.
- **Default run timeout** in `actor.json`: **3600s** (was 7200s).
- **Speakers:** invalid filter combo (only email/website/LinkedIn) → clear error; those fields are not in speaker rows.

### \[1.9] - 2026-03

#### Changed

- **Run status messages** (Apify UI) — English only: `List · pages…`, `Enrich ·…`, `rows` (replacing French `Liste`, `Enrichissement`, `lignes`).
- **SEO / marketplace copy** — `actor.json` title and description, input/output schema titles and descriptions, README H1 and intro tuned for Brella.io, networking event, and export keywords.
- **README** — Intro reframed for non-technical readers (what Brella is, spreadsheet download). New **Supported events** table (ChangeNOW / START Summit, input values, Brella slugs). **Who it’s for** includes marketing.
- **Store title** — Emphasizes CSV/Excel and participant lists for marketplace clarity.
- **Copy (store + README + input/output schema)** — User-benefit wording first; technical / API detail moved to **Developers** only where needed.

### \[1.8] - 2026-03

#### Performance

- **Dataset:** `pushData` receives **arrays** (list-only attendees + enrich batches + speakers) — fewer round trips than per-row pushes.
- **Speakers:** pages fetched in **parallel waves** (same strategy as attendee list), not strictly sequential.
- **List waves:** batch size **20** pages, inter-wave delay **0** ms (was 12 / 25 ms).
- **Detail phase:** default concurrency **120**, cap **300** (was 80 / 200).

### \[1.7] - 2026-03

#### Changed

- **`.actor/actor.json`** — Only **ChangeNOW** secrets are declared for `apify push`. START Summit env vars must be added in the Apify Console when needed, or use `apify push --allow-missing-secrets` if you restore both presets in `actor.json`.

### \[1.6] - 2026-03

#### Performance

- **Default detail concurrency** raised 40 → **80**; **no delay** between detail batches by default (was 50 ms).
- **List fetch:** batch size 10 → **12** pages per wave; inter-wave delay 50 → **25** ms.
- **Dataset push:** detail phase uses **parallel** `pushData` per batch.
- **Input `attendeeData`:** `full` (default) or **`list`** — skips all per-attendee detail GETs (~N requests); use when email/photo from the detail endpoint are not needed (often **~10× faster** on large attendee lists).

#### Technical

- Optional **`detailConcurrency`** (1–200, default 80) and **`detailBatchDelayMs`** (hidden) for tuning if Brella returns 429.

### \[1.5] - 2026-03

#### Changed

- **README** — Full marketplace-style rewrite: why use it, field reference, how to run, configuration, audiences, developers, legal (aligned with Apify Store best practices).

#### Fixed

- **Actor version** — Apify accepts only `MAJOR.MINOR` in `.actor/actor.json` (not `1.4.2`); use `1.5` for this release.

### \[1.4] - 2026-03

#### Changed

- **Input UX** — End users only choose **Mode** (Attendees / Speakers) and **Event** (ChangeNOW / START Summit). Org slug, event slug, and credential segment come from built-in **`EVENT_PRESETS`** in `main.ts`.
- **Secrets** — Runs use suffixed env only: `BRELLA_*_CHANGENOW` and `BRELLA_*_STARTSUMMIT`. Default unsuffixed `BRELLA_*` removed from `actor.json` (no longer used for the two-preset flow).

### \[1.3] - 2026-03

#### Added

- **`segmentId` input** — When set (e.g. `changenow`), credentials are read only from `BRELLA_ACCESS_TOKEN_<SUFFIX>`, `BRELLA_CLIENT_<SUFFIX>`, `BRELLA_UID_<SUFFIX>` (suffix = uppercased, normalized). No fallback to unsuffixed `BRELLA_*`, so multiple Brella sessions can coexist on one Actor without mixing.
- **Startup log** — `credentialEnv` shows which env keys were used; `segmentId` logged when present.

#### Documentation

- README explains that each **uid + client + token** triple is one **Brella session** with access limited to events that login may see; segments separate customers/events.

### \[1.2] - 2026-03

#### Changed

- **Actor identity:** name `brella-event-profiles`, title *Brella Event Profiles*, generic marketplace description (any Brella org/event).
- **Input schema:** `organizationSlug` and `eventSlug` visible in the Console; defaults `changenow` / `ChangeNOW2026`; optional `maxResults` and `pageSize` documented.
- **Code defaults:** same defaults as input schema for local runs without JSON input.
- **README:** shortened, multi-event focused; removed SmartSummit-only wording.
- **package.json:** name aligned with Actor slug.

#### Fixed

- **maxResults** now applies to the first page of attendees (previously only later pages were capped).

#### Note

Renaming the Apify Actor (`startsummit-brella-attendees` → `brella-event-profiles`) creates a **new** store entry when pushed; republish or duplicate settings as needed.

### \[1.1] - 2026-03

#### Added

- **Mode: speakers** — Extract conference speakers via GET /events/{slug}/speakers (in addition to attendees)
- **Environment variables** — Apify secrets: `brellaAccessToken`, `brellaClient`, `brellaUid` (Actor Settings → Environment variables). Credentials can come from input or env.
- **role field** in output — `attendee` or `speaker` to distinguish records

#### Changed

- Input schema: mode dropdown (Attendees / Speakers), optional credentials when using Apify secrets
- Default event: startsummitxhack2026 (SmartSummit Hack 2026)
- README updated with modes table, env vars, speakers mode

### \[1.0] - 2026-03

#### Added

- Extract attendees from Brella events via API
- Session headers authentication (access-token, client, uid)
- POST-based API calls matching Brella web app format
- Full pagination (100 attendees per page)
- Detail enrichment (imageUrl, email from attendee detail endpoint)
- Output: fullName, email, companyName, companyTitle, persona, jobFunction, industry, pitch, interests, linkedin, profileUrl
- CSV export for local runs (semicolon-separated, Excel-compatible)
- Support for SmartSummit Hack 2026 and any Brella event (organizationSlug, eventSlug)

#### Technical

- Parallel list fetching (5 pages per batch)
- Parallel detail enrichment (15 concurrent)
- Dataset push with proper await for Apify cloud
- No line breaks in CSV fields
- TypeScript, Apify SDK, Node 20
