eBird API
eBird API provides a set of wrapper functions for accessing the end-points in the eBird API 2.0.
https://github.com/ProjectBabbler/ebird-api
Category: Biosphere
Sub Category: Avian Monitoring and Analysis
Keywords
api ebird python
Last synced: about 2 hours ago
JSON representation
Repository metadata
A wrapper for the public API to the eBird database.
- Host: GitHub
- URL: https://github.com/ProjectBabbler/ebird-api
- Owner: ProjectBabbler
- License: mit
- Created: 2017-02-13T21:45:52.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2025-04-05T17:37:20.000Z (22 days ago)
- Last Synced: 2025-04-19T16:36:14.127Z (8 days ago)
- Topics: api, ebird, python
- Language: Python
- Size: 359 KB
- Stars: 36
- Watchers: 6
- Forks: 7
- Open Issues: 2
- Releases: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Citation: CITATION.cff
README.md
eBird API
eBird API provides a set of wrapper functions for accessing the end-points
in the eBird API 2.0.
Install
pip install ebird-api
Usage
Each of the functions map to a specific end-point in the API - with one or
two exceptions where API calls are essentially identical. The functions can
be grouped into five activities: fetching observations, getting information
on hotspots, getting information on regions, getting lists of species and
getting statistics.
All functions support arguments (with sensible defaults) for all the query
parameters supported by the eBird API. Check the docstring for each function
for more details. There you will also find a link to the documentation for
each end-point.
To use the API you will need to register for an API key. All you need to do is
fill out this form and the API key is generated
automatically.
NOTE: Use the API with some restraint. Data costs money so don't go downloading
all the checklists for the world or other excessive behaviour or your account will
get banned. If you have a project in mind get in touch with eBird and tell them
what you want to do - they will be interested to hear it.
Observations
import os
from ebird.api import get_observations
# Always store secrets outside the code, so you don't accidentally
# commit them. Environment variables are ideal for this.
api_key = os.environ["EBIRD_API_KEY"]
# Get observations from Woodman Pond, Madison county, New York for the past week.
this_week = get_observations(api_key, 'L227544', back=7)
# Get observations from Madison county, New York
country_records = get_observations(api_key, 'US-NY-053')
# Get observations from New York
state_records = get_observations(api_key, 'US-NY')
# Get observations from the USA - don't overdo the data downloads
national_records = get_observations(api_key, 'US')
Any where you pass in single location or region you can also pass in a
list or a comma-separated string. You can specify up to 10 locations or
regions:
import os
from ebird.api import get_observations
api_key = os.environ["EBIRD_API_KEY"]
# Get the observations for the most visited locations in Madison county, New York:
# Woodman Pond, Ditch Bank Rd., Cornell Biological Field Station and
# Anne V Pickard Memorial Wildlife Overlook.
locations = ['L227544', 'L273783', 'L677871', 'L2313391']
get_observations(api_key, locations, provisional=True, detail='full')
# Get the observations for Suffolk, Nassau and Queens counties in New York state.
counties = 'US-NY-103,US-NY-059,US-NY-81'
records = get_observations(api_key, locations, hotspot=False, category='species')
The common name for species can be returned in different languages by
specifying locale in the functions that return observations, checklists
or taxonomy:
import os
from ebird.api import get_observations
api_key = os.environ["EBIRD_API_KEY"]
records = get_observations(api_key, 'CA-QC', locale='fr')
In addition to getting all the observations for a given location or in
an area you can also get the latest observation of each species in a
geographical area - useful for finding the nearest place to see a given
species:
import os
from ebird.api import get_nearby_observations
api_key = os.environ["EBIRD_API_KEY"]
# Get the most recent sightings of all species seen in the last week within
# 10km of Point Reyes National Seashore.
records = get_nearby_observations(api_key, 38.05, -122.94, dist=10, back=7)
The calls to get_observations() and get_nearby_observation() return all the
available records. You can limit the set of records returned to only include
notable ones (locally or nationally rare species) or limit the records to
a small number of species:
import os
from ebird.api import (
get_notable_observations,
get_nearby_notable,
get_species_observations,
get_nearby_species,
)
api_key = os.environ["EBIRD_API_KEY"]
# Get the interesting birds seen in New York state.
notables = get_notable_observations(api_key, 'US-NY')
# Get the observations of Horned Lark (Eremophila alpestris) in New York state.
records = get_species_observations(api_key, 'horlar', 'US-NY')
# Get the interesting birds within 50kn of Point Reyes
nearby_notables = get_nearby_notable(api_key, 38.05, -122.94, dist=50)
# Find out if Barn Swallows have been seen in the area in the past 10 days
nearby_species = get_nearby_species(api_key, 'barswa', 38.05, -122.94, back=10)
For the more travel-minded you can also find out the nearest place to see a given species:
import os
from ebird.api import get_nearest_species
api_key = os.environ["EBIRD_API_KEY"]
# Where is the closest place to Cornell Lab of Ornithology to see
# Tennessee Warbler.
locations = get_nearest_species(api_key, 'tenwar', 42.48, -76.45)
Depending on what time of year you try this, you might have a long way to go.
Checklists
There are two functions for finding out what has been seen at a given location.
First you can get the list of checklists for a given country, region or location
using get_visits(). Each result returned has the unique identifier for the
checklist. You can then call get_checklist() to get the list of observations.
import os
from ebird.api import get_visits, get_checklist
api_key = os.environ["EBIRD_API_KEY"]
# Get visits made recently to locations in New York state:
visits = get_visits(api_key, 'US-NY')
# Get visits made recently to locations in New York state on Jan 1st 2010
recent_visits = get_visits(api_key, 'US-NY', '2010-01-01')
# Get the details of a checklist
checklist = get_checklist(api_key, 'S22536787')
Hotspots
There are two functions for discovering hotspots. get_hotspots() list all
the locations in a given area. You can find all the hotspots visited recently
by given a value for the back argument. get_nearby_hotspots() is used to find
hotspots within a given radius. get_hotspot() can be used to get information
on the location of a given hotspot.
import os
from ebird.api import get_hotspots, get_nearby_hotspots, get_hotspot
api_key = os.environ["EBIRD_API_KEY"]
# List all the hotspots in New York state.
hotspots = get_hotspots(api_key, 'US-NY')
# List all the hotspots in New York state visited in the past week.
recent = get_hotspots(api_key, 'US-NY', back=7)
# List all the hotspots in within 50kn of Point Reyes
nearby = get_nearby_hotspots(api_key, 38.05, -122.94, dist=50)
# Get the details of Anne V Pickard Memorial Wildlife Overlook in New York state.
details = get_hotspot(api_key, 'L2313391')
Regions
eBird divides the world into countries, subnational1 regions (states) or
subnational2 regions (counties). You can use get_regions() to get the
list of sub-regions for a given region. For the approximate area covered
by a region use get_region().
import os
from ebird.api import get_regions, get_adjacent_regions, get_region
api_key = os.environ["EBIRD_API_KEY"]
# Get the list of countries in the world.
countries = get_regions(api_key, 'country', 'world')
# Get the list of states in the US.
states = get_regions(api_key, 'subnational1', 'US')
# Get the list of counties in New York state.
counties = get_regions(api_key, 'subnational2', 'US-NY')
# Get the list of states which border New York state.
nearby = get_adjacent_regions(api_key, 'US-NY')
# Get the approximate area covered by New York state.
bounds = get_region(api_key, 'US-NY')
Taxonomy
You can get details of all the species, subspecies, forms
etc. in the taxonomy used by eBird. It's the easiest way
of getting the codes for each species or subspecies,
e.g. horlar (Horned Lark), cangoo (Canada Goose), etc.,
that are used in the other API calls.
import os
from ebird.api import get_taxonomy, get_taxonomy_forms, get_taxonomy_versions
api_key = os.environ["EBIRD_API_KEY"]
# Get all the species in the eBird taxonomy.
taxonomy = get_taxonomy(api_key)
# Get all the species in the eBird taxonomy with common names in Spanish
names = get_taxonomy(api_key, locale='es')
# Get all the taxonomy for Horned Lark
species = get_taxonomy(api_key, species='horlar')
# Get the codes for all the subspecies and froms recognised for Barn Swallow.
forms = get_taxonomy_forms(api_key, 'barswa')
# Get information on all the taxonomy revisions, i.e. versions.
# Usually only the latest is important.
versions = get_taxonomy_versions(api_key)
Statistics
You can also get some statistics from the eBird data. The most interesting
is probably get_top_100() which returns the list of observers who have seen
the most species or submitted the largest number of checklists. The list is
just for a specific day so it is really only useful for "Big Days" when
lots of people are out trying to get the greatest number of species.
import os
from datetime import date
from ebird.api import get_top_100, get_totals
api_key = os.environ["EBIRD_API_KEY"]
# Get the winner of the Global Big Day in New York, on 5th May 2018
winners = get_top_100(api_key, 'US-NY', '2018-05-05')
# Get the number of contributors, checklist submitted and species seen today
totals = get_totals(api_key, 'US-NY', date.today())
Client
There is a simple Client class which wraps the various functions from the API.
You can set the API key and locale when creating a Client instance so you don't
have to keep passing them as arguments.
import os
from ebird.api import Client
api_key = os.environ["EBIRD_API_KEY"]
locale = 'es'
client = Client(api_key, locale)
client.get_observations('MX-OAX')
The client supports all the API functions.
Formats
Most of the eBird API calls return JSON. Some of the calls such as getting
the hotspots for a region or getting the taxonomy also support CSV. Since
converting JSON to CSV is simple this library is opinionated in that it
only returns JSON.
Compatibility
ebird-api works with currently supported versions of Python, 3.8+. However,
it is known to work with earlier versions, at least 3.5 - 3.7, without any
problems.
Troubleshooting
Just occasionally (rarely in fact), the connection to eBird will freeze. The
client will raise an error but if you use the API functions directly then your
program will sit there forever. To fix this set a default timeout all connections
using:
import socket
socket.setdefaulttimeout(30)
Thirty seconds is a reasonable figure, however you might change it if your
internet connection is slow or the eBird servers are busy.
Links
Documentation for the eBird API: https://documenter.getpostman.com/view/664302/S1ENwy59?version=latest#intro
though it could do with a little love and attention.
Available translations for species names: http://help.ebird.org/customer/portal/articles/1596582
Information on the taxonomy used by eBird: http://help.ebird.org/customer/portal/articles/1006825-the-ebird-taxonomy
License
eBird API is available under the terms of the MIT licence.
Citation (CITATION.cff)
abstract: Wrapper for accessing the eBird API authors: - name: Project Babbler cff-version: 1.2.0 date-released: 2025-04-05 keywords: - eBird - API - client license: MIT License message: If you use this software, please cite it using the metadata from this file. repository-artifact: "http://pypi.python.org/pypi/ebird-api/" repository-code: "https://github.com/ProjectBabbler/ebird-api" title: eBird API version: 3.4.2
Owner metadata
- Name: Project Babbler
- Login: ProjectBabbler
- Email: [email protected]
- Kind: organization
- Description: Leveraging technology to enhance nature experiences
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/16588814?v=4
- Repositories: 5
- Last ynced at: 2023-02-28T02:00:36.252Z
- Profile URL: https://github.com/ProjectBabbler
GitHub Events
Total
- Issues event: 1
- Watch event: 14
- Push event: 19
- Pull request event: 1
- Fork event: 1
- Create event: 9
Last Year
- Issues event: 1
- Watch event: 14
- Push event: 19
- Pull request event: 1
- Fork event: 1
- Create event: 9
Committers metadata
Last synced: 6 days ago
Total Commits: 151
Total Committers: 4
Avg Commits per committer: 37.75
Development Distribution Score (DDS): 0.02
Commits in past year: 63
Committers in past year: 1
Avg Commits per committer in past year: 63.0
Development Distribution Score (DDS) in past year: 0.0
Name | Commits | |
---|---|---|
Stuart MacKay | s****y@f****m | 148 |
Mario St-Gelais | m****g@v****a | 1 |
Kate Ferrandino | 9****o | 1 |
Stuart MacKay | s****y@s****m | 1 |
Committer domains:
Issue and Pull Request metadata
Last synced: 1 day ago
Total issues: 20
Total pull requests: 6
Average time to close issues: about 1 month
Average time to close pull requests: over 1 year
Total issue authors: 4
Total pull request authors: 4
Average comments per issue: 0.5
Average comments per pull request: 1.17
Merged pull request: 2
Bot issues: 0
Bot pull requests: 3
Past year issues: 2
Past year pull requests: 1
Past year average time to close issues: about 1 month
Past year average time to close pull requests: N/A
Past year issue authors: 2
Past year pull request authors: 1
Past year average comments per issue: 1.5
Past year average comments per pull request: 0.0
Past year merged pull request: 0
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- StuartMacKay (17)
- gbabineau (1)
- ccraddo (1)
- RichardLitt (1)
Top Pull Request Authors
- dependabot[bot] (3)
- KateFerrandino (1)
- gbabineau (1)
- mariostg (1)
Top Issue Labels
- bug (3)
- testing (2)
- packaging (1)
Top Pull Request Labels
- dependencies (3)
Package metadata
- Total packages: 1
-
Total downloads:
- pypi: 1,462 last-month
- Total dependent packages: 1
- Total dependent repositories: 6
- Total versions: 24
- Total maintainers: 1
pypi.org: ebird-api
Wrapper for accessing the eBird API
- Homepage:
- Documentation: https://ebird-api.readthedocs.io/
- Licenses: MIT License
- Latest release: 3.4.2 (published 22 days ago)
- Last Synced: 2025-04-26T19:01:35.580Z (1 day ago)
- Versions: 24
- Dependent Packages: 1
- Dependent Repositories: 6
- Downloads: 1,462 Last month
-
Rankings:
- Dependent packages count: 4.746%
- Dependent repos count: 6.017%
- Average: 8.71%
- Downloads: 15.367%
- Maintainers (1)
Score: 12.316898200619057