Birdsync: a tool to sync verifiable eBird observations to iNaturalist

I’m writing to share birdsync, a tool I wrote to sync my eBird observations to iNaturalist:

https://github.com/Sajmani/birdsync

Birdsync’s purpose is to enable eBirders to easily contribute to the iNaturalist community. Based on feedback from the iNaturalist folks, I’ve tuned birdsync to create higher quality observations: it only uploads verifiable observations (those that include photos or sounds); it sets positional accuracy to something reasonable for eBird hotspots; and it avoids creating duplicate observations.

Birdsync is free and open source on GitHub. The README provides detailed instructions and a description of how it works. Feedback is welcome here; please file feature requests and bug reports as issues on GitHub. If you’re interested in contributing changes to birdsync, DM me on this platform.

Thanks!

S

19 Likes

Interesting! I’ll have to share this with some folks. I wish it would go the other way around–I’m way behind on uploading my data to eBird. But thank you! A great tool.

5 Likes

I had hoped to make it bidirectional, too! Unfortunately eBird doesn’t provide an API for writing checklists. Kudos to iNaturalist for providing an open platform!

7 Likes

I imagine it would be feasible to convert exported iNat data into one of the spreadsheet formats that eBird accepts for checklist submission?

3 Likes

That’s a neat idea! I might check that out next

2 Likes

This could be very helpful! I do have one question: does it result in doubled GBIF records? Or does eBird not talk to GBIF?

4 Likes

It does result in duplication (I think eBird is the largest dataset in GBIF and iNat is the second largest) although I’m not sure how big of a deal that is. Many birders have been putting their bird observations on both platform for years. Old thread discussing it here.

4 Likes

Hopefully someone who actually works with the data could confirm but my understanding is because GBIF data is meant to be the widest conglomeration of data from different sources there’s no real expectation of a lack of overlap or redundancy. After all, the same cool vagrant bird could rack up dozens of eBird observations by itself.

2 Likes

Thanks for the thread, that was a good read.

That’s a fair point. My understanding is that most good studies using GBIF datasets already account for duplicate datapoints, so I suppose it doesn’t really matter that much. For some reason, though, I can’t bring myself to duplicate records myself.

3 Likes

I agree that duplication is not ideal, though responsible researchers will deal with it. I don’t know exactly how eBird data compares to iNat data in structure/formatting, so it could be easy or more difficult.

One other issue with duplication is just that it creates unnecessary work for IDers on iNat and eBird reviewers (or whatever they are called). Duplicating observations on both platforms increases the work for the humans who interact with the platforms with little/no scientific benefit - the data is already on GBIF when it is entered to one platform. In small amounts, this probably doesn’t matter. But if a large volume of eBird observations starting coming to iNat in a semi-automated fashion (or vice versa), that could be a large waste of identifier time/effort and take away from the user experience. It might be possible to filter out observations coming over to iNat from eBird for IDers that don’t want to contribute to those, but that would probably too complex for most users to implement (if they even know that is the origin of the observations).

6 Likes

some related threads:

3 Likes

Via @pisum ‘s links, there exists a Python program to generate an eBird spreadsheet of Historical observations from your iNaturalist data: https://github.com/lubianat/inat2ebird

1 Like

These are good points. Two follow ups:

  1. It is straightforward to see which observations have been created by birdsync: it identifies itself in the observation description, and it sets the “eBird” (submission ID) and “eBird scientific name” observation fields. Example: https://www.inaturalist.org/observations/312496934

  2. There may be value in having iNaturalist reviewers look at eBird observations, as the person creating the observation may have made an error in the ID they used in eBird. The iNaturalist community can help refine the identification. It’s on the user to then update the original eBird observation with the revised ID.

Thanks again, all, for the feedback. I find the birdsync tool useful, and I hope others do, too.
S

3 Likes

I had this error, any ideas how to resolve? (Note, I also submitted on GitHub so if you would rather simply reply there that is fine)

2025/09/09 22:48:56 Media assets differ between eBird https://ebird.org/checklist/S211428733 [Crypturellus cinnamomeus] (Thicket Tinamou) and iNaturalist http://inaturalist.org/observations/4c0371ba-7541-461e-b5ec-9643e4e70a30 [Crypturellus cinnamomeus] (): 1 ML Asset IDs added to eBird: 630176652
2025/09/09 22:48:56 Couldn’t download ML asset 630176652 from eBird: DownloadMLAsset(630176652): failed to rename file: rename C:\Users\tates\AppData\Local\Temp\birdsync2607409670 C:\Users\tates\AppData\Local\Temp\birdsync2607409670.mp3: The process cannot access the file because it is being used by another process.

Thanks! Let’s discuss on the issue: https://github.com/Sajmani/birdsync/issues/1

Do you think that it will be possible to do the same synch between EButterfly and iNat?

I’ve never looked at eButterfly, but probably! The iNaturalist API is quite good. The main requirement for sources is that they provide a way to download your observations and the corresponding media (photos or sounds).

I almost wish I used eBird so I could try it. Really cool.

1 Like

oh nice! thank you for sharing!

it is kind of hack-ish code I made some years ago, but very open. Feel free to steal/build upon it

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.