How to use iNaturalist's search URLs

This page was originally drafted with the support of many iNaturalist Forum community members.

The Explore page (also known as observations search) at is the primary way for iNaturalist users to search for a set of observations. The page does have many filters available in the user interface that one can use, but in order to keep the page from containing an overwhelming number of search parameters, editing the URL is the only way to access certain search results.

What follows are examples of different URLs you can use to create more complicated searches than are available through the user interface. Once you have a search you like, you can always bookmark the URL to save the search.

Getting started

WHAT (taxa and identifications)
Multiple taxa
Multiple taxa using a list
By scientific name, synonym, or common name
Exact taxon (no descendants)
Active identification(s)
Observations without any identifications
Taxon status (introduced, native, threatened)

WHERE (places and geography)
Multiple places
Bounding box or circle
Location (positional) accuracy
Observations with or without georeferenced coordinates

WHEN (dates and times)
Date with time
Month(s) of year or day(s) of month

WHO (observers and identifiers)
Multiple observers
Account age
Media licenses

Other observation properties
Observations with or without media (photos, sounds)
Include both "wild" and "not wild" observations
Observation numbers (id numbers)
Observation field values
Description, Tag, Name, Place
Project-related queries
Observations from iOS, Android, or Seek apps

More tools and tips
Search exclusions (not place, not taxon, not observer, etc.)
Sort by Dates, Faves, or Randomly
Look up ID numbers
Change number of results per page
Change page language/locale
About this page

Getting started

Each time a search filter is applied, you'll notice the search URL (or web address) changes. For example, a search for all snake observations...

...creates this URL:

This URL is basically a set of search instructions for iNaturalist and it will always show all verifiable snake observations worldwide if you paste it into a a new browser tab (try it!).

You'll notice the last part of the URL above says taxon_id=85553. That number is iNaturalist's ID for the taxon Serpentes (snakes). You can always find that number by going to the taxon's page and looking at the URL (e.g. for Serpentes) or searching for it on Explore and looking at the URL.


  • The search methods below correspond primarily to Observations on Explore or Identify. Most will work in both contexts, but some may only work in one context or the other. Other searches exist for places like comments, identifications, taxa, flags, taxon changes, etc.
  • Most of these individual searches can be combined into one search URL. Separate search types are separated by ampersands (&).
  • Searches in Identify may return fewer results unless you first override certain default states (quality_grade=needs_id, reviewed=false) using the filters.
  • If you have a default Place set in your filters, this may exclude observations from your search. To avoid this, clear the Place from your filter, or add place_id=any to the URL.

Multiple taxa

If you want to search for more than one taxon at a time, you can edit the URL to include multiple taxon IDs. Let's say I wanted to search for all snakes and all crocodilians ( I will have to change taxon_id to taxon_ids and I can add another taxon number to it by using a comma, so I would end up with:,26039

You can add more taxon IDs to this URL to search for even more taxa. For example, here are all snakes, crocodilians, and nudibranchs:,26039,47113

You can also exclude taxa by using without_taxon_id=. For example, all snakes, crocodilians, and nudibranchs, but without vipers:,26039,47113&without_taxon_id=30667

Multiple taxa using a List

You can use lists on iNaturalist to restrict a search to a set of taxa. For example, is a list that is already set up. The list_id is the number in the URL: 111820 in this case. Using the list_id= restricts an observation search to the taxa on that list, so brings back only results from the list linked above.

By scientific name, synonym, or common name

In the main header, Explore, Identify, and other areas, you can always type in the scientific name, common name, or synonyms and the species or other taxon you are looking for should appear. There is a separate, infrequently used search option called taxon_name= that can be used to search names directly via the URL. It accepts current scientific names, synonyms, and even common names.

Exact taxon (no descendants)

This works on Identify only.

If you want to search for observations only at an exact taxon, you can use exact_taxon_id= in Identify mode. This is essentially equivalent to searching for that taxon, but also using the Rank filter for the rank of that taxon, i.e. it will not return observations of descendants. So this returns observations of Aves, but not identified to family, genus, species, etc.:

Unlike a Filters search, however, you can show multiple exact taxa by separating them with commas. To see observations identified as Birds or Mammals (but not a descendant thereof) use,40151

If you want to exclude one or more exact taxa, but keep their descendants, you can use without_direct_taxon_id=. This is all snakes except observations at the exact rank of vipers or pythons:,67532

Active identification(s)

To find observations to which a particular ID has been added (even if that is not the consensus ID), use ident_taxon_id=.

For example, this should show observations which have an active Dysdera crocata ID, a commonly misidentified spider.

