← Back to the map

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:

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.)

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.

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.

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.

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 ofRange centreIndex per 1,000
27 Jul52.8° N0.07
10 Aug45.2° N0.11
24 Aug45.0° N0.17
7 Sep42.8° N0.24
14 Sep39.3° N0.19
21 Sep29.7° N0.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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Coarse cells. At 5 degrees, movements shorter than a few hundred kilometres are invisible, and a range centre is a summary, not a route.
  6. 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.
  7. 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.
  8. 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.
  9. Uncertainty covers sampling noise only. Intervals (see Uncertainty) do not include classifier errors or where sensors and observers happen to be.
  10. Short history. Daily rollups cover four weeks; weekly rollups go back up to a year but with fewer stations in earlier months.
  11. 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.
  12. 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

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.