Methods
Version 0.12 · updated 7 October 2026
This page states exactly how each number on Wildlife Network is produced, and where it can mislead. If you plan to use these measures in research, read the known limits first. The code that computes everything is public and linked from each section.
1. Data
A detection is one record that a species was identified at a place and time, by a classifier or a person. Wildlife Network currently holds three kinds:
- Acoustic detections from BirdWeather community stations: birds, frogs, insects and some mammals identified by BirdNET, and bats identified by BirdWeather's ultrasonic classifier. This is the large majority of the data. Detections only: soundscapes and recording links are never taken, at BirdWeather's request. Paused from 2 to 6 October 2026 while terms were discussed.
- Published observations through GBIF, limited to records their publishers released under CC0 or CC BY 4.0 (mostly national recording schemes such as Artportalen, the Norwegian Species Observation Service and Arter.dk). Live records are those GBIF indexed in the last days; the weekly history is counted straight from GBIF per cell and week, and includes iNaturalist's licensed records. Each dataset is cited by DOI in the credits.
- Community observations from iNaturalist, limited to CC0 and CC BY records.
- Device detections pushed by contributors running wdx-agent on BirdNET-Pi, BirdNET-Go or camera traps.
Detections are not stored one by one for long. They are counted into rollups: the number of detections per species, per 5 degree latitude and longitude cell, per day and per week. A 5 degree cell is roughly 550 km north to south. All measures below are computed from these rollups. The dots on the live map are a sample only (the 500 newest high confidence detections every five minutes, kept for three hours; bats are kept for a day) and are not used for any measure.
Code: rollups, connectors
2. Correcting for observation effort
Raw counts mostly reflect where and how much people are listening. A cell with two hundred stations produces far more detections than a cell with two, and a new station looks like a sudden arrival of every species it hears. Daily detections per cell differ by more than a factor of a hundred across the network.
Wildlife Network therefore never compares raw counts between places or periods. It uses relative frequency: a species' share of all detections of all species in the same cell and period.
share(species, cell, period) = detections of the species ÷ detections of all species
The denominator is the effort of that cell and period. A cell and period only counts as observed if effort reaches a minimum: 200 detections for a day, 1,000 for a week. Below that, the cell is treated as not watched and is left out, instead of being read as an absence.
This is the same idea as reporting frequency on checklists in citizen science. It removes the effect of station numbers and uptime to first order. It does not make detections equal to animals, see the limits below.
Code: effort tables, thresholds
Classes: birds, bats, frogs, insects, mammals, marine
Effort is corrected within a class. Each species belongs to one of birds, bats, amphibians, insects or mammals (as labelled by BirdWeather), and its share is taken of the detections of that class only.
share(bat species, cell, period) = detections of the species ÷ detections of all bats
This matters most for bats. Bat calls are ultrasonic and are only recorded by stations with an ultrasonic microphone, about 800 of some 25,000. A bat's share of all detections would mostly measure how many of the local stations can hear bats. Measured against other bats, it describes the bat community at the stations that can.
Classes other than birds have far fewer sensors and detections, so their minimums are lower: a cell counts as observed with 30 detections of that class in a day or 150 in a week, and count thresholds in the measures below are a fifth of those for birds. Results for these classes rest on little data and should be read as early signals.
Marine is its own class (from version 0.12): OBIS records of marine taxa, Orcasound hydrophone detections and Acartia sightings. They are compared only with other marine records, never with mammals heard by land stations, because surveying the sea is a different kind of effort. Seabirds from OBIS stay in the bird class. Orcasound and Acartia records, whose licence is not yet confirmed, are kept out of every measure until it is. Killer whale records are shown 24 hours late, see privacy and the README.
Many bat calls cannot be identified to species and are reported at a higher level: "Bats" (order), "Vesper Bats" (family) or a genus such as Myotis. These count toward bat effort, and can be looked up, but are left out of the movement lists and arrival dates, which are for species only.
3. Measures
Relative frequency index
Shown on each species panel and in the weekly playback, per 1,000 detections.
index = 1000 × Σ detections of the species ÷ Σ detections of all species, over the species' range cells
The range is the set of cells where the species was detected at least once in the window (30 days for the daily series, the past year for the weekly series). Only observed cells contribute.
Range centre
The latitude and longitude around which the species is concentrated, weighted by share and not by count.
centre latitude = Σ share(cell) × latitude(cell) ÷ Σ share(cell)
Cell positions are cell midpoints. Two versions are used. On the species panel, the daily centre and the "recent movement" sentence use all observed cells worldwide, which suits a migrant that crosses continents but makes the centre of a species living on several continents a blend of them. The Moving list, the yearly span and the playback track are computed per continent (six coarse regions split by longitude and latitude), so those never mix populations on different continents.
Moving
The shift of the range centre within one continent, between the last 3 complete days and days 8 to 10 before today. Only cells observed in both periods are used, so a station going online or offline cannot move the centre. A cell contributes only if the species has at least 5 detections there in the period. A species is listed if it has at least 300 detections and 3 contributing cells in each period, and the shift is at least 1 degree of latitude (about 111 km).
Surging and fading
The species' global share of detections yesterday, divided by its mean share over the 7 days before.
ratio = share(yesterday) ÷ mean share(previous 7 days)
Listed species have at least 100 detections yesterday, a 7 day mean of at least 100, and at least 5 days of baseline.
New arrivals
A species with at least 20 detections in a cell over the last 2 days, and none in that cell for the 12 days before. The cell must have been observed on at least 8 of those 12 days. Without that last condition, most "arrivals" turn out to be new stations.
Arrival dates
For each species and cell, from the weekly relative frequency over the past year: the arrival week is the first week the species reaches a tenth of its seasonal peak, after at least 6 consecutive observed weeks below that level, and stays there the following week. The peak week is the highest week of that season, and the departure week is the last week above the threshold before the next 6 week absence, when the data reaches that far. A species and cell qualifies with at least 26 observed weeks, 200 detections and 30 detections in its peak week; the cell must have been observed in the week before the arrival, so an outage cannot look like one. Residents, which have no 6 week absence, get no arrival date. The species panel shows the median arrival week per 5 degree latitude band. Download: /api/v1/arrivals?species=…&format=csv.
Range check. Sound classifiers sometimes mistake one bird for another again and again at the same station, which can look like a season. So a bird is left out of a cell's arrival dates when GBIF, counting records under every licence since 2000 in that cell and the eight around it, has almost never recorded it there: fewer than 1 in a million of the area's bird records. This only applies where GBIF holds at least 1 million bird records for the area, because in thinly surveyed places absence from GBIF says little. Names GBIF cannot match are never left out. Classifier labels follow an older bird taxonomy, so a bird also counts as recorded when eBird's data on GBIF has it under its current name: a new genus with the same species name (Least Bittern is now Botaurus exilis), or one of the species it was split into (American Barn Owl, Tyto furcata). Only counts are read from GBIF, no records are copied, and each area is checked again every 180 days. Example: around Boston, GBIF has 99 Eurasian Curlew records among 391 million bird records, so recordings of it there are treated as misidentifications, while Long-eared Owl (about 10,000 records) is kept.
These dates were compared with independent human observations: see the validation. In short, they agree within one week for 70 percent of arrivals, run about one week late, and fail for species that are quiet on arrival and for residents whose singing season starts.
Change squares on the map
When a species is selected, each cell is coloured by the change in share between the last 3 days and days 8 to 14 before today: (recent − earlier) ÷ (recent + earlier), from −1 (gone) through 0 (unchanged) to +1 (new). Cells not observed enough in either period are not drawn.
Weekly movement playback
One frame per week for up to a year. Cells are shaded by the species' share that week, on a scale fixed across the whole year so that weeks are comparable. The white track joins the weekly range centres for each continent that holds at least 10 percent of the year's detections.
Weather
Daily maximum and minimum temperature, precipitation and wind from the ERA5 reanalysis (Open-Meteo), taken at the species' range centre for that day, rounded to 1 degree. The correlation shown is Pearson's r between the daily index and daily maximum temperature over the window.
In words
The short text on each species panel, and "This week in words" on the map, are written by fixed rules from the numbers on this page. No sentence is free text: each one appears only when its condition is met, and says nothing otherwise. (The Ask box is different and is described below.)
- Recent movement. The mean range centre of the last 3 days against the first 3 days of the window. Reported as a move when the difference is at least 2 degrees of latitude, with the distance at 111 km per degree. Written only when the species averages at least 50 detections a day (10 for classes other than birds) at both ends of the window, so a handful of stray detections cannot produce a move. The temperature change is added when daytime highs at the centre differ by 2°C or more.
- First heard where highs are around X°C. For up to 50 of the species' best sampled cells with an arrival date, the mean daily maximum temperature at the cell centre during the arrival week (ERA5 via Open-Meteo). The sentence gives the median and the middle half across cells, from at least 5 cells. If that middle half is within 6°C across 15 degrees of latitude or more, it adds that timing follows temperature; if it is wider than 10°C, that temperature alone does not explain it.
- The yearly span. The lowest and highest weekly range centre in the continent with most detections, using only weeks when the species reaches a tenth of its peak week, so stray detections out of season are ignored. Needs 8 such weeks and a span of 8 degrees or more.
- Rain and wind. The mean relative frequency on days with 5 mm of rain or more against days with under 1 mm, and on days with gusts of 30 km/h or more against days under 20 km/h, at the range centre. Needs 3 days in each group and a difference of 15 percent or more.
- This week in words. Counts within the listed species only (at most 12 per list): how many of a continent's fastest movers head the same way (with three or more listed; with one or two, the clearest mover is named with its 95% interval), and whether one class makes up at least half of the biggest drops or surges. Only movers whose interval excludes no change are listed.
Cautions. Rain and wind reduce what a microphone picks up, so fewer detections in bad weather is partly the instrument and not the animal; the text says so whenever it reports them. The temperature at first hearing inherits every limit of the arrival dates: for a species that is quiet when it arrives it will read too warm (Ruby-throated Hummingbird is shown as 28°C), and for a resident it describes when singing starts. These are descriptions of what happened together, not evidence that weather caused the movement.
Ask
The Ask box answers a question in plain language. It is the only part of the site written by an AI language model, and it is built so that the model cannot bring in facts of its own.
- Four lookups, nothing else. The model can search for a species, read one species' summary and figures, read this week's changes, and list what is detected near a place. Each lookup reads the same public API as the map. It is instructed to state no number, date or place that a lookup did not return.
- Geography is the one exception. It may turn a place name into coordinates and name the region a set of coordinates falls in. That can be wrong, especially near borders.
- It can still be wrong. A language model can misread a figure, overstate a pattern or answer a slightly different question. Every answer lists which lookups it used and links the species, so the numbers can be checked on the species panel.
- What is kept. The question, the answer and a scrambled form of the visitor's address, for 30 days, to limit abuse and to review answer quality. The question is sent to the model provider (Google's Gemini API on this site). On its free tier, Google may use what is sent to improve its products, so do not put personal information in a question.
- Limits. Eight questions an hour per visitor, a daily total, and identical questions are answered from a 6 hour cache.
Code: insights, species, movement
Heard versus seen
For one species, the panel compares acoustic detections (BirdWeather) with human records (GBIF) over the same cells and weeks: a cell-week is used only when recordings reach the usual weekly minimum (1,000 bird detections) and sightings reach 100 bird records (20 and 150 for other classes). Each line is the species' share of its own source's records, per 1,000, in the continent where both sources record it most, and each is scaled to its own peak, because the two sources count very different things. Only the shape is compared.
- Agreement is the correlation of the two weekly series: 0.7 or more reads "rise and fall together", 0.4 to 0.7 "broadly agree", below 0.4 "tell different stories".
- Lead or lag: the series are shifted by up to four weeks either way; a shift is reported only if it raises the correlation by at least 0.05 and to at least 0.5.
- Arrival in each source uses the same rule as the arrival dates, applied to that source alone.
- Needs at least 8 shared weeks. Shown on the site only: BirdWeather data is not redistributed.
Coverage
The coverage layer on the map marks each 5 degree cell by who watches it well enough to use, averaged over four weeks ending two weeks ago (human records reach GBIF a week or two late): recordings at 1,000 or more bird detections a week, sightings at 100 or more bird records a week, both, or too thin to use. Check it before drawing conclusions about a region. Available as /api/v1/coverage.
Uncertainty
Every measure that drives a list or a sentence carries an interval from resampling. The generators are seeded, so the same data always gives the same interval. Code: src/lib/uncertainty.ts and src/lib/insightsCi.ts.
- Range shift (Moving). The cells behind each period's range centre are resampled with replacement, 400 times, and the shift recomputed; the 95% interval is the middle 95% of those shifts. A species is listed only when the interval excludes zero.
- Surging and fading. The watched cells of the species' class are resampled 400 times (the same cells on every day), and the ratio of yesterday's share to the 7-day share recomputed. Listed only when the 95% interval excludes 1.
- Arrival weeks. Each weekly count is redrawn 40 times with that count as its mean and the series' own overdispersion (how much its weekly counts scatter around a 3-week moving average beyond Poisson noise, mostly because stations come and go), and the arrival detected again. The 90% interval is reported (weekly steps make 95% intervals mostly the whole window), with the share of redraws that found a season at all; below 0.5, treat the arrival as weak. The arrival table shows the typical half-width as ±weeks.
- Heard versus seen. The correlation's 95% interval comes from resampling blocks of 4 weeks (400 times), which keeps the series' week-to-week dependence; a plain formula would make it look too certain.
- Not yet covered: the 30-day sentences in the species panel and the range centre shown on the daily chart.
These intervals capture sampling noise among cells and in counts. They do not capture misidentification by the classifier, or bias from where stations and observers are, which can be larger.
4. A worked check
Wilson's Warbler (Cardellina pusilla) breeds across boreal Canada and Alaska and winters from Mexico to Panama. Its weekly range centre in North America, as computed here on 1 October 2026:
| Week of | Range centre | Index per 1,000 |
|---|---|---|
| 27 Jul | 52.8° N | 0.07 |
| 10 Aug | 45.2° N | 0.11 |
| 24 Aug | 45.0° N | 0.17 |
| 7 Sep | 42.8° N | 0.24 |
| 14 Sep | 39.3° N | 0.19 |
| 21 Sep | 29.7° N | 0.14 |
The southward passage and its timing match what is known for this species. This is one example chosen because the answer is known. The systematic test is on the validation page: 204 arrival dates across 82 species compared with iNaturalist, including the cases where Wildlife Network is wrong. A comparison with eBird and BirdCast products is still to do.
5. Known limits
- Detections are not animals. One loud bird near a microphone can produce hundreds of detections. Shares describe how often a species is recorded, not how many individuals there are. Do not read the index as abundance.
- Classifier errors. Acoustic detections are unreviewed machine identifications. Species with similar calls are confused, and errors are not random: they cluster by region and season. Example: on the day this page was written, Whimbrel showed a 20 degree northward shift in North America in autumn, which is not credible and most likely reflects misidentification in a few cells. Treat any single species result as a lead to check, not a finding.
- Where the microphones are. Stations are concentrated in Europe, North America and Australasia, near where people live. Large parts of Africa, Asia and South America have little or no coverage, and a range centre can only move among cells that are watched.
- Shares are relative. If another species becomes much more vocal, every other share in that cell falls, even if nothing else changed. Seasonal changes in singing (birds call more in spring) change detection rates without any movement.
- Coarse cells. At 5 degrees, movements shorter than a few hundred kilometres are invisible, and a range centre is a summary, not a route.
- Thresholds are judgement calls. The minimums on this page were chosen to suppress obvious noise, not derived from a model. They are published so they can be challenged.
- Bats are harder than birds. About two thirds of bat detections are identified only to genus, family or order. Species level bat identification from calls is uncertain even for experts, coverage is limited to a few dozen cells, and bat detection scores are on a different scale from bird scores. Nothing about bats has been validated yet. For temperate bats, a seasonal "arrival" is likely emergence from hibernation, not migration.
- Acoustic onset is not always arrival. For a resident species the first sustained detections mark the start of singing, not movement. For species that are quiet when they arrive (hummingbirds are the clearest case) the acoustic arrival date can be two to three months late.
- Uncertainty covers sampling noise only. Intervals (see Uncertainty) do not include classifier errors or where sensors and observers happen to be.
- Short history. Daily rollups cover four weeks; weekly rollups go back up to a year but with fewer stations in earlier months.
- Weather is a single point. Conditions at the range centre do not describe what a migrating bird experienced along its way, and a correlation over a few weeks is not evidence of cause.
- Mixed sources. Acoustic detections and human observations are counted together in the main measures, where recordings dominate (about 3 billion bird detections a year against 8 million records). They are kept apart only in heard versus seen, coverage and the open data release.
6. Using and citing
Every measure is available from the open API, for example /api/v1/insights, /api/v1/species/Cardellina pusilla and /api/v1/species/Cardellina pusilla/movement. Responses include the methods version that produced them. Please cite the underlying sources as well: BirdWeather and its station owners, iNaturalist observers, and Open-Meteo.
Suggested citation: Rajiah, A. (2026). Wildlife Network: an open map of wildlife movement from community sensors. Methods version 0.12. https://wlnw.org/methods
Found a result that is wrong for a species you know? That is the most useful report we can get. Please open a "misleading insight" issue.
Open data. Weekly records, observation effort and arrival dates built from openly licensed GBIF records are published as versioned, citable files: see Open data. BirdWeather-derived figures are not part of the releases.
7. Changes
- 0.12 (20 October 2026): a marine class for OBIS, Orcasound and Acartia records, corrected only against other marine records. Human sightings carry no confidence score and count as one record each, like iNaturalist and GBIF records.
- 0.11 (7 October 2026): range check for arrival dates: birds that GBIF has almost never recorded around a well surveyed cell no longer get an arrival date there from recordings.
- 0.10 (7 October 2026): confidence intervals from resampling for range shifts, surging and fading, arrival weeks and heard versus seen; Moving and Surging lists show only changes whose 95% interval excludes no change.
- 0.9 (6 October 2026): heard versus seen (recordings against human records in the same cells and weeks), a coverage layer, per-source effort, and the first open data release.
- 0.8 (6 October 2026): BirdWeather resumed, detections only (no soundscape links), after BirdWeather confirmed that detections are fine. Its held history was restored, so measures cover both sources again.
- 0.7 (3 October 2026): BirdWeather paused at their request. GBIF added as a source (CC0 and CC BY records only); weekly history for GBIF and iNaturalist now comes from GBIF's own counts per cell and week rather than from the live window. Thresholds unchanged, so with far fewer detections most cells are "not watched". Two lists were added to the map panel: "Latest arrivals" (each species' most recent arrival week in the last 120 days, from the arrival dates above) and "Most recorded" (raw record counts over the latest four weeks with data, not effort corrected). GBIF publishes with a delay of one to two weeks, so the day-by-day measures are mostly empty for now.
- 0.6 (2 October 2026): Ask, a question box answered by a language model restricted to four lookups over the site's own data.
- 0.5 (2 October 2026): text summaries written by fixed rules, including the temperature at which a species is first heard and its yearly span.
- 0.4 (1 October 2026): taxon classes. Bats, amphibians, insects and mammals are labelled and effort corrected within their own class; higher level identifications are excluded from species measures.
- 0.3 (1 October 2026): arrival, peak and departure weeks per species and cell, with a first validation against iNaturalist.
- 0.2 (1 October 2026): effort correction. All measures use share of detections; range centres use only cells observed in both periods; arrivals require a watched cell.
- 0.1 (1 October 2026): first release, raw counts. Superseded because raw counts track station numbers.
Made by Arun Rajiah. Code and this page are open: github.com/wlnw-org/wildnetwork. Free, no ads; you can support it on GitHub Sponsors.