You can also string together multiple taxa with ident_taxon_id_exclusive=. For example,,46017 will bring back observations that have identifications of both Sciurus carolinensis and Sciurus niger. And,46017,46023 will return observations with IDs of S. carolinensis, S. niger, and S. griseus.

Observations without any identifications

Observations of Bacteria, Archaea, Viruses, and Life show up under the Unknown category. To filter just for observation with no ID at all, use identified=false. e.g.

Taxon status (introduced, native, threatened)

To limit results to observations whose taxa are introduced, native, and/or threatened in their places, add

native= true|false|any (default is any) introduced= true|false|any (default is any; true is available in Filters panel) threatened= true|false|any (default is any; true is available in Filters panel)


  • native=true will not find only introduced=false, nor vice-versa. Results depend on the Establishment Means set in the appropriate place checklists.
  • native=true finds taxa set to native or endemic.
  • native=false finds taxa set to unknown or introduced.
  • introduced=true finds taxa set to introduced.
  • introduced=false finds taxa set to unknown, native, or endemic.
  • threatened=true includes taxa that have a conservation status with an IUCN equivalent of NT (Near Threatened) or worse specified, regardless of the taxon geoprivacy setting. See Search by geoprivacy to combine taxon geoprivacy in the search.

Multiple places

This is pretty similar the multiple taxa URL. Like taxa, places have their own unique ID number, which you can find by searching for it and looking at the resulting URL. For example, here are all observations in Hong Kong:

So Hong Kong's ID number is 7613. If I wanted to search for observations in both Hong Kong and Macao, all I have to do is append Macao's ID number to the end:,10301

You can then start combining place and taxa search by using an ampersand (&). Here is a search for all snakes, crocodilians, and nudibranchs in Hong Kong and Macao:,26039,47113&place_id=7613,10301

To exclude a place from your search, use not_in_place=. This is a search for all snakes, crocodilians, and nudibranchs in the United States, but not in Texas:,26039,47113&place_id=1&not_in_place=14

Bounding box or circle

If you'd like to search an area that doesn't have a place ID, you can put in a rectangular bounding box or a circle with a defined center and radius. A bounding box search can be done by either using Explore to zoom on the map area you want and clicking "Redo search in map", or by manually entering the coordinates into the URL. For example, finds observations in a rectangular area north of Houston, Texas. You can use Google maps to find the lat/long points - just click on the map and it will give you the numbers.

The circle has to be manually entered into the URL. For example, finds observations in a 16 km circle around Washington, DC. You can use the circle tool of the ruler menu of Google Earth to draw a circle and to find out the center point.

Location (positional) accuracy

Positional accuracy, more accurately called "precision", on iNaturalist is recorded in meters.

acc: Filter on whether or not observations have a positional_accuracy, e.g.

acc_above: Show observations with positional_accuracy above a given value, e.g.

acc_below: Show observations with positional_accuracy below a given value, e.g.


There are two params here: geoprivacy and taxon_geoprivacy.

geoprivacy: the observer has manually chosen the geoprivacy for the observation. taxon_geoprivacy: iNaturalist has chosen the observation's geoprivacy due to the taxon's conservation status.

You will have to use both if you want to see all the obscured, private, or open observations in your search.

The three values possible here are open, obscured, and private.

Observations with or without georeferenced coordinates

The parameter geo specifies whether an observation has georeferenced coordinates (a location). Note that observations where either the geoprivacy or taxon_geoprivacy is private (see previous section) are considered to have no georeferenced coordinates. So here are observations that have a public location:

And here are observations with no location data entered:,obscured&taxon_geoprivacy=open,obscured&verifiable=any

Date with time

Within the Filters menu, there is an option to search by date Range. The pop-up calendar chooser allows dates to be selected, but times need to be added manually. They can be typed into the Range boxes with the dates, or modified in the URL. Unless you want to search using UTC, you also need to add an offset for the time zone.


This searches a location that is in CDT, using the offset -05:00, which is the offset between CDT and UTC. So results are observations made locally between 10am and 11am on October 25, 2020.

Month(s) of year or day(s) of month

To find observation from particular time(s) of year, the following may be helpful:

The following are less helpful and/or already covered by existing filters, but are listed for completeness. They can be combined with the month= search:

  • day=21 finds observations on the 21st of any month.
  • year=1980,1981,1982 should be self-explanatory.

Time Zone is ignored. Results just reflect the recorded date in any time zone.

Multiple observers

To limit a search to a specific set of observers add user_id= and a comma-separated list of user ids:

User IDs can be either login names or user numbers, but not a mixture of the two:

To exclude one or more observers, you can use not_user_id=:


If you only want to see observations to which a certain user has added an ID, use the ident_user_id param. For example, here are all observations to which I have add an ID:

