# Taxonomic Tree Visualizer

**URL:** <https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104>\
**Category:** General\
**Created:** [September 11, 2025, 12:23pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104 "2025-09-11T12:23:47Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 11, 2025, 12:23pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/1 "2025-09-11T12:23:47Z")

</div>

Taxonomic Tree Visualizer

[https://inat-trees.replit.app](https://inat-trees.replit.app)

Hi! I’ve been working on this site that lets iNat users visualize their observations as taxonomic trees with a few different modes. It uses markmap to make the trees. It’s still kinda quirky and I would love some feedback if you can mess around with it. I’m not a developer so I’m just trying things.

1. **Explore** - View your observations and your first observation pic for each species

2. **Battle Mode (PVP)** - Compare 2 users’ observations for a little competition

3. **Timelines** - Needs more work, but the idea is you can play a timeline of your observation taxonomic tree and see how it grew over time

4. **Checklist** - Compare your observations to a region’s checklist (currently just U.S. states and Canadian provinces/territories). US checklists from February 2025, Canada August 2025. Mexico next. I need a better way to update these checklists rather than exporting csv files manually.

This also creates a leaflet map of species you haven’t seen yet with their Open Range Maps (from the Geomodel) and some observations within your chosen region. [iNaturalist Open Range Map Dataset](https://www.inaturalist.org/pages/open+data). I’m looking for other ways to expand the map functionality.

 ![image](https://us1.discourse-cdn.com/flex016/uploads/inaturalist/original/3X/8/d/8dcca392a9a8b558fa4866924e2264627a5c8627.jpeg)

Thanks for checking it out!

---

<div class="post-metadata">

**Author:** ![friesen5000](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/friesen5000/32/31051_2.png) [@friesen5000](https://forum.inaturalist.org/u/friesen5000)\
**Post date:** [September 11, 2025, 1:22pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/2 "2025-09-11T13:22:26Z")

</div>

Super cool!

---

<div class="post-metadata">

**Author:** ![susanne-kasimir](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/susanne-kasimir/32/34021_2.png) [@susanne-kasimir](https://forum.inaturalist.org/u/susanne-kasimir)\
**Post date:** [September 11, 2025, 1:57pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/3 "2025-09-11T13:57:45Z")

</div>

Looks cool - but it doesn’t display all the species. Maybe I did something wrong? I tried butterflies and moths. For example Papilionidae - there are only 3 species, but it just gives the node Papilionidae without any species. In most families or genera it leaves out something.

---

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 11, 2025, 2:10pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/4 "2025-09-11T14:10:00Z")

</div>

Thanks for testing this. Oops yea, I can see it isn’t grabbing the full species list for a large taxon and many observations. I can fix this up. Good catch

---

<div class="post-metadata">

**Author:** ![zoology123](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/zoology123/32/66135_2.png) [@zoology123](https://forum.inaturalist.org/u/zoology123)\
**Post date:** [September 11, 2025, 2:16pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/5 "2025-09-11T14:16:42Z")

</div>

Looks very interesting, but shouldn’t this app basically just be reading data? Not creating or updating? What is the purpose for these requirements? Especially relating to identifications? Being a curator, does this mean your app could access curator only things like the moderation history of other users since it basically says it can read any information you can see?

 ![1000074159](https://us1.discourse-cdn.com/flex016/uploads/inaturalist/original/3X/5/4/541656f01cb150f20f93f6556f046cd8e5986296.jpeg)

Another question, can you theoretically make an app identify or observe on your behalf? Maybe even add comments automatically?

---

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 11, 2025, 2:45pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/6 "2025-09-11T14:45:30Z")

</div>

Good question. The app just reads your observations, only GET endpoints. I don’t believe there is a curator/moderation endpoint that allows to see other’s moderation history or anything of that sort.

I’ll look into the scope to see if i can reduce the permissions required so it just needs login and/or read. But I think right now, iNaturalist requires the write permission to exchange for the JWT token and access to higher API limits that allows this app to work AFAICT, though I could be wrong.

For your other question: Yes, you could make some app to post observations and populate comments I suppose. Though there is no Computer Vision endpoint, you’d need to identify some other way.

I would be happy to hear from somebody more familiar here to see if a strictly read-only permission mode is possible while still being authenticated. It seems all or nothing to me right now.

---

<div class="post-metadata">

**Author:** ![upupa-epops](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/upupa-epops/32/1972_2.png) [@upupa-epops](https://forum.inaturalist.org/u/upupa-epops)\
**Post date:** [September 11, 2025, 3:14pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/7 "2025-09-11T15:14:38Z")

</div>

> [@zoology123](#):
>
> can you theoretically make an app identify or observe on your behalf? Maybe even add comments automatically?

I’m sure that’s technically possible but would probably be against the iNat [guidelines](https://www.inaturalist.org/pages/machine_generated_content) on machine-generated content.

---

<div class="post-metadata">

**Author:** ![yayemaster](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/yayemaster/32/12153_2.png) [@yayemaster](https://forum.inaturalist.org/u/yayemaster)\
**Post date:** [September 11, 2025, 5:01pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/8 "2025-09-11T17:01:14Z")

</div>

It looks _really_ cool but is it safe? Will this delete my observations without my permission or gain sensitive access?

I don’t want my data compromised.

---

<div class="post-metadata">

**Author:** ![makynziecler](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/makynziecler/32/64045_2.png) [@makynziecler](https://forum.inaturalist.org/u/makynziecler)\
**Post date:** [September 11, 2025, 5:43pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/10 "2025-09-11T17:43:36Z")

</div>

This is super cool! I can see myself using this for the course I TA in university.

The only issue I am having is when exporting, the background is dark and for some reason the font darkens as well when on the site it is white. I’ve attached an example.

 ![makynziecler-Odonata_2025-09-11-17-41-12_png](https://us1.discourse-cdn.com/flex016/uploads/inaturalist/original/3X/d/3/d38622c5d9275fce5ef83fe4bb67b55dfdbcecf5.png)

---

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 11, 2025, 5:45pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/11 "2025-09-11T17:45:20Z")

</div>

Thanks! I’ll add it to the list to fix 🙂 I think if you try with light mode on it should export with readable font for the time being

---

<div class="post-metadata">

**Author:** ![makynziecler](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/makynziecler/32/64045_2.png) [@makynziecler](https://forum.inaturalist.org/u/makynziecler)\
**Post date:** [September 11, 2025, 5:47pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/12 "2025-09-11T17:47:51Z")

</div>

Also, whenever you are looking for enhancements - could you add an option to select Identifications for a selected date range? Like say I am part of a bioblitz for a local area and I want to create a tree for all taxa I observed during that time period.

---

<div class="post-metadata">

**Author:** ![pisum](https://avatars.discourse-cdn.com/v4/letter/p/91b2a8/32.png) [@pisum](https://forum.inaturalist.org/u/pisum)\
**Post date:** [September 11, 2025, 7:32pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/13 "2025-09-11T19:32:06Z")

</div>

> [@mmulqueen](#):
>
> I’ll look into the scope to see if i can reduce the permissions required so it just needs login and/or read. But I think right now, iNaturalist requires the write permission to exchange for the JWT token and access to higher API limits that allows this app to work AFAICT, though I could be wrong.

getting observations / observation-related information through the usual API routes usually doesn’t require authorization, unless you need private coordinates. if you’re doing something more exotic to get observations, such as going through the undocumented export module to get observations as a CSV, then that does need authorization. or if you’re getting some information from undocumented list APIs, then that could also require authorization.

i haven’t looked at your application or how it works, but just based on the images, i would make a couple of comments:

1. if you don’t actually need observation-level information, it’s usually going to be more efficient to get aggregated information. for example, if you’re mostly interested in taxa and their relationships, then taxonomic tree information can be obtained via an undocumented endpoint `/observations/taxonomy` (which is the thing that provides data for dynamic life lists). for example, this displays your verifiable observations in the USA: [https://jumear.github.io/stirfry/iNat\_observations\_taxonomy?user\_id=mmulqueen&place\_id=1&verifiable=true](https://jumear.github.io/stirfry/iNat_observations_taxonomy?user_id=mmulqueen&place_id=1&verifiable=true). note that this isn’t super efficient if you have a boatload of taxa, but it’s probably still the best option you have, and i think you’d run into other issues with other approaches before this kind of limitation affects this approach.
2. similarly, if you don’t need observation-level detail records to make maps either. for example, this shows verifiable Rudbeckia amplexicaulis observations with the associated taxon range: [https://jumear.github.io/stirfry/iNat\_map?verifiable=true&taxon\_id=200073&showexpectednearby=true](https://jumear.github.io/stirfry/iNat_map?verifiable=true&taxon_id=200073&showexpectednearby=true)

> [@mmulqueen](#):
>
> **Checklist** - Compare your observations to a region’s checklist (currently just U.S. states and Canadian provinces/territories). US checklists from February 2025, Canada August 2025. Mexico next. I need a better way to update these checklists rather than exporting csv files manually.

it’s theoretically possible to get lists dynamically from the system via an undocumented list endpoint `https://www.inaturalist.org/lists/{id}.json` (requires authorization), but it’s not particularly efficient if your list contains a ton of taxa. you could use the dynamic life list data to get similar data, although it won’t include taxa that were manually added to the lists (as opposed to documented via observations in the system).

---

<div class="post-metadata">

**Author:** ![jwidness](https://avatars.discourse-cdn.com/v4/letter/j/9d8465/32.png) [@jwidness](https://forum.inaturalist.org/u/jwidness)\
**Post date:** [September 11, 2025, 8:08pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/14 "2025-09-11T20:08:11Z")

</div>

> [@pisum](#):
>
> the undocumented export module to get observations as a CSV

are you referring to `https://www.inaturalist.org/observations.csv`?

---

<div class="post-metadata">

**Author:** ![pisum](https://avatars.discourse-cdn.com/v4/letter/p/91b2a8/32.png) [@pisum](https://forum.inaturalist.org/u/pisum)\
**Post date:** [September 11, 2025, 8:10pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/15 "2025-09-11T20:10:48Z")

</div>

no, i believe it’s possible to actually initiate one of those max 200000 record CSV exports using some tricks, but it’s undocumented.

---

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 11, 2025, 8:21pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/16 "2025-09-11T20:21:35Z")

</div>

Thanks this is good information! For the checklists I downloaded csv’s from place pages such as: [https://www.inaturalist.org/check\_lists/300-Massachusetts-Check-List](https://www.inaturalist.org/check_lists/300-Massachusetts-Check-List)

I built the taxonomy ancestor ids from some big iNat export I found somewhere. So these are all going to be outdated of course as taxonomy updates. That taxonomy endpoint could be useful in pulling in changes perhaps.

I’ll try to remove the authentication and see if I can get that going because you’re right this app doesn’t need hidden coordinates or anything like that. At some point I thought I needed it for a bigger API throughput but that might not be necessary either. I’d like to do away with authentication.

---

<div class="post-metadata">

**Author:** ![jokkomarat](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/jokkomarat/32/4075_2.png) [@jokkomarat](https://forum.inaturalist.org/u/jokkomarat)\
**Post date:** [September 11, 2025, 8:22pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/17 "2025-09-11T20:22:02Z")

</div>

This is very cool!  
But the “**Region Checklist (Targets)” sadly only offers US and CA.**

---

<div class="post-metadata">

**Author:** ![pisum](https://avatars.discourse-cdn.com/v4/letter/p/91b2a8/32.png) [@pisum](https://forum.inaturalist.org/u/pisum)\
**Post date:** [September 11, 2025, 8:29pm UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/18 "2025-09-11T20:29:39Z")

</div>

> [@mmulqueen](#):
>
> Thanks this is good information! For the checklists I downloaded csv’s from place pages such as: [https://www.inaturalist.org/check\_lists/300-Massachusetts-Check-List](https://www.inaturalist.org/check_lists/300-Massachusetts-Check-List)

right. the API route for getting that information is via [https://www.inaturalist.org/check\_lists/300-Massachusetts-Check-List.json](https://www.inaturalist.org/check_lists/300-Massachusetts-Check-List.json), but if you look at the end of the response, you’ll see that particular list has ~16000 taxa and (based on max 200 taxa per page) will require 80 requests to get the whole list. it does include ancestry information though.

the alternative using the dynamic life list would be something like [https://api.inaturalist.org/v1/observations/taxonomy?place\_id=2&quality\_grade=research](https://api.inaturalist.org/v1/observations/taxonomy?place_id=2&quality_grade=research), which returns everything in 1 request, but again, this would rely on observations (and will not include items manually added to the Massachusetts list).

---

<div class="post-metadata">

**Author:** ![yayemaster](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/yayemaster/32/12153_2.png) [@yayemaster](https://forum.inaturalist.org/u/yayemaster)\
**Post date:** [September 12, 2025, 3:45am UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/19 "2025-09-12T03:45:41Z")

</div>

@mmulqueen is it safe for me to link my account to this? Are my observations going to be deleted without consent?

---

<div class="post-metadata">

**Author:** ![shreedave](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/shreedave/32/55592_2.png) [@shreedave](https://forum.inaturalist.org/u/shreedave)\
**Post date:** [September 12, 2025, 3:58am UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/20 "2025-09-12T03:58:03Z")

</div>

Well, technically they could, but I linked my account, trusting @mmulqueen, and nothing happened to my observations…

---

<div class="post-metadata">

**Author:** ![mmulqueen](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.inaturalist.org/mmulqueen/32/330_2.png) [@mmulqueen](https://forum.inaturalist.org/u/mmulqueen)\
**Post date:** [September 12, 2025, 10:52am UTC](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104/21 "2025-09-12T10:52:00Z")

</div>

I have a plan to remove the authentication step now since it is not necessary. I’ll keep everyone posted.

[Next page](https://forum.inaturalist.org/t/taxonomic-tree-visualizer/70104.md?page=2)
