-
Notifications
You must be signed in to change notification settings - Fork 0
Data Sources
hailsDotGO does not invent any game data: everything on the site is aggregated from community-maintained sources, cached aggressively, and served from memory. This page lists every external source, what it provides, how often it is fetched, and how the app stays up even when all of them are unreachable.
| Source | Provides | Fetched by | Cadence |
|---|---|---|---|
| PoGoAPI | Base stats, current movesets, fast/charged moves, CP multipliers, shiny availability, shadow list, type effectiveness, Pokemon types | Server | Every 6 hours |
| pokemon-go-api (GitHub Pages) | Current raid bosses (raidboss.json) and Max Battles (maxbattles.json) |
Server | Six scheduled refreshes per day |
| ScrapedDuck | LeekDuck events feed (events.min.json) |
Server | Every 30 minutes |
| LeekDuck event pages | Per-event detail HTML (scraped and sanitized) | Server | Re-fetched when older than 12 hours |
| PokeAPI | Pokemon sprites, species flavor text, genus, cries, form sprites (browser); official localized Pokemon names (server) | Browser and server | On demand; names every 6 hours |
| Open-Meteo | Geocoding plus current weather for the weather boost feature; no API key needed | Server | Cached until the next half-hour boundary |
| PokeMiners / pogo_assets | Mined Pokemon GO assets: which costume codes and shiny art exist, and the sprite images themselves | Build tool (catalog) and server (sprite proxy) | Catalog regenerated on demand; sprites fetched once, cached |
| WatWowMap Game Master | Costume pretty names and the isCostume flag, cross-checked against the mined assets |
Build tool (cmd/synccostumes) |
On demand, when regenerating the catalog |
| Pokemon Showdown | Full trainer sprite library for avatars (all generation groups) | Server (proxied) | Fetched once, cached in memory |
| Dreamstone Mysteries | GBA-style trainer sprites | Bundled in the repo | Never fetched |
| pokeemerald-expansion (RHH) | FRLG-style trainer sprites | Bundled in the repo | Never fetched |
The core game data set comes from ten PoGoAPI endpoints: pokemon_stats, current_pokemon_moves, fast_moves, charged_moves, shiny_pokemon, shadow_pokemon, type_effectiveness, cp_multiplier, pokemon_types, and pokemon_evolutions. They are fetched sequentially with a 400 ms delay between requests to stay polite, every 6 hours, plus once at startup. Each successful response is written to the disk cache. A superadmin can force an immediate refresh from the admin panel, and private API consumers can trigger one via POST /api/refresh (see API Reference).
Localized Pokemon names used to come from PoGoAPI's pokemon_names endpoint, but that endpoint stopped including language data; they now come from PokeAPI (see below). The legacy parser is kept so an old cached pokemon_names.json in any of the historical response shapes still loads.
pogoapi.net/api/v1/pokemon_evolutions.json is a full evolution-family and candy-cost dataset (roughly 1,098 entries) fetched on the same server-side schedule as the rest of PoGoAPI, with an embedded snapshot compiled into the binary as a fallback. It powers the candy-line species identification used by the IV Calculator screenshot OCR: when a Pokemon is nicknamed, the visible candy name plus the evolution family narrows down which species the screenshot shows.
internal/pogodata/fallback/shinies_supplement.json is a small hand-maintained list that fills gaps where PoGoAPI stopped tracking some newer shiny releases (about 21 Pokemon, for example the Scorbunny and Sobble lines, the Honedge line, Mr. Rime, and Ursaluna). It is merged over the upstream shiny data in memory, always wins on conflict, and survives every refresh, so a shiny the upstream feed is missing still shows as available. It is bundled in the repository, never fetched over the network.
Current raid bosses come from https://pokemon-go-api.github.io/pokemon-go-api/api/raidboss.json and Max Battles from .../api/maxbattles.json. The app regroups them under its own tier keys: raids use 1, 3, 5, and 6 (Mega), with the shadow tiers folded into their numeric tier and a Shadow prefix added to the name; Max Battles use tiers 1 to 3. Each boss carries its image, types, shiny availability, and normal plus weather-boosted CP ranges.
Both endpoints refresh on a fixed schedule in Mountain Time (DST-aware): 12:01 AM, 4:00 AM, 8:00 AM, 12:01 PM, 4:00 PM, and 8:00 PM, matching when raid rotations actually change. They are also fetched once at startup. These bosses power the Raids and Counters page and define which bosses can be queued in the Raid Finder.
The Events page is driven by ScrapedDuck's events.min.json, a machine-readable export of LeekDuck's event calendar, fetched every 30 minutes (ScrapedDuck asks for at least 5 minutes between fetches, so this is comfortably polite).
For the event detail modal, the server scrapes each active event's LeekDuck page directly:
- Only
httpslinks on theleekduck.comhost are ever fetched. - Requests are spaced 1500 ms apart and a fetch pass skips events that already ended.
- The page's main content block is extracted, navigation, ads, scripts, and the author box are stripped, links are absolutized and forced to
target="_blank" rel="noopener nofollow", and the result is sanitized with bluemonday (UGC policy plusclassattributes, https-only URLs) before storage. - A scraped page is kept for up to 12 hours before re-fetching; failures keep the previous copy, and details for events that leave the feed are evicted.
- The whole detail cache persists to disk (
event_details.jsonin the cache directory).
PokeAPI serves two roles. Client-side, Pokemon sprites (including shiny and special forms), species flavor text, genus lines, and cries are fetched by the browser on demand for the DPS Calculator, Shiny Tracking, and profile features; the server also builds favorite-Pokemon sprite URLs from the PokeAPI sprites repository on GitHub for the Trainer Directory.
Server-side, the official localized Pokemon names come from PokeAPI's pokemon_species_names.csv (the official species names from the main-series games). The server fetches it at startup and every 6 hours, keeps the French, German, Spanish, and Japanese rows, converts them to JSON keyed by dex number, and caches the result as pokemon_names.json in the cache directory. These names flow into the game data payload and localize Pokemon names across the frontend via the shared pokeName() helper.
The weather boost feature resolves a user's saved city to coordinates with Open-Meteo's geocoding API (results cached indefinitely, since cities do not move), then reads the current WMO weather code and wind speed from the forecast API. The code is mapped to an in-game weather condition, with wind of 36 km/h or more overriding clear-sky conditions as Windy. Results are cached per city until the next half-hour boundary, matching when in-game weather changes. No API key is required. See Accounts and Roles for the user-facing behavior.
-
Pokemon Showdown: the full trainer sprite library used for avatars (roughly 1,450 sprites across every generation group, Let's Go, Masters EX, and Pokemon GO, including Team GO Rocket and team leaders) is proxied through
GET /api/trainer-sprite/{slug}so browsers never hit Showdown directly. Each sprite is fetched once, capped at 64 KB, cached in an in-processsync.Map, and served withCache-Control: public, max-age=2592000, immutable. The avatar picker supports keyword search by type, role, gender, generation, region, and Pokemon GO faction. -
Dreamstone Mysteries: GBA-style trainer sprites from the open-source pokeemerald ROM hack Pokemon Dreamstone Mysteries are bundled in the repository under
static/sprites/dreamstone/and served as ordinary static files. -
pokeemerald-expansion (Rom Hacking Hideout): FRLG-style trainer sprites from the open-source pokeemerald-expansion ROM hack are bundled in the repository under
static/sprites/pex/and served as ordinary static files.
Costume sprites and the list of which Pokemon can wear which costume come from mined Pokemon GO assets, not from PokeAPI. The build-time tool cmd/synccostumes (make costumes) reads the PokeMiners/pogo_assets tree, where the filename grammar itself is the data: the presence of a pm{dex}.{code}.s.icon.png file proves both that a species can wear a costume and that its shiny art exists. The WatWowMap Game Master supplies the pretty names and an isCostume flag, cross-checked against the mined assets to catch codes whose internal name is misleading. The tool writes internal/costumes/catalog.json, which is compiled into the binary; see Building and Development for the regeneration workflow and Shiny Tracking for how the catalog drives the picker.
At runtime the sprite images are not hotlinked. Each is pulled from the mined-asset CDN exactly once by the proxy at GET /api/costume-sprite/{file}, cached, and re-served immutably (the origin URL is pinned to an asset commit), so browsing the shiny dex never sends a per-costume request to a third party.
The app survives every source being down:
-
Embedded fallback: baseline JSON for the core PoGoAPI data sets is compiled into the binary from
internal/pogodata/fallback/, so a fresh install boots with working data and no network at all. -
Disk cache: every successful fetch is written to the cache directory (
CACHE_DIR, default./cache); at startup anything on disk overlays the embedded fallback. - Network: background refreshers then overlay live data as it arrives. A failed refresh keeps the last good payload.
Public consumers read the same in-memory store through the endpoints in the API Reference, which add a 5-minute browser cache on top.
hailsDotGO exists because of the people maintaining these projects: PoGoAPI, pokemon-go-api, ScrapedDuck, LeekDuck, PokeAPI, Open-Meteo, PokeMiners, WatWowMap, Pokemon Showdown, Pokemon Dreamstone Mysteries, and pokeemerald-expansion (Rom Hacking Hideout). The in-app credits page (https://pogo.hails.live/credits) carries the canonical attribution list, split by how each source is used. If you operate one of these sources and have concerns about how your data is used, please open an issue on the repository.
Repository | Live site | hailsDotGO is a fan-made project, not affiliated with, endorsed by, or connected to Niantic or The Pokémon Company. Game data comes from community sources credited on the Data Sources page.
Start Here
Features
- Raids and Counters
- DPS Calculator
- IV Calculator
- PvP IV Ranker
- Events
- Shiny Tracking
- Trainer Directory
- Raid Finder
- Social Features
- Trust and Awards
- Bug Reports
- Player Reports
- Store
- Accounts and Roles
- Admin Guide
Self-Hosting
Development
Translations