For observations identified by one or more of several users, separate them with commas:,kueda,jdmore

To exclude observations identified by particular user(s), use without_ident_user_id=, e.g.,jdmore

  • Both of these parameters may be used in combination.
  • The search looks for any active ID by the user(s), whether or not they match the community ID.

Account age

If you want to focus on observations from very new, very old, or in-between user accounts, you can add parameters like the following examples:

user_after=3w - users with accounts created more recently than 3 weeks ago user_before=52w - users with accounts created earlier than 52 weeks ago user_before=4w&user_after=8w - accounts created between 4 and 8 weeks ago

  • The before and after 1w options are already available on the Identify Filters panel.

Media licenses

Single license queries are already available from the Filters panels,. To query for multiple license types:

  • photo_license=cc0,cc-by,cc-by-sa (example for all photo licenses accepted by Wikipedia)
  • photo_license=c0,cc-by,cc-by-nc (example for all photo licenses accepted by GBIF)
  • sound_license=cc0,cc-by (example for multiple sound licenses)


  • The system/search default is all observations regardless of license.
  • To search for photos that are "All Rights Reserved" use photo_licensed=false (as of 2023 there is no corresponding sound_licensed parameter).
  • Use lower-case license parameters to ensure functionality in Identify
  • There is currently no way to use search URLs to search for observation level licenses. The parameters are license and licensed in the API..

Observations with or without media (photos, sounds)

  • photos=true: has 1 or more photos (available in the GUI)
  • photos=false: does not have photos
  • sounds=true: has audio (available in the GUI)
  • sounds=false: does not have audio

Combine for medialess observations, e.g.

Include both "wild" and "not wild" observations

Some parts of the site will only show Wild observations by default, with an option to show Captive only. To be sure you are seeing both kinds of observations, use:


  • Besides any, the other options (already in the Filters panels) are true and false.

Observation ID

Each iNat observation has an id number that can be found in the URL for that observation. You can use this number with id= to restrict an Identify search to specific observations.

For example, to restrict an Explore search to and use,51170806

To exclude one or more specific observations, use not_id= followed by the observation ID(s) you want to exclude, separated by commas (as of 2022, this still only works on the Identify page, not Explore).

Search for observation field values

You can specify observation fields and their values in the URL. For example, here are all of the observations with the observation field "Roadkill" set to "Yes".

You can search for all observations with a field regardless of the field value (e.g. the field "Habitat (s Afr)&place_id=any)" only): field:Habitat%20(s%20Afr)

or with a field and value (e.g. "Habitat (s Afr)=Nama Karoo=Nama%20Karoo&place_id=any)"): field:Habitat%20(s%20Afr)=Nama%20Karoo

You can easily combine these with other search strings. For example, the following shows all observations marked as being of insect herbivores of Ecualyptus.>Herbivore%20of=51815

