Every event, every match score, every recommendation — where it comes from, how it is calculated, and what it does not claim to know.
Flock ingests events from 10+ public APIs and an AI-powered scraper, running daily via 30+ scheduled background jobs. Each source is deduplicated by event ID and venue fingerprint before storage — the same event listed on Eventbrite and Ticketmaster appears once.
After ingestion, each event passes through the auto-curate cron (runs daily at 14:00 UTC). Claude Haiku scores each event 0-100 on "Flock fit" — a platform-level signal that combines category relevance, local demand signals, and editorial quality heuristics. Events below the threshold are held in draft; events above it are published to the discovery feed.
Organizer-submitted events go through a human review step before publication, regardless of AI score.
Integrity firewall
Flock earns revenue from a ticket take-rate (3% + $0.30 per sale). That revenue stream is structurally separate from the curation algorithm — an organizer's payment relationship with Flock has zero weight in discovery ranking. The entity that pays us cannot influence the signal we emit about them.
Events cannot buy a higher Flock fit score or a promoted position in the curated feed. The explicitly-labeled Sponsored card product is separate — it cannot touch organic ranking.
Venue ratings are not simple averages. Each review carries a credibility multiplier (0.1×–3.0×) based on attendance history, review volume, and whether the reviewer actually attended the event in question.
Every material change to the curation algorithm has a named human responsible for it. Changes are logged in a public register with a before/after description and a link to the commit.
The curation algorithm is versioned (currently v3.1.0). When scoring weights change materially, the version increments and is disclosed here. Past version specs are preserved in the register.
When you view an event as a signed-in user, Flock runs the EventMatchEngine — a pure TypeScript scoring function with no external model calls. It combines 12 signals into a 0-100 match score using sigmoid calibration. The factors and their maximum point contributions are listed below.
Jaccard similarity between your saved interests and the event's categories + vibe tags.
Jaccard similarity between your saved music preferences and the event's listed genres.
Log-scale count of friends (follows) who have RSVPed. First friend matters most; returns diminish.
Haversine distance from your last-known location to the venue. Exponential decay: 0 km = 10 pts, 20 km+ ≈ 0 pts.
Whether the event start hour falls within your typical active hours (from profile). Evening events (17:00–23:00) get a default boost when no profile data exists.
Event price compared to your average spend (from past purchases). Free events score maximum. No spend history: a flat heuristic based on ticket price tier.
Current RSVP count relative to event capacity. High fill rate signals social validation.
Community star rating for the venue from past Flock attendees. Venues with no rating receive a neutral score.
Average rating left by people you follow, weighted above the public rating.
Overlap between the event's vibe tags (e.g., 'rooftop', 'artsy', 'lowkey') and your past RSVP patterns.
Whether the event category matches categories you have RSVPed to in the past 90 days.
Proportion of your friends who have attended events at this venue before.
The raw factor sum is passed through a sigmoid function (100 / (1 + e^(-0.1 × (x - 50)))) to compress extreme values toward the center. The result is displayed as the circular percentage on the event detail page.
Each score is accompanied by a confidence value (0–1) derived from how many of the 12 factors had real data to work with. A new user with no saved interests, no follows, and no location set will produce a low-confidence score — many factors default to neutral heuristics rather than personalized signals.
The score card on the event page surfaces up to 4 reason chips — the highest-scoring factors where your signal-to-noise ratio exceeded 65%. If your score is based mostly on defaults, few or no chips will appear.
Match score calibration is evaluated daily using a Brier-score framework. The engine compares predicted match quality to actual post-event ratings and adjusts factor weights over a rolling 90-day window. When the Brier score degrades past a threshold, a human review is triggered before the next weight update ships.
Eventbrite API
Public events with structured JSON metadata.
Bandsintown
Concert + live-music listings synced daily.
Ticketmaster
Major venue events, filtered for local relevance.
SeatGeek
Sports, theatre, and large live-event inventory.
Luma
Tech + founder community events.
Meetup
Interest-group gatherings and recurring community events.
Dice
Independent music and arts events.
Posh
Social club and nightlife listings.
Resident Advisor (RA)
Electronic music events.
Setlist.fm
Concert setlist data to surface artist-specific events.
Flock Universal Scraper
Claude Haiku-powered fallback for editorial pages (TimeOut, Thrillist, Do312) when structured APIs are unavailable. Extracts title, date, venue, and category from unstructured HTML.
Organizer submissions
Events posted directly by hosts on Flock via the /host flow. These are human-reviewed before publication.
Flock does not purchase user data from data brokers. All ingested event data is derived from public API agreements or web content covered by each provider's terms of service. Your personal profile data (interests, follows, location) is used only to compute your match scores and is never sold to third parties.
The match score is not a prediction of whether you will enjoy an event. It is a measure of overlap between available signals and your profile at the time of scoring.
The score does not account for who you will meet at an event, the quality of the performance, weather, venue logistics, or any factor not in the data sources above.
Match scores are generated per authenticated user. Unauthenticated users see no score — the engine requires profile data to operate.
The AI curate cron (auto-curate) scores events on a 0-100 'Flock fit' scale using Claude Haiku. That score determines which events are surfaced in the curated feed. It is a platform-level curation signal, separate from the per-user match score on event detail pages.
Scores change as your profile data updates (new RSVPs, new follows, new interests). A score from yesterday may differ from today's score for the same event.
We do not claim the match engine is unbiased. Events with more data (higher RSVP count, venue ratings, genre tags) score more reliably than sparse events. We track override rates and recalibrate the engine regularly.
Every AI recommendation in Flock — curation score, match score, concierge suggestion — has a one-click override path. When you dismiss a recommendation or mark it as "not for me," that signal is recorded as a human override and feeds back into the closed-loop evaluation system. Your corrections improve the engine for everyone.
Questions about how your data is used? trust@flock.city. Algorithm version: v3.1.0. Last updated: June 2026.