# Changelog of Meetup Scraper (`filip_cicvarek/meetup-scraper`) Actor

- **URL**: https://apify.com/filip\_cicvarek/meetup-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/filip\_cicvarek/meetup-scraper.md

## Changelog

### 2.0.0

#### Fixed (critical)

- **Resurrected the scraper.** Meetup rotated the persisted-query hash the Actor depended on, so every run had started returning **0 events** (while reporting "success"). The Actor now sends its own GraphQL query document to `gql2` and no longer depends on a rotating hash or hardcoded session cookies.
- **Pagination now works.** Previously only the first page was ever returned; the cursor is now passed correctly, so `maxResults` is honored across pages (`0` = unlimited).
- **International support.** Removed the hardcoded `US/Eastern` timezone. Locations are geocoded robustly (handles non-English city names like Munich→München and disambiguates London/gb vs London/ca by country), so non-US cities and any country work, and `state` is no longer required.

#### Added

- \~20 new fields per event: `endDateTime`, `durationISO`, `timezone`, `eventStatus`, `isOnline`, structured `venue` (incl. `lat`/`lon`), full `group` object with **member count** and **organizer** (name, profile URL), `hosts`, `topics`, `series`, `featuredPhotoUrl`, `feeAccepts`, and **`ratingAverage`/`ratingCount`/`reviewCount`** (Meetup made ratings public in March 2025).
- **Groups mode** (`mode: "groups"`) — scrape community groups with member counts, organizer name + profile, ratings/reviews, category, and real social links (placeholder `http://` entries are filtered out). Great for lead generation.
- **MCP connectors** (`outputConnectors`) — push each run's results into your own tools via Apify MCP connectors, with no credentials stored in the Actor and **no field mapping or LLM**. **Notion**: the Actor creates a database with sensible columns and writes one row per result (set `notionParentPageUrl`; a page open in the URL's side peek wins, and the run log prints where the table was created). **Slack/messaging**: posts a summary or one message per result (set `messageChannel`). Delivery is fully isolated — a connector error never affects the scrape, and upstream tool failures are surfaced in the log with the service's error message.
- **Browse mode** — leave `searchKeyword` empty to list all upcoming events near a location (via Meetup's `recommendedEvents`), matching the site's "Events near you".
- New filters: `eventType` (in-person/online/hybrid), `radius` (distance), `endDateRange`, `minRsvpCount`, and `sortBy` (relevance or soonest-first) for keyword search.
- Direct `lat`/`lon` input to skip geocoding.
- Country is now a searchable dropdown (ISO codes with friendly names) instead of free text.
- Configurable proxy, automatic retries with backoff, and a schema-drift guard that fails loudly instead of silently returning nothing.
- A new "Organizer leads" dataset view, unit tests, and a live smoke test.

#### Notes

- All original 14 fields (including the joined `address` string) are preserved, so existing integrations keep working.
- Proxy is now **off by default** and opt-in (Meetup needs none). Proxy setup is wrapped so it can never crash a run — important under limited-permission run tokens where the SDK's `/users/me` password lookup returns 403.
- Past dates are handled gracefully: a past **start** date is clamped to now (with a warning) since Meetup has no historical events, and a past **end** date warns that the run will be empty instead of silently returning nothing.