The taxon ID for Insecta is 47158 and for Eucalyptus is 51815 (which you find from the URLs of their taxon pages, and The observation field used here is Interaction->Herbivore of. Note that the space in that field name needs to be replaced with a %20 in the URL so the browser doesn't get confused.

Observations without a particular observation field can be found using &without_field=, such as observations of dead mammals not also tagged as roadkill:

Observation field view Observation field view for a value: (e.g. Fynbos in Habitats-s-afr): (case sensitive) Ascending list of observation fields: Descending list:


term_id= - the annotation group

  • 1=Life Stage, 9=Sex, 12=Plant Phenology, 17=Alive or Dead

term_value_id= - the value within the group

  • Life Stage: 2=Adult, 3=Teneral, 4=Pupa, 5=Nymph, 6=Larva, 7=Egg, 8=Juvenile, 16=Subimago
  • Sex: 10=Female, 11=Male
  • Plant Phenology: 13=Flowering, 14=Fruiting, 15=Flower Budding, 21=No Evidence of Flowering
  • Alive or Dead: 18=Alive, 19=Dead, 20=Cannot Be Determined

Both the group parameter and value parameter should be included in the URL. And term_value_id should be able to accept a comma-separated list of more than one value.

Here are all verifiable Lepidoptera observations with a Life Stage of Larva:

And here are all verifiable Lepidoptera observations with a LIfe Stage of Larva or Adult:,6

To exclude observations with particular annotations, use the following similar to the above:

  • without_term_id= the annotation group
  • without_term_value_id= the value within the group

Description, Tag, Name, Place

The Explore and Identify filters include a box called Description / Tags. This box actually searches 4 things: description, tags, names of taxa with active IDs, and place descriptions. To search just one of these at a time, you can specify a search term and also which one to search.

Specify the search term with q=searchterm, for example q=small. Replace spaces with %20, for example very%20small.

  • To restrict the search to the description, use search_on=description
  • To restrict the search to tags, use search_on=tags
  • To restrict the search to active ID taxon names, use search_on=names
  • To restrict the search to the description of the place (also called the "locality notes" or the place_guess), use search_on=place

As an example, searches for observations with the tag 'leaf miner'.

Current limitations: This tool cannot search the text within comments or ID comments.

Project-related queries

project_id= is used by the standard filter window, and restricts a search to observations in a selected project. This is also a good way to look up and copy the Project ID for use with other Project queries.

Use not_in_project= to find observations that are in a place and not in a project, for example, all beetles in NZ currently not in the NZ beetles project: place_id=94916 New Zealand Zone taxon_id=47208 Coleoptera

If a project is more complicated than just taxa in a place, you can filter observations based on matching the complete rule-set of a project, or on not matching it:

  • apply_project_rules_for=
  • not_matching_project_rules_for=

To find only observations by people who have joined the project (versus all observations that qualify for inclusion in the project), use members_of_project= followed by the project ID.

Observations from iOS, Android, or Seek apps

oauth_application_id= searches observations by the source of upload.

Search by exclusions (not place, not taxon, not observer, etc.)

Many of the above searches can also be excluded from results. These options are collected here again for convenience.

without_taxon_id= (excludes one or more taxa and their descendants)

exact_taxon_id= (Identify only; excludes descendants of one or more taxa)

without_direct_taxon_id= (Identify only; works like without_taxon_id but descendants aren't excluded)

not_in_place= (excludes one or more places)

geo=false without a location (though you may want to also exclude private observations with geoprivacy=open,obscured&taxon_geoprivacy=open,obscured)

not_user_id= (excludes one or more observers)

photo_licensed=false (excludes observations with photos with a license, i.e. shows observations with "All Rights Reserved" photos. As of 2023 there is no corresponding sound parameter)

without_ident_user_id= (not identified by one or more users)

not_id= (Identify only; excludes a list of specific observations by id number)

without_term_id= (the annotation group)

without_term_value_id= (the value within the annotation group)

without_field= (without a particular observation field)

not_in_project= (not included in one or more projects)


For example, I want to identify Asteraceae (47604) from California (14), but not sagebrush or rubber rabbitbrush (genus Artemisia 52855 or species Ericameria nauseosa 57934) and not from the Sierra Nevada (52173) or the White Mountains (129416), not my own (51061), and without the plant phenology annotation "flowering":,52173&without_taxon_id=52855,57934&not_user_id=51061&term_id=12&without_term_value_id=13

Of course, if any of your "with" and "without" parameters conflict, you should expect to get conflicting results! (or none at all).

Sort by Dates, Faves, or Randomly

The Identify Filters panel already has options built in to sort by Date Added (default), Date Observed, Date Updated (edited), Faves, or Random. Sorting options are Descending (default) or Ascending.

Two of these options are not available in the Explore filters, but can still be added manually: Date Updated and Random. To add these, use

  • order_by=updated_at
  • order_by=random

Sorting order is specified by

  • order=desc or
  • order=asc

For example will show you all bird observations sorted by date last edited, with observations updated longest ago displayed first.

Look up ID numbers

ID numbers are needed for many of the searches detailed herein. Here are some easy ways to find them:

  • User: go to the user's profile page, then add .json to the URL and press enter. ID is first number listed.
  • Taxon: In Identify use the Species box at top to find and select the desired Taxon. The taxon_id number will be added to the URL in the browser address bar.
    • OR, go to the page for that taxon and the number will be part of the URL.
  • Place: In Identify use the Place box at top to find and select the desired Place. The place_id number will be added to the URL in the browser address bar.
  • Project: In Identify go to Filters, then More Filters, enter and select the project in the Project box. The project_id number will be added to the URL in the browser address bar.
    • If the project "URL slug" is needed instead of the number, go to the page for that project, or hover over a link to it, and the "slug" follows the last slash (/) in the URL.
    • For example, flora-of-russia is the URL slug for
  • List: go to the page for that list, or hover over a link to it, and the number will be part of the URL.

Change number of results per page

(works in Identify only)

To change the number of observations displayed per page in Identify, add per_page= followed by a number up to 200.

Change page language/locale

To display any translatable iNat page in another language without changing your settings:

About this Page

This page was a collaboration of many members of the iNaturalist community. Want to add or edit something? Any iNaturalist Curator can edit this page - the link to edit is on the bottom right. Otherwise, reach out to @bouteloua and she'd be happy to work with you on making changes or additions.

Revised on November 22, 2023 03:25 PM by bouteloua bouteloua