Skip to main content
Curation methodology

How Flock finds and scores events for you

Every event, every match score, every recommendation — where it comes from, how it is calculated, and what it does not claim to know.

Step 1 — supply

How events get into Flock

Flock ingests events from a set of public APIs and an AI-powered scraper, running via scheduled background jobs. Each source is deduplicated by event ID and venue fingerprint before storage — an event listed by two ticketing sites appears once. Source coverage changes as vendors open and close their public APIs: Eventbrite withdrew its public event-search endpoint, so we no longer carry it.

Ingested events are not passed through a platform-level AI quality gate. A cron that would have done that scoring was retired on 2026-08-02 — its sole data source was Eventbrite's public event-search API, which Eventbrite withdrew, so it never scored an event. We would rather say that plainly than describe a filter that is not running. What orders your feed today is the hybrid semantic + keyword search over the ingested inventory, plus your per-user match score.

Organizer-submitted events go through a human review step before publication, regardless of AI score.

Integrity firewall

Feed placement cannot be bought.

Flock earns revenue from a ticket take-rate (5% + $0.45 per ticket). 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.

No pay-for-rank

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.

Credibility-weighted reviews

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.

Named algorithm steward

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.

Versioned methodology

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.

Step 2 — personalization

The 12-factor match engine

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.

Interest alignment
up to 20 pts

Jaccard similarity between your saved interests and the event's categories + vibe tags.

Music genre match
up to 15 pts

Jaccard similarity between your saved music preferences and the event's listed genres.

Friends attending
up to 20 pts

Log-scale count of friends (follows) who have RSVPed. First friend matters most; returns diminish.

Distance
up to 10 pts

Haversine distance from your last-known location to the venue. Exponential decay: 0 km = 10 pts, 20 km+ ≈ 0 pts.

Time convenience
up to 8 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.

Price fit
up to 5 pts

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.

RSVP momentum
up to 5 pts

Current RSVP count relative to event capacity. High fill rate signals social validation.

Venue public rating
up to 5 pts

Community star rating for the venue from past Flock attendees. Venues with no rating receive a neutral score.

Venue friend rating
up to 5 pts

Average rating left by people you follow, weighted above the public rating.

Vibe match
up to 5 pts

Overlap between the event's vibe tags (e.g., 'rooftop', 'artsy', 'lowkey') and your past RSVP patterns.

Category affinity
up to 5 pts

Whether the event category matches categories you have RSVPed to in the past 90 days.

Social proof
up to 4 pts

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.

Confidence and data availability

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.

Step 3 — data

Where the data comes from

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.

Calibrated honesty

What we do not claim

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.

There is currently no platform-level AI 'Flock fit' score. A cron that would have produced one (auto-curate) was retired on 2026-08-02: its only data source was Eventbrite's public event-search API, which Eventbrite withdrew, so it never scored a single event. Discovery ordering today comes from the hybrid semantic + keyword search and your per-user match score — not from an editorial AI gate.

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.

You can always override

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.