HackathonRadar
Get an API key
APIHackathons and stats

API

Hackathons and stats

Fetch a single hackathon, export a filtered hackathon CSV, and read the stats, trends, geographic and prize pool endpoints

These endpoints read the hackathon database: one hackathon by id, a filtered CSV export, and four market stats endpoints. All of them need an API key. See Authentication and keys.

Fetch one hackathon

GET /api/hackathons/{id} returns one hackathon with its sponsors, organizers and quality score. {id} is either the UUID or the slug from the hackathon's page URL (/database/hackathon/<slug>).

Request
curl https://www.hackathonradar.com/api/hackathons/treeline-hacks \
  -H "Authorization: Bearer $HACKATHONRADAR_API_KEY"
200 response (trimmed)
{
  "id": "6fa487e4-c891-456f-81f1-2a4bedc12967",
  "slug": "treeline-hacks",
  "title": "TreeLine Hacks",
  "start_at": "2026-03-06T16:45:00.000Z",
  "end_at": "2026-03-08T16:45:00.000Z",
  "timezone": "America/Los_Angeles",
  "type": "online",
  "categories": ["AI/ML", "Sustainability"],
  "prize_pool": 5000,
  "prize_currency": "USD",
  "prize_pool_usd": 5000,
  "city": null,
  "country": null,
  "website_url": "https://treelinehacks.example.com",
  "registration_url": "https://treelinehacks.example.com/register",
  "participant_count": 250,
  "student_only": false,
  "data_quality_score": 85,
  "is_deleted": false,
  "sponsors": [{ "id": "...", "name": "Acme Cloud", "domain": "acme.com", "email": null }],
  "organizers": [{ "id": "...", "name": "Treeline Hacks", "email": "team@treelinehacks.example.com", "email_confidence": 0.92 }],
  "quality_score": { "score_total": 55, "confidence": 0.81, "score_version": "v2", "breakdown_json": {}, "reasons_json": [], "computed_at": "..." }
}

An unknown id returns 404 Hackathon not found.

The hackathon object

FieldWhat it holds
id, slugUUID and URL slug. Both work as {id}
titleEvent name
start_at, end_at, timezoneISO 8601 timestamps and the event's time zone, any of which can be null
typeonline, in-person or hybrid
categoriesArray of category tags, or null
prize_pool, prize_currency, prize_pool_usdPrize pool as listed, its currency, and the USD conversion
cash_prizesWhether prizes include cash
venue_name, address, city, country, lat, lngLocation, null for online events
website_url, registration_urlEvent links, usually on the platform the event is hosted on
participant_countRegistered or reported participants, when known
student_only, vibe_code_friendlyBooleans, null when unknown
travel_supportCovered, Partial, Not Covered, Unknown, or null
description, description_html, description_markdown, description_plain_textThe event description in each format we hold
languageLanguage of the listing
data_quality_scoreCompleteness score from 0 to 100
first_seen_at, last_seen_atWhen HackathonRadar first and last saw the listing
featuredWhether the event is a featured listing
audience_profileEstimated audience profile, or null. See Audience profiles
is_deleted, deleted_atWhether the listing has been removed, and when
sponsorsArray of sponsor records: id, name, domain, website_url, logo_url, twitter, linkedin, email, email_confidence
organizersArray of organizer records: id, name, domain, website_url, twitter, linkedin, instagram, image_url, email, email_confidence
quality_scoreThe event's quality score: score_total, confidence, computed_at and supporting detail, or null. See Quality scores

The response can include other fields. Only the fields in this table are supported, so do not build on the rest.

Export hackathons as CSV

There is no JSON list or search endpoint for hackathons. To pull many at once, use GET /api/hackathons/export, which returns a CSV file (hackathons-export-YYYY-MM-DD.csv).

ParameterEffect
searchText match on title, description, venue, city and country
typeonline, in-person or hybrid. Other values are ignored
categoryExact category tag, such as AI/ML
countryExact country name as stored, such as United States
studentOnly=trueStudent-only events
upcoming=true, ongoing=true, active=true, ended=trueDate windows. active means upcoming or ongoing
columnsComma-separated column keys to include
Request
curl "https://www.hackathonradar.com/api/hackathons/export?active=true&type=in-person&country=United%20Kingdom&columns=title,start_at,end_at,city,prize_pool,organizers,primary_organizer_email,website_url" \
  -H "Authorization: Bearer $HACKATHONRADAR_API_KEY" \
  -o hackathons.csv

Column keys: title, description, type, start_at, end_at, duration, participant_count, prize_pool, location, city, country, organizers, primary_organizer_email, categories, sponsors, student_only, cash_prizes, vibe_code_friendly, travel_support, language, timezone, venue_name, address, website_url, first_seen_at, last_seen_at. Columns always come out in this order, whatever order you pass.

CSV values are formatted for reading: dates as DD/MM/YYYY, website_url as the bare domain, prize_pool as 5,000 USD, student_only and cash_prizes as Yes or No, and lists joined with ; .

Stats endpoints

All four are GET requests that return JSON computed across the whole database. The figures refresh about once an hour.

EndpointReturns
/api/statsThe full stats object: counts (upcoming, ongoing, ended, total, newThisWeek), categories, last30Days, prizePool, geographic, timeSeries, categoryAnalytics, participants, dataQuality and generatedAt
/api/stats/trendstimeSeries, categoryAnalytics (top 20 mostPopularCategories and categoriesByPrizePool), basicStats and generatedAt
/api/stats/geographicgeographic: totalCountries, totalCities, hackathonsByCountry, hackathonsByCity (top 50), typeDistribution, topCountries (top 10), plus generatedAt
/api/stats/prize-poolsprizePool (total, average, median and max in USD, totals by format, events with and without prizes) and timeSeries (prizePoolsOverTime, monthlyTrends, weeklyTrends, growthRate), plus generatedAt

On /api/stats/trends and /api/stats/prize-pools, timeRange (week, month, quarter, year or all) sets the window for the time series. It defaults to year on trends and all on prize pools.

Request
curl "https://www.hackathonradar.com/api/stats/trends?timeRange=quarter" \
  -H "Authorization: Bearer $HACKATHONRADAR_API_KEY"

Percentage fields (percentage and growthRate) are already percentages, so 22.4 means 22.4%. Money values are in USD. generatedAt is when the figures were computed, so use it to label charts ("as of ...").